HomeMatic Wired - HMW-LAN-Gateway

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

Vorheriges Thema - Nächstes Thema

Dirk

ZitatIm alten pcap von mgernoth wird "S" zum Senden verwendet (0x53).
Ja und E für Empfangene Nachrichten. Da es hier aber noch ein uneklärtes kleines "e" gibt, würde ich anstelle des e ein kleines s für zu sendende Nachrichten vermuten.

Daher Baue mal das set RAW ein, damit man Nachrichten senden kann.

crazystone

Hallo Dirk,

also ich habe mit meiner "set raw" Funktion den Befehl "01" (also binär und voll kodiert fd:02:xx:01:0d:0a mit xx aktueller msgNo) an den HMW-LGW gesendet. Der meldet sich darauf hin mit binär "61 02" (also fd:03:xx:61:02). Das scheint so eine Art Acknowledge (oder vielleicht Reject?) auf den Befehl zu sein. Eine discovery (also Meldung der Seriennummer oder Adresse) kommt aber auch nach längerem Warten nicht.

Auf die 0x64 bzw. (weil ich nicht sicher war) auch dezimal 64 = 0x40 kommt auch jeweils nur die "0x61 0x02" zurück.

Alle Versuche mit FE als Startbyte haben keinerlei Antwort geliefert.

Die direkten Steuerbefehle fd:0e:FF:00:xx:xx:xx:xx:98:00:00:00:00:78:0C:01 konnte ich nicht ausprobieren, weil ich die Adresse meines Jalousieaktors ja noch nicht kenne.

Viele Grüße


Dirk

Zitatweil ich die Adresse meines Jalousieaktors ja noch nicht kenne.
Drücke mal die Tasten am Aktor bzw. mal einen Taster an einem der Eingänge und schick mir die Nachricht vom Bus. Darin sollte die Adresse vom Aktor sein.

Gruß
Dirk

crazystone

Schau mal weiter oben im Thread, da hatte ich ja die Messages schon gepostet. Ist 00:00:9d:bd die Adresse, oder? Der Befehl war an einen IO, ich habe aber nur den Jalousieaktor. Hast Du da auch mal noch einen Befehl zum testen?

Gruß
Thorsten

crazystone

Also hier noch etwas für die Befehlsbibliothek:

Wenn ich am Jalousie-Aktor (HMW-LC-Bl1-DR) den Knopf "runter" drücke, erscheint erst die erste, zeitlich verzögert dann die zweite Meldung auf dem Bus, gefühlt eine "ich fahre runter" --> "ich bin unten" Abfolge. Während des runterfahrens blinkt dabei die LED am Aktor


2013.09.14 13:28:00 1: HM485_Parse: >>fd0f1465fffffffffe00009dbd69020020<<
2013.09.14 13:28:06 1: HM485_Parse: >>fd0f1565fffffffff800009dbd69020000<<


Beim Knopf-Kommando "nach oben" erscheint auf dem Bus:


2013.09.14 13:30:37 1: HM485_Parse: >>fd0f1665fffffffffa00009dbd69020810<<
2013.09.14 13:31:32 1: HM485_Parse: >>fd0f1765fffffffffc7c00009dbd6902c800<<


Mit der letzten Meldung hab ich so meine Probleme, mir scheint es desöfteren vorzukommen, dass Byte-Längen nicht stimmen. Kann das mit einer Umkodierung des Byte-Protokolls zusammenhängen? Da war doch irgendetwas "wenn ein FD im Message-Inhalt steht, dann wird das kodiert als ...". Denn mir scheint ehrlich gesagt das "...fc7c..." etwas deplaziert. Könnte das ein "...fd..." gewesen sein?

Bei einer Versuchswiederholung sah das Ganze dann so aus:


2013.09.14 13:44:37 1: HM485_Parse: HM485LAN unknown msgNo: >>fd0f1865fffffffffe00009dbd6902c810<<
2013.09.14 13:44:43 1: HM485_Parse: HM485LAN unknown msgNo: >>fd0f1965fffffffff800009dbd6902c800<<


Gruß
Thorsten

crazystone

Gefunden:

