Homematic wired

Begonnen von Henne1977, 26 Januar 2013, 22:46:00

Vorheriges Thema - Nächstes Thema

crazystone

Hallo Dirk,

Ich sehe meine Arbeit nicht als Alternative zu HM485_SERIAL. Mein Ziel ist es, nur die HMW-LGW Initialisierung und Transparentschaltung zu machen, also in einer Art HM485LAN. Am Ende sollte man mit 'set HM485LANGateway FD0098AB010000' (unsinniges Beispiel!) einen RS-485 Busbefehl absetzen können.

Danach sollte sicher ein HM485_SERIAL entity pro verbundenem Device definiert werden, aber dann mit Umsetzung der Kommunikation über HM485LAN für den HMW-LGW und einem anderen Modul für deinen Adapter. Die Schnittstelle muss man sicher noch sauber klären, aber ich denke eine sinnvolle Trennung ist bei den nackten RS-485 Protokolldaten. Die HM485_SERIAL entity bekommt Befehl "switch IO 13 on" und schickt dann den richtigen RS-485 Befehl Hexadezimal an die DevIO Layer als USB, HM485LAN oder das Modul für deinen Adapter. Dort wird nur die Kommunikation offen gehalten und Nachrichten transparent durchgereicht. Ausnahme wäre eventuell der Discovery Befehl. Der sollte wohl direkt beim DevIO umgesetzt werden.

Evtl. könnte man dann zuletzt dem autocreate noch beibringen, bei erfolgreicher Initialisierung eines HM485LAN und Discovery Ausführung für alle detektierten Devices eine HM485_SERIAL entity anzulegen.

Was meinst du, hältst Du das für ein sinnvolles Konzept? Ich denke es liegt sehr nahe an dem, was heute auch für CUL und CUL_HM realisiert ist. Es ließe außerdem eine saubere Trennung und Modularisierung zu.

Viele Grüße
Thorsten

crazystone

Und wieder einen kleinen Schritt weiter:

Cool war Martins Tipp mit dem loglevel. Jetzt sehe ich auch im FHEM Log meine Vermutungen bestätigt:


2013.08.28 21:33:28 1: 192.168.178.37:1000 reappeared (HM485LAN)
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:A00000001
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:C
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:Y01,01,
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:Y02,00,
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:Y03,00,
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:Y03,00,
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:T19B10D08,04,00,00000000
2013.08.28 21:33:28 1: HM485LAN Unknown msg >H13,01,eQ3-HMW-LGW,1.0.4,KEQ0360763<
2013.08.28 21:33:28 1: HM485LAN Unknown msg >S14<
2013.08.28 21:33:53 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:54 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:55 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:56 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:57 1: 192.168.178.37:1000 disconnected, waiting to reappear


Nach Verbindungsaufbau sendet HMLAN die gesamte DoInit Funktion abgearbeitet, die wiederum HM485LAN nicht versteht. HM485LAN sendet seine Nachricht, die ich auch beim Anmelden mit telnet sehe, die aber wiederum HMLAN nicht versteht. Danach sendet HMLAN keepalive und HM485LAN mit ACK bestätigt. Die Bestätigung versteht HMLAN aber nicht.

Der nächste Schritt: ACK verstehen.

Ich werde auch den keepalivecheck Zähler abschalten. Damit sollte ich erreichen, dass die Verbindung offen bleibt und nicht ständig auf- und abgebaut wird. Vielleicht kann ich so noch ein paar Busmessages sehen.


Viele Grüße
Thorsten

crazystone

Ach ja, in der Wiederholung sieht man noch, dass sich die Sequenznummer beim HMW-LGW fortlaufend erhöht:


2013.08.28 21:32:55 1: 192.168.178.37:1000 reappeared (HM485LAN)
2013.08.28 21:32:55 1: HMLAN_Send:  HM485LAN I:A00000001
2013.08.28 21:32:55 1: HMLAN_Send:  HM485LAN I:C
2013.08.28 21:32:55 1: HMLAN_Send:  HM485LAN I:Y01,01,
2013.08.28 21:32:55 1: HMLAN_Send:  HM485LAN I:Y02,00,
2013.08.28 21:32:55 1: HMLAN_Send:  HM485LAN I:Y03,00,
2013.08.28 21:32:55 1: HMLAN_Send:  HM485LAN I:Y03,00,
2013.08.28 21:32:55 1: HMLAN_Send:  HM485LAN I:T19B10CE7,04,00,00000000
2013.08.28 21:32:55 1: HM485LAN Unknown msg >H11,01,eQ3-HMW-LGW,1.0.4,KEQ0360763<
2013.08.28 21:32:55 1: HM485LAN Unknown msg >S12<
2013.08.28 21:33:20 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:21 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:22 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:23 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:24 1: 192.168.178.37:1000 disconnected, waiting to reappear
2013.08.28 21:33:28 1: 192.168.178.37:1000 reappeared (HM485LAN)
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:A00000001
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:C
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:Y01,01,
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:Y02,00,
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:Y03,00,
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:Y03,00,
2013.08.28 21:33:28 1: HMLAN_Send:  HM485LAN I:T19B10D08,04,00,00000000
2013.08.28 21:33:28 1: HM485LAN Unknown msg >H13,01,eQ3-HMW-LGW,1.0.4,KEQ0360763<
2013.08.28 21:33:28 1: HM485LAN Unknown msg >S14<
2013.08.28 21:33:53 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:54 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:55 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:56 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 21:33:57 1: 192.168.178.37:1000 disconnected, waiting to reappear
2013.08.28 21:34:00 1: 192.168.178.37:1000 reappeared (HM485LAN)
2013.08.28 21:34:00 1: HMLAN_Send:  HM485LAN I:A00000001
2013.08.28 21:34:00 1: HMLAN_Send:  HM485LAN I:C
2013.08.28 21:34:00 1: HMLAN_Send:  HM485LAN I:Y01,01,
2013.08.28 21:34:00 1: HMLAN_Send:  HM485LAN I:Y02,00,
2013.08.28 21:34:00 1: HMLAN_Send:  HM485LAN I:Y03,00,
2013.08.28 21:34:00 1: HMLAN_Send:  HM485LAN I:Y03,00,
2013.08.28 21:34:00 1: HMLAN_Send:  HM485LAN I:T19B10D28,04,00,00000000
2013.08.28 21:34:00 1: HM485LAN Unknown msg >H15,01,eQ3-HMW-LGW,1.0.4,KEQ0360763<
2013.08.28 21:34:00 1: HM485LAN Unknown msg >S16<


Damit sollte wohl eine Initialisierung so aussehen:
    - man öffne die Verbindung und starte keepAlive Timer (der geht auch ohne Sequenznummer)
    - man warte auf die erste Meldung (ggf. später hier noch ein 'discovery')
    - man analysiere ie Sequenznummer, die Adresse, den Namen, die Version, den Serial
    - man sende mit der richtigen Sequenznummer den Transparenzbefehl 'Sxx,0000'


Viele Grüße
Thorsten

Dirk

Hi Thorsten,

ZitatIch sehe meine Arbeit nicht als Alternative zu HM485_SERIAL. Mein Ziel ist es, nur die HMW-LGW Initialisierung und Transparentschaltung zu machen, also in einer Art HM485LAN
Das sehe ich genau so. Finde ich gut.

ZitatDanach sollte sicher ein HM485_SERIAL entity pro verbundenem Device definiert werden, aber dann mit Umsetzung der Kommunikation über HM485LAN für den HMW-LGW und einem anderen Modul für deinen Adapter.
So ähnlich hatte ich so sogar schon geplant. Die bisherigen HM485 Module bestehen aus dem Device-Modul (HM485) und derzeit aus dem Modul für "dumme" Serial->RS485-Adapter (HM485_SERIAL).

ZitatDie Schnittstelle muss man sicher noch sauber klären, aber ich denke eine sinnvolle Trennung ist bei den nackten RS-485 Protokolldaten.
Ich würde hier sogar die Schnittstelle nutzen, die das HMM-LAN-GW vorgibt. Die sollte so ähnlich wie bei HMLAN aussehen. Wenn du das soweit alles raus hast, und die Schnittstelle bekannt ist, würde ich diese dann in das  HM485 Modul implementieren und HM485_SERIAL entsprechend umstellen.
Du kannst dann ja das Modul HM485_HMWLAN, oder wie es dann heißen wird, bereitstellen. Wenn du das möchtest. Dann muss ich das nicht machen :)

ZitatDie HM485_SERIAL entity bekommt Befehl "switch IO 13 on" und schickt dann den richtigen RS-485 Befehl Hexadezimal an die DevIO Layer als USB, HM485LAN oder das Modul für deinen Adapter.
So ist der Plan. Den Befehl bekommt aber HM485. HM485_SERIAL ist der DevIo Layer zu "dummen" Seriellen Devices (USB / Netzwerk / usw.) Und hier steckt dann die Protokollschicht drinn die im HMW-LAN schon in dessen Mikrocontroller steckt. Das soll am Ende vergleichbar wie HM-Funk mit HMLAN funktionieren. Die RAW-Befehle sind im Moment eine "Krücke" das man überhaut schon mal was schalten kann.

ZitatAusnahme wäre eventuell der Discovery Befehl. Der sollte wohl direkt beim DevIO umgesetzt werden.
Ja, Ich vermute das macht das HMW-LAN-GW auch bereits selber. Ein guter Einstieg sind übrigens auch die Quellcodes zum alten HS485-USB-Adapter. Die sind auch öffentlich verfügbar.

