Ankündigung

Einklappen
Keine Ankündigung bisher.

DPT Wert lesen / schreiben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Handbuch] DPT Wert lesen / schreiben

    Hallo,
    ich bin gestern damit angefangen mich mit der Bibliothek zu beschäftigen. Grundsätzlich möchte ich in meinem Projekt die Uhrzeit auf dem Bus auswerten, die als
    Code:
    KNX_DPT_11_001
    geschickt wird.

    In den Beispielen ist leider nur das Auslesen von einem Binären Wert aufgenommen. Wie man nun einen 8bit, 16bit, 32bit wert auswertet ist auch noch einigermaßen zu verstehen, ich würde aber vorschlagen, dazu etwas mehr in die Beispiele aufzunehmen oder vielleicht eine Seite dazu im Wiki zu erstellen.

    Ich bin auch gerne bereit dazu, etwas content zu liefern, aber ich bräuchte ein paar infos, wie ich den oben genannten DPT korrekt auswerten kann.

    Vielen Dank im Voraus

    #2
    eigentlich ganz easy. Ich hab mach das z.B. für DPT 19.001, auch Zeit, nur mit Datum.


    Code:
    byte returnedValue[8];
    Knx.read(COMOBJ_gen_datetime, returnedValue);
    uint32_t knxtime = DPT19_2_POSIX(returnedValue);
    
    uint32_t KNXCLock::DPT19_2_POSIX(byte DPT19bytes[])
    {
    //uint16_t year, month, day, day_of_week, hour, minutes, seconds = 0;
    bool flag_F, flag_WD, flag_NWD, flag_NY, flag_ND, flag_NDoW, flag_NT, flag_SUTI, flag_CLQ = false;
    
    struct tm my_time = { /*.tm_year=0, .tm_mon=0, .tm_mday=0, .tm_hour=0, .tm_min=0, .tm_sec=0*/ };
    
    my_time.tm_year = 1900 + DPT19bytes[0];
    my_time.tm_mon = DPT19bytes[1];
    my_time.tm_mday = DPT19bytes[2];
    my_time.tm_hour = (DPT19bytes[3]) & 0x1F;
    my_time.tm_min = DPT19bytes[4];
    my_time.tm_sec = DPT19bytes[5];
    
    #if (DBGLVL & DBG_KNXCLOCK) != 0
    Debug.println(F("KNXCLock::DPT19_2_POSIX %u %u %u %u %u %u"), my_time.tm_year, my_time.tm_mon, my_time.tm_mday, my_time.tm_hour, my_time.tm_min, my_time.tm_sec);
    #endif
    
    /*
    year = 1900 + DPT19bytes[1];
    month = DPT19bytes[2];
    day = DPT19bytes[3];
    day_of_week = (DPT19bytes[4] >> 5) & 0x07;
    hour = (DPT19bytes[4]) & 0x1F;
    minutes = DPT19bytes[5];
    seconds = DPT19bytes[6];
    */
    
    flag_F = (DPT19bytes[6] >> 7 ) & 0x01;
    flag_WD = (DPT19bytes[6] >> 6 ) & 0x01;
    flag_NWD = (DPT19bytes[6] >> 5 ) & 0x01;
    flag_NY = (DPT19bytes[6] >> 4 ) & 0x01;
    flag_ND = (DPT19bytes[6] >> 3 ) & 0x01;
    flag_NDoW = (DPT19bytes[6] >> 2 ) & 0x01;
    flag_NT = (DPT19bytes[6] >> 1 ) & 0x01;
    flag_SUTI = (DPT19bytes[6] ) & 0x01;
    flag_CLQ = (DPT19bytes[7] >> 7 ) & 0x01;
    
    if(!(flag_F || flag_NY || flag_ND || flag_NT))
    {
    #if (DBGLVL & DBG_KNXCLOCK) != 0
    Debug.println(F("KNXCLock::DPT19_2_POSIX %u"), mktime(&my_time));
    #endif
    return mktime(&my_time);
    }
    else
    {
    return 0;
    }
    }
    OpenKNX www.openknx.de | NanoBCU und OpenKNX-HW verfügbar

    Kommentar

    Lädt...
    X