ZitatStartzeichen
Das Startzeichen ist immer 0xFD. Es ist ein Steuerzeichen und darf in den restlichen Daten der Nachricht nicht mehr vorkommen. Neben 0xFD gibt  es noch 0xFE als weiteres Steuerzeichen. Dieses spielt bei der normalen Kommunikation keine Rolle, darf aber ebenfalls nicht im Datenstrom enthalten sein. Falls diese Steuerzeichen in den Daten enthalten sind, wird ein weiteres Steuerzeichen (0xFC) eingefügt, das vor ein Steuerzeichen zu setzen ist und selbstverständlich ebenfalls nicht im Datenstrom vorkommen darf. Dieses Steuerzeichen wird als Escape-Zeichen bezeichnet.
Muss jetzt der Sender innerhalb der Daten eines dieser drei Steuerzeichen übertragen, wird das Steuerzeichen durch zwei Bytes ersetzt, und zwar durch das Escape-Zeichen, gefolgt von dem zu sendenden Steuerzeichen, bei dem das höchstwertige Bit gelöscht ist.
Beispiel:
Es sollen die Datenbytes 0x05 0xFD und 0xFA übertragen werden. Das erste Byte wird einfach übertragen, das zweite Byte entspricht einem Steuerzeichen und wird entsprechend ersetzt und das dritte Byte wird wieder normal übertragen. Die Daten: 0x05 0xFD 0xFA werden also gesendet als 0x05 0xFC 0x7D 0xFA

Das heißt, dass das "...fc7c..." wohl ein "...fc..." hätte sein sollen. Saublöd beim dekodieren. Und vor allem hebelt es die Längenüberprüfung auf unterster Ebene aus.

Dirk, Du musst sagen, ob ich solche Dinge gleich abfangen soll, also die Escape+Steuerzeichen wieder durch nur die Steuerzeichen ersetzen soll. Ich denke es macht Sinn.

Viele Grüße
Thorsten

Dirk

Das sieht schon mal gut aus:

sz le c  e  Broadcast__ cb Sender_____ Bus-Daten__
fd 0f 14 65 ff ff ff ff fe 00 00 9d bd 69 02 00 20


