Hilfe bei Protokollanalyse

Begonnen von BigBen, 10 März 2013, 17:37:46

Vorheriges Thema - Nächstes Thema

BigBen

Hallo,

ich implementiere gerade die Homematic-Geschichte in unser HA-Projekt (hap.googlecode.com). Dank dem FHEM-Code konnte ich viele Dinge ohne Reverse-Engineering übernehmen !

Aktuell plagt mich folgendes Problem und ich hoffe ein Homematic/FHEM-Spezi kann mir helfen:


Unser Server soll ein ACK an einen Aufputz-Wandtaster (..W55) schicken, so dass dieser mit "grün" bestätigt.
Hierzu möchte ich den Wandtaster mit unserem Server "peeren" und zwar mit dem Kommando wie hier http://www.fhemwiki.de/wiki/HM-RC-12_Funkfernbedienung_12_Tasten unter "Pairing an HMLAN Konfigurator" beschrieben.

Die Sequenz sieht wie folgt aus:

Wandtaster (1F1EE6) wird in den Config-Modus gebracht:
HMLAN in: E1F1EE6,0000,00BE6BE4,FF,FFBD,2D84001F1EE600000011006B4B45513030333238383440020000

Server (1C65B8) sendet:
HMLAN out: S55129E1D,00,00000000,01,55129E1D,04A0011C65B81F1EE601011C65B80100

Wandtaster sendet:
HMLAN in: E1F1EE6,0100,00BE84AF,FF,FFB9,04A0021F1EE61C65B804897F5A68897F02
HMLAN in: R55129E1D,0030,00BE84B4,01,FFB9,04A0021F1EE61C65B804897F5A68897F02

Was will mir der Wandtaster hiermit sagen (Status 0100 und 0030) ?
Wie sieht ein korrekter ACK vom HMLAN aus? Reicht ein +SenderID wie bei anderen Devices auch, oder muss da noch eine weitere Info folgen?

Vielen Dank,
Ben

martinp876

Hi Ben
eine der beiden letzten messages kommt vom HMLAN, nicht vom Wandtaster. Sie gehoert zum HMLAN-Zentrale protokoll und signalisiert, dass deine out-message seq 04 vom empfaenger beantwortet wurde.
Zusaetzlich wird die message auch noch als "empfangen" weitergeleitet - daher ist sie doppelt. Eine musst du ignorieren - oder nur zur steuerung des HMLAN-Zentrale protokolls verwenden. FHEM ist hier nicht fertig implementiert.

man peert mit devicepair, wie du sicher schon gesehen hast.
peeren ist grundsaetzlich unterschiedlich zwischen aktoren und tastern. Fuer dich also der Taster.

Schicke ein
01A0011C65B81F1EE601011C65B80100

wenn du einen trigger empfaengst einfache ein ack schicken - mit der korrekten sequenznummer!

Gruss
Martin

BigBen

Hallo Martin,

genau die von Dir angegebene Sequenz schicke ich vom HMLAN (1C65B8) an den Taster (1F1EE6) raus:

S58C1D635,00,00000000,01,58C1D635,01A0011C65B81F1EE601011C65B80100

Zuertst kommt dann das hier zurück (E = Event?):

E1F1EE6,0100,046DDE17,FF,FFA4,01A0021F1EE61C65B80433615C4A336102

Kommt das jetzt vom Taster oder ist das "Bestätigungs"-Telegramm vom HMLAN?

Ist das folgende Telegramm dann vom Taster ? (R = Receive?)

R58C1D635,0030,046DDE1D,01,FFA4,01A0021F1EE61C65B80433615C4A336102

Was ich nicht verstehe ist: Warum bekomme ich kein klassisches ACK vom Taster zurück?

Die komplette Sequenz mit den von mir gesendeten ACKs sieht so aus:

