Ankündigung

Einklappen
Keine Ankündigung bisher.

Welches Format kommt von knxd?

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

    Welches Format kommt von knxd?

    Hi!

    Ich beschäftige mich gerade ein bisserl mit node-eibd und frage mich welches Datenformat eigentlich von knxd über den Unix-Socket geschickt wird.

    Bei einem einfachen DTP1 Ein Befehl sehen die Logs bei mir so aus:

    Code:
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 0 [14:B.ip/ip               62106.393] Recv(017): 06 10 05 30 00 11 29 00 BC D0 10 1F 08 2D 01 00 81
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 8 [13:B.ip/Conn             62106.393] found addr 1.0.31
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 6 [34:systemd_/ConnS        62106.394] sending, send_more clear
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 7 [32:systemd_/CConn        62106.394] Recv(002): 00 81
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 0 [32:systemd_/CConn        62106.394] Send(008): 00 27 10 1F 08 2D 00 81
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 6 [34:systemd_/ConnS        62106.394] sendNext called, send_more set
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 6 [ 1:main                  62106.394] sending set
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 6 [19:systemd_/ConnS        62106.394] sending, send_more clear
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 7 [16:systemd_/CConn        62106.394] Recv(002): 00 81
    Jul 30 08:11:53 raspberrypi knxd[25590]: Layer 0 [16:systemd_/CConn        62106.394] Send(008): 00 27 10 1F 08 2D 00 81
    Die empfangenen bzw gesendeten Daten:
    Code:
    (1) 06 10 05 30 00 11 29 00 BC D0 10 1F 08 2D 01 00 81
    (2)                                           00 81
    (3)                         00 27 10 1F 08 2D 00 81
    (4)           <Buffer 00 08 00 27 10 1f 08 2d 00 81>
    Das erste ist wohl CEMI - das scheint vom IP-Router am knxd empfangen worden zu sein.
    Was ist das einzelne 0x0081 ?
    Das 3. wird über den Socket zum node-eibd geschickt und von dem in Form eines Buffers gespeichert (4).

    Was passiert mt dem 01 aus dem CEMI (data length)? Woher kommt das 0x0008 am Anfang meines Buffers? Ich steh da ein bisserl am Schlauch.
    Kann mir jemand sagen wo ich die Beschreibung des Formats finde das ich hier empfange?

    #2
    Das "00 81" sind die Layer-7-Daten (deshalb steht da auch "Layer 7"), d.h. letztlich die tatsächlichen Daten im CEMI-Paket. Kannst du für deine Zwecke ignorieren.

    So. Zu deiner eigenlichen Frage. Die 0008 am Anfang sind die Länge der darauffolgenden Daten, weil Unixpipes und TCP von Haus aus keine Paketierung kennen.
    Die nächsten beiden Bytes sind der Typ, siehe src/include/eibtypes.h
    Danach kommt die Zieladresse, dann die CEMI-PDU.
    Der Code im Server, der das managt, ist in src/libserver/client.cpp
    Der knxd kommt mit ein paar Makros, die für diverse Programmiersprachen Code generieren, der das Ganze verarbeitet. Javascript ist nicht dabei, aber ggf. kannst du mit einem der anderen (src/client/…) was anfangen.

    Ja, das ist so Unfug bzw. historischer Code. In einer idealen Welt hätte ich Zeit, dem knxd ein vernünftiges und vor Allem dokumentiertes Protokoll auf msgbuf-Basis o.Ä. beizubringen …
    DistKV, Home Assistant, 1wire, KNX, Python, Asterisk, SMD-Lötkolben

    Kommentar


      #3
      Vielen Dank, jetzt ist mir so einiges klar.
      Ich muss auch zugeben, dass ich in den knxd-Sourcen etwas verloren bin. Gut zu wissen, wo ich hier noch mal nachlesen kann wenn mir was unklar ist.

      Bin über homebridge-knx zu node-eibd gekommen - Javascript war nicht meine eigene Wahl.

      Es muss schon einiges an Zeit beanspruchen sich um knxd zu kümmern - danke auch dafür!

      Kommentar

      Lädt...
      X