ZitatEvtl. könnte man dann zuletzt dem autocreate noch beibringen, bei erfolgreicher Initialisierung eines HM485LAN und Discovery Ausführung für alle detektierten Devices eine HM485_SERIAL entity anzulegen.
Das mache ich sogar schon. Allerdings noch in HM485_SERIAL.

ZitatWas meinst du, hältst Du das für ein sinnvolles Konzept? Ich denke es liegt sehr nahe an dem, was heute auch für CUL und CUL_HM realisiert ist. Es ließe außerdem eine saubere Trennung und Modularisierung zu.
Dann sind wir uns hier ja schon größtenteils einig :)

Ich würde aber noch vorschlagen für die HMW-LAN diskussion einen eigenen Tread zu erstellen. Ggf. vielleicht auch im Developer-Forum?
Ich hatte Martin Fischer dazu auch schon mal angeschrieben, dass er die entsprechenden Teile aus diesem Thread dann mit in den neuen verschiebt.

So bleibt das meiner Meinung nach etwas übersichtlicher.

Gruß
Dirk

crazystone

Ok, also wie erwartet, nach Abschalten der unnötigen Initialisierung und des keepAliveCheck, bleibt die Verbingung offen:


2013.08.28 22:14:46 3: Opening HM485LAN device 192.168.178.37:1000
2013.08.28 22:14:46 3: HM485LAN device opened
...
2013.08.28 22:14:48 1: HM485LAN Unknown msg >Hbd,01,eQ3-HMW-LGW,1.0.4,KEQ0360763<
2013.08.28 22:14:48 1: HM485LAN Unknown msg >Sbe<
2013.08.28 22:15:11 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 22:15:12 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 22:15:13 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 22:15:14 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 22:15:39 1: HMLAN_Send:  HM485LAN I:�K
2013.08.28 22:16:04 1: HMLAN_Send:  HM485LAN I:�K


Busverkehr sehe ich noch nicht, weil der Transparenzbefehl mit der richtigen Sequenznummer noch kommandiert werden muss.

Viele Grüße
Thorsten

crazystone

Alles klar Dirk! Vollkommen Deiner Meinung. Sorry für die vielen Zwischen-Step-Posts hier, aber es dient mir auch als Dokumentation meiner Schritte, so dass ich den Überblick nicht verliere. Ich stimme der Verschiebung aller meiner Beiträge zu dem Thema hiermit zu. Vielleicht sollte der Thread "HomeMatic wired - HMW-LGW" heißen.

Genug für heute, morgen geht's an Parsen der Antworten.

Gute Nacht
Thorsten

martinp876

Hi,

auf Anfrage habe ich einmal etwas zusammengestellt. Das ganze ist ungetestet. Soll helfen einen parser für HM485 zu bauen.

Es ist weit weg von fertig. Beachten könnt ihr die funktion HMLAN_parse und HMLAN_485Write.

Beim wireshark konnt ihr erst einmal filtern auf
tcp.flags.push == 1
der rest (push=0) ist TCP das nicht interessiert.
Ich habe das PACP zerlegt, so wie ich es verstehen kann und angehängt.

vielleicht seit ihr ja schon viel weiter oder wollt es anders machen (oder habt es schon). Dann nichts für ungut.

Tschau Martin

Dirk

Hallo zuasmmen,

Damit der Thread hier etwas übersichtlicher bleib, habe ich im Entwickler-Forum einen neuen Tread angelegt:
HomeMatic Wired - HMW-LAN-Gateway

Ich schlage vor die Themen rund um die Integration des HomeMatic Wired - HMW-LAN-Gateway hier drin fortzusetzen.
Zusätzlich hatte ich Martin Fischer gebeten die Relevanten Beiträge auch in diesen Tread zu verschieben.
Aus meiner Sicht sind das folgende Themen-IDs:
91550, 91623, 91645, 91647, 91649, 91653, 91658, 91670, 91679, 91682, 91689, 91703, 91708, 91715, 91718, 91720, 91723, 91724, 91735, 91738, 91744, 91754, 91756, 91758, 91799, 91802, 91803, 91810, 91820, 91825, 91826, 91835, 92175, 92180, 92185, 92188, 92227, 92229, 92306, 92332, 92339, 92342, 92344, 92346, 92375

Gibt es dagegen Einwände?

Gruß
Dirk

crazystone

Hallo Leute,

das nimmt richtig Fahrt auf, dass ist Klasse. Leider habe ich im Entwicklerforum (noch) keine Schreibrechte. Was muss ich dafür tun?

Viele Grüße
Thorsten

betateilchen

Das steht im allerersten, oben angepinnten Beitrag in dem genannten Forumbereich.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