(Taster in Config-Mode gebracht)
HMLAN in: E1F1EE6,0000,046DD5BD,FF,FFBD,4F84001F1EE600000011006B4B45513030333238383440020000
HMLAN out: +1F1EE6
HMLAN out: S58C1D635,00,00000000,01,58C1D635,01A0011C65B81F1EE601011C65B80100
HMLAN in: E1F1EE6,0100,046DDE17,FF,FFA4,01A0021F1EE61C65B80433615C4A336102
HMLAN out: +1F1EE6
HMLAN in: R58C1D635,0030,046DDE1D,01,FFA4,01A0021F1EE61C65B80433615C4A336102
HMLAN out: +1F1EE6

Der Taster blinkt erst langsam grün, dann schnell grün. Also eigentlich so wie es sein soll.

Dennoch schickt der Taster beim "tasten" nur Broadcasts raus:

HMLAN in: E1F1EE6,0000,050A4F9E,FF,FFBD,8A84401F1EE6000000013B

Die beantworte ich mit :

HMLAN out: +1F1EE6

Aber grün wird der Taster dann nicht.

Hast Du zufällig das Raw-Kommando für die Abfrage der Peer-Einträge im Taster parat (ich nutze ja hier kein fhem, sondern "bediene" mich nur des Codes)?

Gruß & Danke,
Ben

BigBen

Hi,

ich habe jetzt mal versucht ein "getdevicepair"-Befehl nachzubauen und zu senden:

(Taster in Config-Mode gebracht) HMLAN in: E1F1EE6,0000,05149E49,FF,FFBD,9284001F1EE600000011006B4B45513030333238383440020000
HMLAN out: +1F1EE6

GetDevicePair an Taster (1F1EE6):
HMLAN out: S5968A819,00,00000000,01,5968A819,07A0011C65B81F1EE60103

Antwort(en):
HMLAN in: E1F1EE6,0000,0514B5D9,FF,FFBE,07A0101F1EE61C65B80100000000
HMLAN out: +1F1EE6
HMLAN in: R5968A819,0001,0514B5DE,FF,FFBE,07A0101F1EE61C65B80100000000
HMLAN out: +1F1EE6

Ich denke mal die Nullen am Ende bedeuten nichts Gutes...

Gruß
Ben

martinp876

der letzte eintrag ist 00000000. Solange der nicht kommt ist die Liste nicht komplett. Sehr richtig und sehr wichtig.
Die Info kann mehrere Messages lang sein

BigBen

Hi,
Ich komme da irgendwie nicht weiter. Muss ich vor dem Pairing- Datagramm irgendwas voraus schicken?
Oder kann ich das Pairing-Datagramm in jedem Zustand versenden?

Hat vielleicht jemand einen devicepairing-Dump für mich ?

Cu,
Ben

martinp876

Hi Ben,

ich komme hier nicht so ganz mit. Du willst hier fuer ein anderes Produkt infos sammeln - soweit habe ich damit kein grosses Problem, ist ja open source. Wenn dir ein detail fehlt, helfe ich auch gerne aus.
Aber ich habe nicht vor, dir hier alle Datagramme der reihe nach zu liefern.
Zum einen solltest du selbst in der Lage sein, diese zu generieren. Nachdem zu eh mehr vor hast, installiere doch einfach FHEM und erzeuge deine Datagramme.
Nachdem du Entwickler bist solltest du in der Lage sein den Code durchzusehen und alle Besonderheiten zu beruecksichtigen.

Details und Besonderheiten gerne, immer, man hilft sich. Komplette Entwicklingshilfe kann ich leider nicht anbieten. Das hier ist das FHEM Forum, nicht das HA Project.
Falls dich jemand mit Datagrammen aus FHEM fuettert soll es mir recht sein.

Gruss, Martin

BigBen

Hallo,

mit der Anwort hätte ich jetzt nicht gerechnet.

Ich weiß auch nicht, was daran falsch ist, wenn man als Entwickler eines Open-Source-Projekts ein anderen Entwickler eines Open-Source-Projekts um Hilfe bittet.

