HomeMatic Wired - HMW-LAN-Gateway

Begonnen von Dirk, 02 September 2013, 21:38:44

Vorheriges Thema - Nächstes Thema

Dirk

Hallo zusammen.

dieser Thread sollte die Fortsetzung aus diesem Homematic Wired-Thread werden.
Hier sollten die Punkte zur Integration des HomeMatic Wired - HMW-LAN-Gateway fortgeführt werden.

Gruß
Dirk

Dirk

Hallo crazystone,

ich bereite auch grade die Anbindung von 10_HM485.pm an dein 00_HM585_LAN.pm vor.

Dazu bräuchte ich von dir noch ein paar Informationen:

H11,01,eQ3-HMW-LGW,1.0.4,KEQ0360763Sendet das HMW-LGW wenn man es Anspricht, quasi als Begrüßung?
Kannst du mir mal die Infos aus dem Beginn der Telnetsession schicken?

Kommt eine Antwort auf ein "K"?

Gruß
Dirk

crazystone

Hallo Dirk,

also dann machen wir mal hier weiter, wäre schön, wenn Martin alle Beiträge hierhin umhängt.

Voraussetzung ist eine per Netfinder abgeschaltete LAN-seitige AES-Verschlüsselung. Mein HMW-LGW schickt nur ein


H11,01,eQ3-HMW-LGW,1.0.4,KEQ0360763
S12


Die "11" hinter dem 'H' ist dabei die Sequenznummer, die dann mit dem S hochgezählt wird und beim ersten Befehl denselben Wert wie nach dem 'S' haben muss. Das geht aus mgernoths pcap hervor.

Die "01" steht für Status 'ok'.

Das "eQ3-HMW-LGW" ist offensichtlich der Name.

Das "1.0.4" ist die Version im Auslieferungszustand. Ich weiß inzwischen, dass mit der CCU2 eine 1.0.5 mitgeliefert wird. Die habe ich mittlerweile auch per Netfinder upgegradet. Jetzt meldet es die "1.0.5".

Danach kommt offensichtlich das Serial. In meinem Code habe ich das gleich als hmPairSerial Attribut übernommen, genau auch wie die restliche Information.

In meinem Code von HM485_LAN, habe ich danach analog zum pcap von mgernoth einen Transparenzbefehl gesendet:


>12 ,0000


Der wird auch bei mgernoth nicht acknowledged.

Danach wird in meinem Modul das KeepAlive geschrieben, identisch zu HMLAN. martinp876 gebührt hier die Ehre des Protokollverstehers:


HMLAN_SimpleWrite($hash,sprintf('%c%c%c%s',0xfd,length($msg)+1,$hash->{msgNo}++,$msg));


also "fd <length> <msgNo> <msg>" danach wird dann noch die Checksumme automatisch ergänzt. Wenn ich dann als KeepAlive ein "K" sende, sieht das Ergebnis im sniff identisch aus zu der Kommunikation aus dem pcap von mgernoth zwischen CCU2 und HMW-LGW.

Leider bekomme ich bei mir keine Antwort 0x61 0x00 (="a.") wie im pcap von mgernoth. Ehrlich gesagt, kommt bei mir aus dem HMW-LGW gar nichts mehr zu diesem Zeitpunkt. Der TCP Port wird aber nicht geschlossen. Auf TCP Ebene sieht man, dass die Meldungen bestätigt werden. Es kommen aber keine Meldungen mehr mit tcp.flags.push == 1 vom HMW-LGW.

Hier nochmal letztes pcap und das Modul HM485_LAN.pm

Viele Grüße
Thorsten

Dirk

ZitatDie "01" steht für Status 'ok'.
Hast du noch einen anderen Status gesehen?

ZitatDas "eQ3-HMW-LGW" ist offensichtlich der Name.
Das ist der Interface-Name. der HMLAN heist hier "HHM-LAN-IF"

ZitatDanach kommt offensichtlich das Serial. In meinem Code habe ich das gleich als hmPairSerial Attribut übernommen, genau auch wie die restliche Information.
Das ist "nur" die Text-Seriennummer.
Die wird für das Pairing nicht verwendet. Die HMW-Geräte werden nur mit der 8-stellingen HEX Seriennummer mit einander gepeert. Die Zentrale (CCU) hat die 00000001 als Seriennummer ich Vermute das HMW-LGW hat keine eigene HW-Seriennummer, oder wir sehen die hier noch nicht. Ich denke das wird nur die Software setzen. Meinem Kenntnisstand zufolge können die "Zentralen" die ersten 255 Seriennummern verwenden. Also 00000001 - 0000000FF

Da man eine Installation von einer CCU1 zu einer CCU2 wohl ohne Probleme umziehen kann, wird das HMW-LGW wohl auch mit 00000001 als HW-Seriennummer Nachrichten versenden und beantworten.

Gruß
Dirk

crazystone

Kleinen Fehler habe ich gerade noch gesehen und behoben (neues letztes pcap anbei). In der Transparenzmeldung hatte ich noch ein überflüssiges Leerzeichen kodiert. Trotzdem keine ACK Rückmeldung.