sz: Startzeichen
le: ist wohl die Länge der Nachricht (alles ausser die ersten beiden bytes
c: Ist wohl der Message-Counte.
e: ist wohl der "Identifyer" für Empfangen (beim senden steht hier s)
cb: Kontrollzeichen

Aber das hatten wir ja oben schon alles.

ZitatDas heißt, dass das "...fc7c..." wohl ein "...fc..." hätte sein sollen. Saublöd beim dekodieren.
Du musst "nur" die Nachrichten an das GW weiterleiten und vom GW an das HM485.pm dann. Um die Codieung und die Decodierug kümmert sich HM485.pm. Somit musst du auch  nix parsen.

crazystone

Mann Dirk! Riesen Schritte jeden Tag! Dieser Post dient mehr als Erinnerungsstütze:

Also mit CCU2 Image im QEMU gestartet, int der QEMU console (strg+alt+2) webserver und telnet port nach aussen gelegt:


hostfwd_add tcp::8080-:80
hostfwd_add tcp::22-:22


Dann in der telnet console (user: root, pw: homematic) das image schreibbar gemounted und den Kommunikations-Daemon manuell gestartet


mount -o remount,rw /
hs485d -l 5 -g -h 192.168.178.37 -p 1000 -s KEQ0123456 -c -i 0 &


dann kann man zwischen dem eigenen Rechner als CCU und dem HMW-LGW sniffen. Mein allererstes sofort ein Erfolg.


LGW>>48:37:39:2c:30:31:2c:65:51:33:2d:48:4d:57:2d:4c:47:57:2c:31:2e:30:2e:35:2c:4b:45:51:30:33:36:30:37:36:33:0d:0a:53:37:61:0d:0a
CCU>>3e:37:61:2c:30:30:30:30:0d:0a
CCU>>fd:02:01:4b
LGW>>fd:03:01:61:00
CCU>>fd:02:02:4b
LGW>>fd:03:02:61:00


Wie schon zuvor richtig analysiert, empfängt auch die CCU Emulation die Begrüßungsnachricht und die CCU schickt den Transparenzbefehl. Der Transparenzbefehl wird noch mit "\r\n" beendet.

Danach kommen KeepAlive, FD.<lenght>.<seqNo>."K", die acknowledged werden mit FD.<length>.<seqNo>."a".<0x00> Alles ohne "\r\n". Das ist merkwürdig, weil das hat manuell nicht funktioniert, muss ich in meinem Modul nochmals testen.

Löst man dann über das WebGui ein "systemsteuerung" --> "Geräte anlernen" --> "Geräte suchen aus" passiert folgendes:


1. CCU>>fd:0d:04:53:00:ff:ff:ff:ff:98:00:00:00:01:7a
2. CCU>>fd:0d:05:53:00:ff:ff:ff:ff:9c:00:00:00:01:7a
3. CCU>>fd:04:06:44:00:ff
4. LGW>>fd:06:1a:64:00:00:9d:bd
5. LGW>>fd:05:1b:63:00:00:01
6. CCU>>fd:0d:07:53:00:ff:ff:ff:ff:9e:00:00:00:01:5a
7. CCU>>fd:0d:08:53:00:ff:ff:ff:ff:98:00:00:00:01:5a
8. CCU>>fd:0d:09:53:c8:00:00:9d:bd:98:00:00:00:01:68
9. LGW>>fd:05:09:72:9a:15:00
10.CCU>>fd:0d:0a:53:c8:00:00:9d:bd:1c:00:00:00:01:76
11.LGW>>fd:05:0a:72:5c:03:06
12.CCU>>fd:0d:0b:53:c8:00:00:9d:bd:1e:00:00:00:01:6e
13.LGW>>fd:0d:0b:72:7e:4a:45:51:30:32:37:31:39:31:33
14.CCU>>fd:10:0c:53:c8:00:00:9d:bd:18:00:00:00:01:52:00:00:10
15.LGW>>fd:13:0c:72:18:ff:14:ff:ff:ff:ff:fe:ff:ff:ff:ff:ff:05:00:f4:01
16.CCU>>fd:20:0d:53:c8:00:00:9d:bd:1a:00:00:00:01:57:00:00:10:ff:14:00:00:00:01:ff:ff:ff:ff:ff:ff:05:00:f4:01
17.LGW>>fd:03:0d:72:39
18.CCU>>fd:11:0e:53:c8:00:00:9d:bd:1c:00:00:00:01:45:00:00:10:40
19.LGW>>fd:0f:0e:72:5a:65:00:00:10:03:00:00:00:00:00:00:00


Das dürfte die komplette Initialisierungssequenz für meinen Jalousie-Aktor sein. Ich erkenne auf Anhieb:

4. Rückmeldung der Adresse 00:00:9d:bd
10. gezielte Statusabfrage
12. Abfrage der Seriennummer
13. Antwort mit Seriennummer

Over to you Dirk, für den Rest!

crazystone

Hallo Dirk,

Nur nochmals als Achtungszeichen: Die Message-Länge in den übergebenen Messages entspricht nicht der Länge, wenn ein FC, FD oder FE in der Nachricht enthalten ist. Die extra Escape Zeichen werden nicht mitgezählt.

Viele Grüße
Thorsten

crazystone

Hallo Dirk,

wie Rufe ich jetzt vom HM485_LAN aus die Funktionen des HM485 auf? Ich denke Mal, dass ich da jetzt weiter machen sollte, oder? Eine entity für meinen Jalousie-Aktor anlegen und dann Bus-Nachrichten an die Entity weitergeben, oder? Wie mache ich das?

Gruß
Thorsten

Dirk

Zitatwie Rufe ich jetzt vom HM485_LAN aus die Funktionen des HM485 auf? Ich denke Mal, dass ich da jetzt weiter machen sollte, oder?
Ich denke so viel ist von dir gar nicht mehr zu tun.
Die Entity für das einzelne Device ist Aufgabe von HM485.pm da bin ich im Moment schon dran.
Ggf. kannst du eine set raw in dein Modul einbauen. Analog von der aktuellen Implementation in HM485_Serial. Dann kannst du zumindestens schon mal über FHEM schalten.

Gruß
Dirk

crazystone

Hi Dirk,

hier auf Deine Bitte hin nochmals ein NACK:


CCU>>fd:0d:8e:53:c8:00:00:9d:cd:1c:00:00:00:01:76
LGW>>fd:03:8e:61:01


Ich habe also eine Statusabfrage an Adresse "9d:cd" geschickt, die es bei mir nicht gibt. Das LGW antwortet mit 'a' aber dahinter nicht 0x00 sondern 0x01. Davor steht nur FD, Länge und Sequenznummer.

VG

Dirk

Hallo Thorsten,

danke erstmal noch für die Infos.
Ich habe in den letzten Tagen noch einiges Entwickelt.
Wie besprochen habe ich unsere beiden Module zusammengelegt.
Das Ergebnisse ist derzeit noch hier zu finden:
https://github.com/kc-GitHub/FHEM-HM485

Das Modul heißt jetzt HM485_LAN, da es sowohl mit dem HM-LAN-GW zusammenarbeiten sollte, als auch mit meinem HM485d.pl, welcher das Protokoll für "dumme" serielle Interfaces (USB/Rs232->RS485 oder auch Netzwerk->RS485 Adapter) implementiert.

Das Modul HM485 implementiert die Device-Entities im FHEM.
Discovery sollte auch beim HM-LAN-GW schon funktionieren und alle gefunden Geräte und ihre zugehörigen Channels anlegen. Die Channels, welche vom Subtype Switch sind, können auch schon geschaltet werden.

Gruß
Dirk

UweH

Moin Dirk,

kann man die Dateien auch als unregistrierter User laden? Ich bekomme nur die html-Inhalte der .pm-Dateien zu sehen, egal auf welche Weise ich den Download versuche.

Danke und Gruß
Uwe

Dirk

Ja, unten rechts, "Download Zip" :)

Gruß
Dirk