Ich versuche halt die Homematic-Geschichte bei uns einzubinden (nur ein kleines Subset an Funktionen, welche FHEM bietet) und nutze den FHEM-Code/Forum als Startquelle, so dass ich das Rad nicht neu erfinden muss.

Warum soll ich mich tief in andere Projekte einarbeiten, wenn es Spezis gibt, die tief in der Materie drin stecken und einem unkomplizert helfen können? -- Zumal ich ja gezielt nach einem device-pairing-Problem gefragt habe und nicht nach allumfänglichen Implementierungen.
 
Mein Gott, wenn ich weiß das einer sich besser auskennt, frage ich doch da nach, anstatt stundenlang zu forschen. Das ist doch nur effizient.  

Zumal die Code-Analyse von fremden Projekten eh nicht mal "eben so" ist.

Aber da habe ich wohl zuviel Hilfsbereitschaft erwartet.

Sei es drum, muss ich halt fhem installieren, mich da komplett einarbeiten und den Code auf eigene Faust analysieren... Stundenlanges forschen, wo andere einem in 5min mit einem Dump helfen könnten.

Gruß,
Ben


Martin Thomas Schrott

Hi Ben,

das Problem an der Geschichte ist nicht die fehlende Hilfsbereitschaft, da kannst du dir sicher sein ;-) Aber Martin ist glaube ich ziemlich ausgelastet damit di user hier zu supporten und daneben HM in FHEM erst mal komplett einzubinden.
lG
Martin

martinp876

Hallo Ben,

vielleicht ist dies nicht klar rausgekommen:
Ich helfe gerne bei Verstaendnissfragen und Besonderheiten - habe auch schon versucht, dir zu helfen.

ZitatWarum soll ich mich tief in andere Projekte einarbeiten, wenn es Spezis gibt, die tief in der Materie drin stecken und einem unkomplizert helfen können? -- Zumal ich ja gezielt nach einem device-pairing-Problem gefragt habe und nicht nach allumfänglichen Implementierungen.

Das verstehe ich jetzt nicht. Willst du HM einbauen oder nicht? Wie willst du dies machen ohne HM zu verstehen? Ich koennte das nicht.

ZitatZumal ich ja gezielt nach einem device-pairing-Problem gefragt habe und nicht nach allumfänglichen Implementierungen.
Das ist ein Ablauf. Brauchst du die anderen nicht?
Dann solltest du dir eine Umgebung zulegen, wenn du es kopieren willst und kannst einfach alle Standardszenarien nachstellen.

ZitatMein Gott, wenn ich weiß das einer sich besser auskennt, frage ich doch da nach, anstatt stundenlang zu forschen. Das ist doch nur effizient.
Nach aktuellem Stand koennte ich HM warscheinlich schneller implementieren, das ist korrekt.
Du bist aber kein User dem eine high-level vorgehensweise genuegen kann. Du brauchst alle Details aus HM um einen sicheren Ablauf zu gewaehren.
ZitatSei es drum, muss ich halt fhem installieren, mich da komplett einarbeiten und den Code auf eigene Faust analysieren... Stundenlanges forschen, wo andere einem in 5min mit einem Dump helfen könnten.
ist die devicepair das einzige, was du brauchen wirst? dann schicke ich sie dir gerne. Aber wenn du der Reihe nach alle Szenarien haben willst habe ich die stundenlange Arbeit.

Wenn du einige Forschungen selbst anstellst werde ich dir gerne bei Detailsfragen helfen und freue mich ueber eine Austausch.
Meinen gesamten Code hast du bereits, da sind auch die Peerings enthalten.

Im uebrigen kann jeder andere gerne auch message-logs fuer dein HAP erstellen, muss nicht ich sein.

Gruss, Martin

BigBen

Hallo Martin,

