HomeMatic Wired - HMW-LAN-Gateway

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

Vorheriges Thema - Nächstes Thema

Dirk

Hi Thorsten,

Könntest du die Messages auch mal in der Telnet mitschneiden.
Das lesen der der pcap-Dateien per Wireshark finde ich irgendwie antrengend, und ich habe her ausser der "Welcome Message" nix weiter gefunden.

ZitatIch muss mich jetzt dringend an das Parse machen.
Das musst du nicht mal. Das HM485_LAN-Modul muss nur mit dem Gateway sprechen und die Nachrichten an HM485 weiterreichen. Das Verarbeiten wird dann darin passieren. Es reicht hier aus, wenn du sinnvolle RAW-Nachrichten bekommst und diese auch über das Gateway versenden kannst, so dass das Device hier auch was macht.

Zitat(P.S.: wenn du noch wired Jalousieaktoren brauchst, ich habe voraussichtlich zwei übrig, denn ich werde stattdessen ein IO Modul brauchen).
Danke für das Angebot. Ich habe hier aber auch einen Jalousieaktor stehen.

Gruß
Dirk

Tomili

Hallo zusammen,

vielleicht kann mir jemand helfen - wäre sehr dankbar!

Ich habe in jedes Zimmer 2 Cat Kabel als Signalkabel gelegt.
Ausserdem ist jedes Gerät, welches ich schalten will, direkt
im Schaltkasten aufgelegt.

Geräte sind derzeit elektrische Rollläden, Lampen und Steckdosen.
Später evtl. noch Heizungssteuererung.
Es soll die Fritz!Box zum Einsatz kommen.

Könnte mir jemand nun eine "Einkaufsliste" mailen, was ich alles
bestellen soll / muss? Wäre super, denn ich blicke nicht mehr
durch, welche Hardware nun sinnig ist und welche Stromversorgung,
Abschluss etc. etc.

Wie auch immer: danke!

Gruss,
Tomili

Dirk

Hallo Tomili,

Für Lampen, sofern die zusammen nicht mehr als 16A verbrauchen: HMW-IO-12-Sw7-DR
Für Steckdosen empfiehlt sich ein HMW-LC-Sw2-DR. Aber auch hier die Max. Anschlußleistung beachten.
Für Rolläden kann man ein HMW-LC-Bl1-DR verwenden.

Bei der Heizung muss man schauen was für ein Heizungstyp das ist. Fussbodenheizung oder "normal".
Ggf. muss man hier auf die Homematic-Funk Lösung zurück greifen. Bei einer Fußbodenheizung kann man zumindest die Ventile mit dem oben genannten HMW-IO-12-Sw7-DR schalten.

Als Schnittstelle zu Fritzbox funktioniert z.B. so was:
http://www.reichelt.de/USB-Konverter/DIGITUS-DA-70157/3//index.html?ARTICLE=122187
oder Link
oder später auch das Wired RS485 LAN Gateway. Hier ist die Integration aber noch in Arbeit.

Als Hutschinennetzteil geht z.B. sowas hier.
Evtl. Noch ein Überspannungsschutz mit integrierten Busabschluss

Gruß
Dirk

Dirk

Hi Thorsten,

Kannst dm mal folgendes machen:

- FHEM mit deinem Modul starten (wegen der Initialisierungssequenz für das HMW-LAN-GW)
- FHEM wieder beenden
- Bissl Verkehr auf dem Bus erzeugen: mit den Eingänge von HMW-Geräten spielen.
- in der Konsole folgendes eingeben:
echo  K | nc <IP-DEINES-HMW-LAN-GW> 1000
- die Ausgabe hier posten :)

Gruß
Dirk

Update: ein Punkt in der Liste vergessen

crazystone

Hallo Dirk,

du stellst mich da vor physische Herausforderungen. Wenn ich das Gerät aus FHEM lösche und damit keine KeepAlive gesendet werden, dann wird mE nach 30s der TCP Port geschlossen. In dieser Zeit in den Keller laufen, den Busverkehr erzeugen, wieder hochlaufen und den screenshot sichern, überfordert mich etwas. ZUdem ist mir nicht klar, wie du aus der 'telnet' Konsolenausgabe die Hex-Sequenz sehen kannst?

Lieber kopiere ich Dir nochmals aus obigem pcap die Daten, die nicht dem KeepAlive zuzuordnen sind heraus. Es waren 4 zusätzliche Messages, alle durch wildes Herumdrücken am Jalousie-Aktor erzeugt:


fd:0f:04:65:ff:ff:ff:ff:fe:00:00:9d:bd:69:02:15:10
fd:0f:05:65:ff:ff:ff:ff:f8:00:00:9d:bd:69:02:12:20
fd:0f:06:65:ff:ff:ff:ff:fa:00:00:9d:bd:69:02:00:20
fd:0f:08:65:ff:ff:ff:ff:fe:00:00:9d:bd:69:02:00:00


Hoffe das hilft!
Viele Grüße
Thorsten

Dirk

Hi Thorsten,

Wenn das HMW-LAN-GW wie das HMLAN arbeitet, dann sollte es den Busverkehr buffern wenn keine Gegenstelle die Nachrichten "abholt".
Also sollte es klappen, dass du FHEM kurz startest, wieder stoppst, gemütlich in den Keller gehst, bissl "rumdrückst" und nach dem wieder nach oben kommen den obrigen Befehl ausführst.

Währ nur interessant zu wissen was wirklich als "Text" ankommt.

Gruß
Dirk

crazystone

So ich habe es jetzt! Dank martinp876 habe ich jetzt doch deutlich mehr vom HMLAN verstanden und nochmals einiges umgeschmissen und deutlich vereinfacht. Ich nutze bisher nur die Funktionen


sub HMLAN_DoInit($);
sub HMLAN_Read($);
sub HMLAN_485Write($$);
sub HMLAN_SimpleWrite(@);
sub HMLAN_Parse($$);
sub HMLAN_KeepAlive($);
sub HMLAN_KeepAliveCheck($);


Die Read-Funktion hat fast keinerlei Prüfung mehr, fängt nur noch incomplete messages ab. Die Funktion Parse unterscheidet zwischen der Initialisierungssequenz "H<xx>..S<xx+1>\r\n" und den transparenten Hex-Messages mit flag "fd" (oder "fe"). Das KeepAlive wird richtig initialisiert und gesendet, das entsprechende ACK abgefangen und richtig interpretiert.

Sollte eine andere RS-485 Busmessage daherkommen, wird diese als Hex-String ausgegeben. Kurzer Auszug mit loglevel 1:


2013.09.04 21:26:04 3: Opening HM485LAN device 192.168.178.37:1000
2013.09.04 21:26:04 3: HM485LAN device opened
2013.09.04 21:26:04 1: HM485_Parse: SeqNo: 3d   Type:eQ3-HMW-LGW,  Serial:KEQ0360763   Version:1.0.5
2013.09.04 21:26:04 1: HM485_Parse: SeqNo: 3e   Send: >3e,0000
2013.09.04 21:26:29 1: HM485_KeepAlive: msgNo: 0
2013.09.04 21:26:29 1: HM485_Parse: HM485LAN ACK response to KeepAlive msgNo: 0
2013.09.04 21:26:54 1: HM485_KeepAlive: msgNo: 1
2013.09.04 21:26:54 1: HM485_Parse: HM485LAN ACK response to KeepAlive msgNo: 1
2013.09.04 21:27:19 1: HM485_KeepAlive: msgNo: 2
2013.09.04 21:27:19 1: HM485_Parse: HM485LAN ACK response to KeepAlive msgNo: 2
2013.09.04 21:27:35 1: HM485_Parse: HM485LAN unknown msgNo: >>fd0f0965fffffffff800009dbd69020810<<
2013.09.04 21:27:44 1: HM485_KeepAlive: msgNo: 3
2013.09.04 21:27:44 1: HM485_Parse: HM485LAN ACK response to KeepAlive msgNo: 3
2013.09.04 21:27:58 1: HM485_Parse: HM485LAN unknown msgNo: >>fd0f0a65fffffffffa00009dbd69020400<<
2013.09.04 21:28:09 1: HM485_KeepAlive: msgNo: 4
2013.09.04 21:28:09 1: HM485_Parse: HM485LAN ACK response to KeepAlive msgNo: 4
2013.09.04 21:28:34 1: HM485_KeepAlive: msgNo: 5
2013.09.04 21:28:34 1: HM485_Parse: HM485LAN ACK response to KeepAlive msgNo: 5


Alles getestet und funktioniert mit meinem LGW ganz gut und stabil. Zerhackte Messages habe ich noch nicht wirklich testen können. Re-Synch dürfte kaum funktionieren. Beim Abklemmen der LAN-Verbindung schließt KeepAliveCheck die Verbindung. Ein reappear funkioniert momentan allerdings noch nicht.