Danke Dirk für Deine Rückmeldung. Ich bin momentan immer noch am Ende meines Lateins. Ich werde mal versuchen irgendwelche Kommandos zu senden, einfach um irgendeine Reaktion zu sehen. Vorschläge?

Viele Grüße
Thorsten

crazystone

Achso und noch zum Status: ich habe noch keinen anderen Status gesehen, die Information ist aber deckungsgleich (bis auf die IP-Adressen und Gateway-Info) wie das was Netfinder über den UPD Service Port 43439 liefert. Und da wird unter "Erreichbarkeit" "Ok" angezeigt.

Gruß

mgernoth

Hi,

Zitat von: crazystone schrieb am Mo, 02 September 2013 22:45Kleinen Fehler habe ich gerade noch gesehen und behoben (neues letztes pcap anbei). In der Transparenzmeldung hatte ich noch ein überflüssiges Leerzeichen kodiert. Trotzdem keine ACK Rückmeldung.

Ja, das gehörte da nicht hin. Dir fehlt noch das CRNL (0x0d 0x0a -> \r\n) nach dem Transparenzbefehl, ich schätze, dass das Gateway noch auf das Ende des Transparenzbefehls wartet.

Gruß
  Michael

crazystone

Hi Michael,

danke für den Hinweis. Zu dem 0x0d 0x0a wollte ich auch gerade Dirk fragen, ob er eine CRC16 Perl Funktion hat. Man braucht ja die Checksumme am Ende jedes RS-485 Busbefehls. Auf die Schnelle habe ich das nicht im 10_HM485.pm gefunden?!

Das CRNL hatte ich ehrlich gesagt rausgenommen, weil ich es im alten pcap nicht gesehen hatte. martinp876 hatte das ja zerlegt. Wo siehst Du das im pcap?

Viele Grüße
Thorsten

Dirk

ZitatZu dem 0x0d 0x0a wollte ich auch gerade Dirk fragen, ob er eine CRC16 Perl Funktion hat.
Ja, schau mal in das Modul was ich dir geschickt habe.

Ich vermute aber das die CRC-Berechnung das HMW-GW selber macht. Daher denke ich nicht, dass man die hier mitsenden muss.
Ich denke die CRC geht nur über den Bus. Zumindestens ist das bei allen Implementationen so, die ich bisher gesehen habe.

Gruß
Dirk

crazystone

HEUREKA!!!

Es redet mit mir! Die Checksumme (oder bzw. das 0x0d 0x0a) am Ende jedes KeepAlive haben gefehlt. Das wars! Anbei das aktuelle pcap. Das "/r/n" muss ich tatsächlich weglassen.

Es geht weiter! Sorry, wenn ich hier etwas länger brauche und so manchen Nachtritt...

mgernoth

Hi,

Glückwunsch :-)

0x0d 0x0a ist einfach ein Zeilenumbruch (Enter), keine Checksumme.

Gruß
  Michael

Dirk

Cool,

Dann schau doch mal ob ein Telnet die ein Paar Messages auswirft wenn auf dem Bus was los ist.

crazystone

Jetzt bräuchte ich mal wieder einen Tipp von martinp876: das HMLAN_Parse wird leider nicht mit jedem Acknowledge aufgerufen, warum? Ist das, was das HMW-LGW da sendet aus irgendeiner Syntax Sicht unvollständig?

Danke!
Thorsten

crazystone

Mir scheint das HMLAN Modul wartet in der HMLAN_ReadAnswer Funktion darauf, dass das Gerät eine Meldung sendet, die mit "\r\n" endet. Das ist leider nicht der Fall beim HMW-LGW (siehe pcap).

Morgen geht's weiter. Gute Nacht!
Thorsten

crazystone

Nochmals zur Zusammenfassung. Das HMW-LGW sendet zuverlässig Antworten auf das KeepAlive, wenn man die Kommandos im Transparenzmode mit "\r\n" abscließt. Es schickt aber selbst kein "\r\n". Anbei nochmals ein aktuelles pcap, mit der Kommunikation, gefiltert auf IP und tcp.flags-push==1.

Aus eigener Dummheit gelernt habe ich jetzt auch das "\r\n" an das Transparenzkommando gehängt. Und siehe da, ich sehe RS-485 Busverkehr (siehe pcap). Ich habe einen Jalousieaktor HMW-LC-Bl1-DR, den habe ich ein paar mal hoch und runter gedrückt. Die Messages sind enthalten, zuordnen kann ich sie leider nicht. Aber Dirk, vielleicht kannst Du ja was damit anfangen (P.S.: wenn du noch wired Jalousieaktoren brauchst, ich habe voraussichtlich zwei übrig, denn ich werde stattdessen ein IO Modul brauchen).

Ich muss mich jetzt dringend an das Parse machen. Jede Hilfe oder Empfehlung ist dabei willkommen. Problem ist, dass der HMW-LGW nicht wirklich ein Ende-Zeichen sendet, so dass die Lesefunktion kein Abbruchkriterium hat, bevor Parse aufgerufen wird.

Naja, ich versuch mal weiter.
VG
Thorsten