ich verwende die Homematic-Komponenten in einem "Wrapper-Mode", sprich aus HAP-Sicht sehen die Homematic-Endgeräte wie HAP-Devices aus.
Somit erfolgt auch die  Adressierung mit klassischer HAP-Syntax, im Hintergrund dreht mir ein Perl-Modul die Befehle dann in Homematic-Datagramme um und umgekehrt.

Von daher muss das Perl-Modul nicht viel können. Die Konfiguration der Homematic-Komponenten kann ruhig mit der Windows-Oberfläche von eq3 erfolgen. Ich will eigentlich nur rudimentär mit den Homematic-Geräten kommunizieren.
Auch komplexe Verknüpfungen auf Homematic-Ebene will ich nicht implementieren, weil wir sowas mit unseren Modulen schön können.

Aktuell kann ich Homematic-Aktoren ein-/ausschalten und den Status abfragen. Die Fensterkontakte (Reed und Drehgriff) kann ich ebenfalls auswerten und dort funktioniert das ACK'en auch (gelb-grün-Status).
Nach "aussen" sehen die Geräte wie HAP-Devices aus. Das genügt schon.

Von daher funktionieren die rudimentären Dinge schon. Es wird halt nach und nach erweitert, je nachdem welches Homematic-Gerät ich kaufe/in die Finger bekomme. Dementsprechend erweitert sich auch der Horizont was das Homematic-Protokoll angeht.

Und genau da setzt mein Problem an:

Der Wandtaster (W55) bestätigt halt nicht wie die Fensterkontakte den Empfang eines ACK mit grün, weil hier scheinbar ein device-Pairing (link) notwendig ist. Die Fensterkontakte schicken ja brav Ihren Status an den HMLAN-Adapter, wenn sie einmal mit diesem verheiratet wurden. Ein Wandtaster jagt erstmal einen Broadcast raus...

Ich möchte halt nur ,dass der Taster mit grün bestätigt, genauso wie die Fensterkontakte & Co und hierzu muss ich halt das device-pairing wie oben beschrieben hinbekommen.

Von daher scheint es mir wichtig, dass ich verstehe, in welcher Konstellation das Kommando greift und in welcher nicht. Das lässt sich halt anhand von reiner Code-Analyse nur schwer nachvollziehen.
Wie gesagt: Ich möchte keine allumfängliche Homematic-Implementierung, von daher scheue ich mich vor der tiefen Einarbeitung in fhem zur reinen Code-Analyse / Verständnis.

Würde mich freuen, wenn mir hierzu jemand helfen könnte...

Gruß,
Marco


 

martinp876

Hi Ben
ZitatDie Konfiguration der Homematic-Komponenten kann ruhig mit der Windows-Oberfläche von eq3 erfolgen
peeren ist doch bereits Konfiguration. Das geht ueber schalten hinaus. Aber bei welcher operation du aufhoerst erst einmal egal.

ZitatDer Wandtaster (W55) bestätigt halt nicht wie die Fensterkontakte den Empfang eines ACK mit grün, weil hier scheinbar ein device-Pairing (link) notwendig ist. Die Fensterkontakte schicken ja brav Ihren Status an den HMLAN-Adapter, wenn sie einmal mit diesem verheiratet wurden. Ein Wandtaster jagt erstmal einen Broadcast raus...