@Dirk, wie geht es jetzt weiter? Welche Funktion muss ich implementieren, damit Du vom HM485 Device das HM485_LAN mit Raw Messages aufrufen kannst? Wo und wie muss ich die empfangenen Busmessages ablegen, damit ein entsprechendes Device es sieht?

Viele Grüße
Thorsten

Dirk

Zitatwie geht es jetzt weiter?
Wenn das was du vorhin geschickt hast, wirklich die reine Textnachricht ist, dann sieht die Zuordnung so aus:


Startzeichen
|  ???
|  |  Vielleicht irgendein Counter
|  |  |  e ???
|  |  |  |      Zieladresse
|  |  |  |       |      Kontrollzeichen
|  |  |  |       |      |       Absenderadresse
|  |  |  |       |      |       |          Nutzdaten
|  |  |  |       |      |       |          |
-- -- -- -- ----------- -- ----------- -----------
fd:0f:04:65:ff:ff:ff:ff:fe:00:00:9d:bd:69:02:15:10


Keine Ahnung warum die einzelnen Bestandteile der Nachricht von der Reihenfolge nach von den Nachrichten wie sie über den Bus gehen abweichen.
Als Zieladresse ist hier FFFFFFFF angegeben. Ich vermute deine Rolladenaktoren sin noch nicht gepeert. Dann werden alle Informationen an die Broadcastadresse gesendet Diese ist FFFFFFFF.
Das erte Byte 69 aus den Daten ist der "Befehl". 69 ist ein I. (Info).

Ich baue Gerade die Schnittstelle zu HM485_SERIAL neu. Und da hätte ich gerne die selbe Schnittstelle verpasst.
Daher müssen wir noch ein Paar Informationen herausbekommen.
Vor allem was für "Befehle" an das GW gesendet werden müssen

Deine Aufgabe könnte es jetzt erstmal sein, das Modul soweit zu bauen, dass das HM485-Modul mit diesem "sprechen" kann.
Das einfachste sollte erstmal sein, das die Plaintext Nachrichten im Logfile von FHEM landen.

Gruß
Dirk

crazystone

Ok, Dirk, ich habs wirklich versucht, bin aber gescheitert (und das war auch genug Sport für heute :-).

Habe Folgendes gemacht
- define HM485LAN HMLAN 192.168.178.37:1000 in FHEM
- Abwarten der Initialisierungssequenz (geht quasi sofort)
- delete HM485LAN in FHEM, damit TCP Port 1000 freigegeben wird
- putty auf 192.168.178.37:1000 --> Initialisierungssequenz
- in den Keller gerannt und gedrückt
- beim wieder Hochkommen war das Fenster schon wieder zu, bzw. beim zweiten Mal ("Close window on exit: Never") die TCP-Verbindung beendet ohne dass ich noch zusätzlichen Inhalt sehen konnte, das heißt auch keine Befehlseingabe mehr möglich

Aber was erhoffst Du Dir davon? Die Darstellung der Hex-Sequenz oben als ASCII Zeichen? Das kannst Du doch nicht mehr interpretieren?

Ich muss wohl noch viel lernen...

crazystone

Ok, noch kurze Interpretation aus dem bisher Gelernten. Die Nachrichten gehen so als Byte Messages rein, weswegen eine Darstellung als String immer schwierig ist. WireShark zeigt also genau auch diese Byte-Sequenz. Zu den Inhalten:


Startzeichen FD (hab noch kein FE gesehen)
|  Länge der Nachricht inkl. MessageCounter
|  |  MessageCounter, wird mit jedem KeepAlive oder anderer Message hochgezählt, rollover bei ff --> 00, startet nach Transparenzbefehl mit 00
|  |  |  e ???
|  |  |  |      Zieladresse
|  |  |  |       |      Kontrollzeichen
|  |  |  |       |      |       Absenderadresse
|  |  |  |       |      |       |          Nutzdaten, könnte das der Jalousie-Aktor-Status sein?
|  |  |  |       |      |       |          |
-- -- -- -- ----------- -- ----------- -----------
fd:0f:04:65:ff:ff:ff:ff:fe:00:00:9d:bd:69:02:15:10


Also Schreiben der RS-485 Bus-Messages ins fhem-Log ist quasi schon fertig. Soll ich es als Byte-Sequenz reinschreiben oder als Hex-String? Da schreiben natürlich aber auch noch andere Module rein, fängst Du das ab? Wie machen ander Module die Übergabe (z.B. CUL --> CUL_HM)?