crazystone

Solange ich im anderen Thread noch keine Berechtigung habe, bitte ich meine Posts hier zu tolerieren.

ICH HABS!!

Anbei dank martinp876 mein erstes gepatchtes und kommentiertes 00_HM485LAN.pm , das das HMW-LGW initialisiert, transparent schaltet und per keepAlive am Leben hält.

ToDo next: Bus-Verkehr auslösen und beobachten.

Im Moment ist es noch etwas gesprächig, bitte das zu entschuldigen:


2013.08.30 00:20:09 3: Opening HM485LAN device 192.168.178.37:1000
2013.08.30 00:20:09 3: HM485LAN device opened
...
2013.08.30 00:20:11 1: HM485_Parse: HM485LAN Message: >>Hcb,01,eQ3-HMW-LGW,1.0.4,KEQ0360763<<
2013.08.30 00:20:11 1: HM485_Parse: SeqNo: cb   Type:eQ3-HMW-LGW,  Serial:KEQ0360763   Version:1.0.4
2013.08.30 00:20:11 1: HM485_Parse: HM485LAN Message: >>Scc<<
2013.08.30 00:20:11 1: HM485_Parse: SeqNo: cc   Send: >cc ,0000
2013.08.30 00:20:34 1: HM485_KeepAlive: msgNo: 0
2013.08.30 00:20:59 1: HM485_KeepAlive: msgNo: 1
2013.08.30 00:21:24 1: HM485_KeepAlive: msgNo: 2
2013.08.30 00:21:49 1: HM485_KeepAlive: msgNo: 3
2013.08.30 00:22:14 1: HM485_KeepAlive: msgNo: 4
2013.08.30 00:22:39 1: HM485_KeepAlive: msgNo: 5


Für heute ist Schluss.

martinp876 ich wäre Dir dankbar für ggf. eine professionelle Bereinigung des Moduls. Ich denke Du kannst alles rausschmeißen, was man nicht unbedingt für HM485LAN braucht, sondern nur für HMLAN.

Vielen Dank und Viele Grüße
Thorstem

crazystone

Was ich noch vergass:

Da ich mich noch nicht wirklich mit dem Laden komplett neuer Module in FHEM auskannte, habe ich das Modul immer umbenannt und anstatt 00_HMLAN geladen. Ich denke es wäre aber an der Zeit, das ein zugelassener Entwickler das jetzt als neues Modul (eben 00_HM485LAN.pm) in FHEM einbringt. Ich übernehme dann gern weiter die Pflege (wenn ich darf).

Also ToDo: discovery

VG
Thorsten

Dirk

Hi Thorsten,

ZitatEntwickler das jetzt als neues Modul (eben 00_HM485LAN.pm) in FHEM einbringt.
So lange das Modul noch nicht einigermaßen fertig ist, würde ich das noch nicht ins SVN einchecken. Als Namen würde ich 00_HM585_LAN.pm vorschlagen.
Du kannst das Modul einfach entsprechend benennen. Einchecken ins SVN kannst du das später auch selber. Dafür brauchst du dann einen Account bei Sourceforge, den du dann an Rudi schickst, so dass er die Schreibrechte geben kann.

Gruß
Dirk

crazystone

Da passt doch noch etwas nicht. Wenn ich wie martinp876 sagt den sniff nur auf die tcp.flags.push == 1 filtere, sehe ich bei mir keine Rückmeldung mehr auf die KeepAlive. Das ACK mit Dateninhalt wie bei mgernoth als 0x61 0x00 fehlt. Es scheint, dass ich vom HMW-LGW nur auf TCP Ebene die ACK bekomme. Sorry, dem bin ich in meiner Euphorie aufgesessen. Bin ja auch neu in Wireshark...

Ich bekomme auch immer noch keine Bus-Messages raus, trotz gesendetem Transparenz-Kommando. Selbiges wird aber auch nicht acknowledged, ausser auf TCP Ebene. Aber das war auch bei mgernoth nicht anders.

Was mir noch auffällt, ist das der damals verwendete HMW-LGW eine neuere FW hatte 1.0.5 wo ich heute nur 1.0.4 habe. Ich habe aber im Netz auch kein FW update gefunden (nicht auf der eQ3 Seite und auch nicht über Big Google).

martinp876, mgernoth, Dirk, habt ihr noch einen Tipp?

martinp876

hm - in deinem pcap ist tatsächlich keine Antwort zu sehen - leider gar keine. Ganz im gegensatz zu den Pcap weiter oben irgendwo im Threat.

Ich würde erst einmal so gut wir garkeine Info deines Devices. Es kommt aber eine 2. startmessage. Ich denke dein Log ist nicht von einem funktionierenden system - oder die hälfte ist angeschnitten.
push=1 sollte ok sein