hm - der Wandtaster ist auch eines der Devices, die ich nicht habe :-(
Generell schicken 'remotes' trigger an ihre peers. Wenn keine eingetragen sind sollte sie an broadcast schicken. Dann sind sie eigentlich zufrieden - die LED ist dann - meine ich - orange. Rot wenn ein eingetragener Peer nicht antwortet, gruen wenn alle peers geantwortet haben.

Eintragen eines peers mit
01A0011C65B81F1EE601011C65B80100  # channel 1
01A0011C65B81F1EE602011C65B80100  # channel 2
01A0011C65B81F1EE603011C65B80100  # channel 3
01A0011C65B81F1EE604011C65B80100  # channel 4
Damit ist deine Zentrale mit channel 01 gepeert
01A0011C65B81F1EE601021C65B80100
jetzt nicht mehr
Die Remote muss immer mit ack bestaetigen, wenn es geklappt hat.
Setzen von AES und burst mode ueber register settings - die interesseieren sich aber wohl nicht, da du immer mit der Zentrale peerst.

Der WM55 reagiert auf Config unnd wakeup. Wakeup haben wir nicht im Griff. Falls du dazu keinen Tip hast musst du anlernen druecken und die Messages nach der 8400 der remote schicken. Du hast dann so etwa 200-300 ms Zeit. 100ms solltest du besser warten, also nicht zu schnell

Gruss
Martin

BigBen

Hallo,

erstmal Danke für die detailliert Ausführung. Leider funktioniert das Pairing immer noch nicht. Deshalb habe ich jetzt doch mal fhem installiert (...hätte ich mal vorher machen sollen; war in 5min erledigt).

Interessanterweise funktioniert das device-pairing mit fhem und meinem Wandtaster ...W55 auch nicht !

In der fhem.cfg hab ich folgendes angelegt:
define CUL_HM_remote_1F1EE6 CUL_HM 1F1EE6
attr CUL_HM_remote_1F1EE6 devInfo 020000
attr CUL_HM_remote_1F1EE6 firmware 1.1
attr CUL_HM_remote_1F1EE6 hmClass sender
attr CUL_HM_remote_1F1EE6 model HM-PB-2-WM55
attr CUL_HM_remote_1F1EE6 protCmdPend 3 CMDs pending
attr CUL_HM_remote_1F1EE6 protLastRcv 2013-03-15 14:22:41
attr CUL_HM_remote_1F1EE6 room CUL_HM
attr CUL_HM_remote_1F1EE6 serialNr KEQ0032884
attr CUL_HM_remote_1F1EE6 subType remote
attr CUL_HM_remote_1F1EE6 loglevel 0
define FileLog_CUL_HM_remote_1F1EE6 FileLog ./log/CUL_HM_remote_1F1EE6-%Y.log

define HMvirtual CUL_HM ABC123
attr HMvirtual hmClass receiver
attr HMvirtual subType switch


Jetzt versuche ich mit dem virtuellen Device einen devicepair zu machen (das eigentlich gewollte Pairing mit dem HMLAN-Adapter habe ich jetzt mal hinten angestellt) :

set CUL_HM_remote_1F1EE6 devicepair 0 HMvirtual single set remote

Im Log erscheint:

2013.03.15 20:22:32 0: CUL_HM set CUL_HM_remote_1F1EE6 devicepair 0 HMvirtual single set remote
2013.03.15 20:22:35 0: HMLAN_Parse: HMLAN1 S:E1F1EE6 stat:0000 t:1B2DCC69 d:FF r:FFBBm:4984001F1EE600000011006B4B45513030333238383440020000
2013.03.15 20:22:35 0: HMLAN_Send:  S6F80F8EA,00,00000000,01,6F80F8EA,0BA0011C65B81F1EE60001ABC1230100
2013.03.15 20:22:35 0: HMLAN_Parse: HMLAN1 S:R6F80F8EA stat:0001 t:1B2DCD14 d:FF r:FFB7m:0B80021F1EE61C65B884
2013.03.15 20:22:35 0: HMLAN_Send:  +1F1EE6
2013.03.15 20:22:36 0: HMLAN_Send:  -1F1EE6
2013.03.15 20:22:36 0: HMLAN_Send:  +1F1EE6
2013.03.15 20:22:36 0: HMLAN_Send:  S6F80F9B0,00,00000000,01,6F80F9B0,0CA0011C65B81F1EE60005ABC1230104
2013.03.15 20:22:36 0: HMLAN_Parse: HMLAN1 S:R6F80F9B0 stat:0001 t:1B2DCEA4 d:FF r:FFAFm:0C80021F1EE61C65B884
2013.03.15 20:22:36 0: HMLAN_Send:  +1F1EE6
2013.03.15 20:22:36 0: HMLAN_Send:  -1F1EE6
2013.03.15 20:22:36 0: HMLAN_Send:  +1F1EE6


Die Tastvorgänge gehen immer noch an den Broadcast:

2013.03.15 20:24:30 0: HMLAN_Parse: HMLAN1 S:E1F1EE6 stat:0000 t:1B2F8C51 d:FF r:FFB3m:4E84401F1EE600000002CB
2013.03.15 20:24:32 0: HMLAN_Parse: HMLAN1 S:E1F1EE6 stat:0000 t:1B2F92C0 d:FF r:FFB2m:4F84401F1EE600000001E5


Jemand eine Idee was ich falsch mache (hoffentlich nicht alles :-))?