Gruß
Thorsten
Gruß

Dirk

ZitatAber was erhoffst Du Dir davon?
Zu verstehen wie das Teil kommuniziert.
Die Kommunikation mit dem HMLAN erfolgt über Textnachrichten

Und die hätte ich gerne mal gesehen damit ich die Schnittstelle zum HM485_SERIAL genau so bauen kann.

Damit Putty nicht zu geht kannst du unter "Session" "Close Window on exit" z.B. auf "Never" stellen.

Gruß
Dirk

Dirk

ZitatLänge der Nachricht inkl. MessageCounter
Die Nachricht währ aber 16 Zeichen lang. Also sollte hier 10 stehen.
Oder wird das Startzeichen nicht mit gezählt? Hast du noch Messages von anderen Geräten? ein 12-7-IO vielleicht. Zumindest dieser Sendet ungepeer noch mehr Informationen.

Ich habe mir das das Pcap-File im Wireshark noch mal angesehen. Da habe ich deine Nachrichten auch gefunden.
Die Werden also binär gesendet. Dann werde ich meine Schnittstelle mal entsprechend anpassen.

Du könntest auch mal ein set RAW oder so einbauen. Dazu kannst du dir mal mein HM485_SERIAL ansehen.
Dann könnte man mal versuchen auch Nachrichten auf den Bus zu senden.

Das 0x65 (e) ist vermutlich das "Steuerzeichen" für die Kommunikation Zwischen GW und Zentrale
e könnte hier für "Empfangen" stehen. Beim HMLAN ist das ein E.
Befehle würde ich dann also im selben Messageformat schicken. an der Stalle vom e dann ein s (0x73)

Gruß
Dirk

crazystone

Hatte ich beim zweiten Versuch gemacht, aber trotzdem nicht geschafft. Der Socket geht ohne KeepAlive einfach zu.

Aber die Byte-Messages sehen so aus wie oben, ich kann die jetzt entweder als Text (nicht entzifferbare Zeichenfolge) oder als Hex-String ins Log schreiben, kein Problem.

Kannst Du bitte noch ein wenig die geplante weitere Vorgehensweise erläutern? Soll das HM485_LAN noch ein discovery auslösen, damit du mit HM485 autocreate dann die sich meldenden Geräte anlegen kannst? Wie würde eine Raw Message dafür aussehen?

Welche Funktionen werden dann benötigt für die bidirektionale raw Kommunikation?

Gruß
Thorsten

Dirk

ZitatDer Socket geht ohne KeepAlive einfach zu.
Ja, das ist klar.
Ich hatte gehofft die "gespeicherten" Nachrichten zu sehen.

Zitatich kann die jetzt entweder als Text (nicht entzifferbare Zeichenfolge) oder als Hex-String ins Log schreiben, kein Problem.
Für das Log ist Hex sicher besser zu lesen.

ZitatKannst Du bitte noch ein wenig die geplante weitere Vorgehensweise erläutern?
Zuerst würde ich auf deiner Seite eine einfache RAW-Kommunikation bauen.
Z.B. ein Set RAW 0a0b0c0d... sendet die entsprechenden binärdaten an das GW. Anders herum wird das erstmal als Hexwerte ins Logfile geschrieben.

ZitatSoll das HM485_LAN noch ein discovery auslösen
Ich vermute das GW macht den Discovery selber. Das das ganze recht Zeitintensiv ist. Ich vermute muss ein spezieller Befehl ans GW geschickt werden. Das GW wird dann die gefundenen Informationen zurück senden.

Der erste Schritt sollte aber sein erst einmal RAW Nachrichten senden zu können. Damit kann man dann weiter experimentieren.

Wenn das klappt, kommt das Modul HM485 ins Spiel. Das wird dann die Gerätespezifischen Funktionen abhandeln. Incl. autocreate usw.
HM485_LAN und HM485_SERIAL sind also nur die Kommunikationsschnittstelle zur Hardware.

Gruß
Dirk

crazystone

Das Startzeichen wurde auch beim KeepAlive und anderen Kommandos im alten pcap von mgernoth nicht mitgezählt.

Andere Geräte habe ich leider (noch) nicht.

Bei den geloggten Messages hätte ich jetzt eher die transparenten und unveränderten Messages vom Jalousie-Aktor gesehen. Erklären kann ich sie aber natürlich nicht.

Im alten pcap von mgernoth wird "S" zum Senden verwendet (0x53).

Gruß
Thorsten