Ankündigung

Einklappen
Keine Ankündigung bisher.

TimeOf Day vom KNX Bus übernehmen

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

    TimeOf Day vom KNX Bus übernehmen

    Hallo,

    ich habe sehr wenig Erfahrung mit C Programmierung und momentan ein Problem beim Einlesen des DPT 10.001 TimeOfDay.

    Code:
    // index will contain the com-object which received a telegram
    switch (index)
    {
    case COMOBJ_timeOfDay :
    // code to treat received TimeOfDay DPT 10.001
    uint32_t t = Knx.read(COMOBJ_timeOfDay);
     ...
    Da DPT 10.001 ein 3 Byte Wert ist, habe ich "t" als uint32_t definiert.

    Im kdevice.h File ist folgendes definiert:
    Code:
    #define COMOBJ_timeOfDay 0
    #define COMOBJ_date 1
    #define COMOBJ_presence 2
    
    .....
    
    
    KnxComObject KnxDevice::_comObjectsList[] = {
    /* Index 0 - null */ KnxComObject(KNX_DPT_10_001, 0x2b),
    /* Index 1 - null */ KnxComObject(KNX_DPT_11_001, 0x2b),
    /* Index 2 - null */ KnxComObject(KNX_DPT_1_003, 0x2b),
    ...

    Als Ergebnis erhalte ich in der Debug Ausgabe

    Code:
    ...
    16:04:09.786 ->
    16:04:09.786 -> konnektingKnxEvents index=0
    16:04:09.786 -> internalKnxEvents index=0
    16:04:09.786 -> knxEvents(): KNX Object 0 reveived, NtpTimeOfDay = 60
    16:04:09.786 ->
    16:04:09.906 ->
    16:04:09.906 ->
    16:04:09.906 -> konnektingKnxEvents index=0
    16:04:09.906 -> internalKnxEvents index=0
    16:04:09.906 -> knxEvents(): KNX Object 0 reveived, NtpTimeOfDay = 60
    16:04:09.906 ->
    ...
    Mich wundert dabei, dass ich 2 Events im Debug sehe, auf dem Busmonitor ist allerdings nur 1 Event vorhanden.

    Für Hilfe wäre ich dankbar.


    Hat niemand eine Idee was ich hier falsch mache?
    Falls das nicht funktioniert, kann man die gesamte Nachricht als byte array auslesen?
    Dann könnte ich mir selbst die 3 Byte herauslesen.

    VG
    mobil750
    Zuletzt geändert von mobil750; 11.03.2022, 11:00.

    #2
    Hallo,
    ich habe zwar auch nicht so viel Ahnung, hatte aber bereits in einem anderen Thread über das Problem "Uhrzeit vom Bus" gelesen. Dort hatte SirSydom kompetent geantwortet und die Vorgehensweise erklärt. Vielleicht mal im Forum suchen.

    Wo liegt eigentlich dein Problem? Bekommst du die Uhrzeit nicht? Oder stören dich die zwei Events?

    Gruß
    Frank

    Kommentar


      #3
      Hallo Frank,

      danke für den Tip über SirSydom Beitrag. Habe ihn leider nicht gefunden obwohl ich alle seine Beiträge durchforstet habe. Ich werde ihn mal direkt kontaktieren.

      Mein Problem ist, dass TimeOfDay ein 3 Byte Wert ist (genauso wie bei DPT 11.001 Datum). Wie oben im Log Ausschnitt zu sehen ist, bekomme ich nur den Wert 60 (der Wert ist nach einem Reboot verschieden, dann aber immer gleich). Ich habe auch schon andere Datentypen ausprobiert. Da kommt dann z.B. ein großer Integer Wert, der aber wiederum konstant ist und sich nicht im Sekunden / Minuten Bereich ändert. Ich bin hier komplett lost, aber auch kein C Programmierer mit entsprechenden Kenntnissen.

      Im Prinzip würde es mir auch reichen, wenn ich die komplette Nachricht in einem Byte array als RAW Daten bekomme. Dann kann ich auf die 3 Byte selbst zugreifen.

      Das mit den jeweils 2 Events finde ich nur komisch. Im Prinzip stören sie nicht, ich würde nur gerne verstehen woher das kommt.

      Gruß
      Helmut

      Kommentar


        #4
        Hallo,

        ich habe inzwischen einen anderen Thread gefunden, in dem eine Lösung des Problems (Code) enthalten ist.
        Die Lösung ist simpel.
        https://knx-user-forum.de/forum/proj...y-oled-ssd1306

        Gruß
        Helmut

        Kommentar


          #5
          https://github.com/KONNEKTING/InfoDi....ino#L204-L205

          Kommentar


            #6
            Ich hätte auch noch eine Lösung:
            byte m[3]; Knx.read(index, m); // read index 4 3 bytes for Timeformat
            m[0] &= 0x1F; // Tag rauslöschen..
            snprintf(buffer, 20, "Zeit: %2d:%2d:%2d", m[0], m[1], m[2]);

            in buffer steht das Ergebnis.

            Gruß

            Kommentar

            Lädt...
            X