Mein ursprünglicher Versuch das Devicepairing zwischen Taster und HMLAN (1C65B8) herzustellen sieht wie folgt aus:

2013.03.15 20:28:06 0: CUL_HM set CUL_HM_remote_1F1EE6 raw ++A0011C65B81F1EE601011C65B80100
2013.03.15 20:28:10 0: HMLAN_Parse: HMLAN1 S:E1F1EE6 stat:0000 t:1B32E92C d:FF r:FFB7m:5084001F1EE600000011006B4B45513030333238383440020000
2013.03.15 20:28:10 0: HMLAN_Send:  S6F86157E,00,00000000,01,6F86157E,0FA0011C65B81F1EE601011C65B80100
2013.03.15 20:28:11 0: HMLAN_Parse: HMLAN1 S:E1F1EE6 stat:0100 t:1B32E9D9 d:FF r:FFACm:0FA0021F1EE61C65B80482AD42AC82AD02
2013.03.15 20:28:11 0: HMLAN_Parse: HMLAN1 S:R6F86157E stat:0021 t:1B32E9DE d:01 r:FFB6m:0F80021F1EE61C65B800CB1CE4A7
2013.03.15 20:28:11 0: HMLAN_Send:  +1F1EE6
2013.03.15 20:28:11 0: HMLAN_Send:  -1F1EE6
2013.03.15 20:28:11 0: HMLAN_Send:  +1F1EE6


Gruß
Ben

BigBen

Nachtrag:

set CUL_HM_remote_1F1EE6 getdevicepair:


2013.03.15 20:37:34 0: HMLAN_Send:  S6F8EADE6,00,00000000,01,6F8EADE6,10A0011C65B81F1EE60103
2013.03.15 20:37:34 0: HMLAN_Parse: HMLAN1 S:E1F1EE6 stat:0000 t:1B3B828E d:FF r:FFB8m:10A0101F1EE61C65B8011C65B80100000000
2013.03.15 20:37:34 0: HMLAN_Parse: HMLAN1 S:R6F8EADE6 stat:0001 t:1B3B8293 d:FF r:FFB8m:10A0101F1EE61C65B8011C65B80100000000
2013.03.15 20:37:34 0: HMLAN_Send:  +1F1EE6
2013.03.15 20:37:34 0: CUL_HM CUL_HM_remote_1F1EE6 dup mesg

martinp876

Hi Ben

set CUL_HM_remote_1F1EE6 devicepair 0 HMvirtual single set remote

du willst zwei devices peeren. Peeren kann man nur channels.

also entweder den channel angeben (nicht 0!)
set CUL_HM_remote_1F1EE6 devicepair 1 HMvirtual single set remote
set CUL_HM_remote_1F1EE6 devicepair 2 HMvirtual single set remote
set CUL_HM_remote_1F1EE6 devicepair 3 HMvirtual single set remote

eine Methode, die  eigentlich veraltet ist, da die meisten jetzt Button channels haben

oder einen channel definieren und den nutzen (erst einen virtual channel definieren!)

set <button_Channel> devicepair 1 <actotChannel> single set remote

Gruss

Martin