Nachdem das ganze jetzt läuft und ich ein paar Stunden damit verbracht habe, möchte ich mal einen Punkt in die Runde werfen.
Macht es wirklich Sinn, atomar auf Ebene der "Datapoints" zu publishen ?
Ich versuche z.B. im Moment auf einen Bewegungsmelder zu reagieren.
Die Struktur ist wie folgt:
Code: Alles auswählen
<state>
<device name="Bewegungsmelder" ise_id="4166" unreach="false" sticky_unreach="false" config_pending="false">
<channel name="Bewegungsmelder:0" ise_id="4167"->
<datapoint name="BidCos-RF.LEQ0657358:0.UNREACH" type="UNREACH" />
<datapoint name="BidCos-RF.LEQ0657358:0.STICKY_UNREACH" type="STICKY_UNREACH" />
<datapoint name="BidCos-RF.LEQ0657358:0.CONFIG_PENDING" type="CONFIG_PENDING" />
<datapoint name="BidCos-RF.LEQ0657358:0.LOWBAT" type="LOWBAT"/>
<datapoint name="BidCos-RF.LEQ0657358:0.RSSI_DEVICE" type="RSSI_DEVICE"/>
<datapoint name="BidCos-RF.LEQ0657358:0.RSSI_PEER" type="RSSI_PEER"/>
<datapoint name="BidCos-RF.LEQ0657358:0.DEVICE_IN_BOOTLOADER" type="DEVICE_IN_BOOTLOADER"/>
<datapoint name="BidCos-RF.LEQ0657358:0.UPDATE_PENDING" type="UPDATE_PENDING"/>
</channel>
<channel name="Bewegungsmelder" ise_id="4196">
<datapoint name="BidCos-RF.LEQ0657358:1.BRIGHTNESS" type="BRIGHTNESS"/>
<datapoint name="BidCos-RF.LEQ0657358:1.MOTION" type="MOTION"/>
</channel>
</device>
</state>
Wenn sich jetzt was bewegt, dann bekommt Mosquitto immer 2 Messages, eine für "MOTION", und eine für "BRIGHTNESS" (und einen weiteren "INSTALL_TEST").
Fällt der Wert für "MOTION" übrigens wieder auf "0", dann kommt nur die Message für "MOTION" ?!
Ohne die Details zu kennen, zu denen die CCU Events auslöst, wäre mein Vorschlag alle (verfügbaren ?) DATAPOINTS in den Payload aufzunehmen.
Um bei meinem Beispiel zu bleiben: Jemand löst den Bewegungssensor aus, und das Außenlicht soll angeschaltet werden- aber eben nur, wenn es dunkler als "x" ist.
Mit dem momentanen Zustand gibt das ein Problem. "MOTION" löst aus, aber die Information "BRIGHTNESS" ist nicht verfügbar....
Jetzt kann ich entweder über die XML-API noch mal direkt nach "BRIGHTNESS" fragen, oder ich Cache die Information "MOTION" und warte auf die "BRIGHTNESS" Message ('oder umgekehrt, denn die Reihenfolge der Zustellung ist ja nicht garantiert.
Generell sollte der Event den Umfang der Nachricht definieren, und nicht das Informationsfragment ?
Ein weiteres Beispiel: Ein Dimmer sendet gleich 7 Messages (LEVEL, LEVEL_REAL, WORKING, DIRECTION und drei ERROR_*).
Gibt es eine Dokumentation die den Prozess der Event-Auslösung auf der CCU beschreibt ?
Ich würde gerne besser verstehen, welche Attribute verfügbar wären...
Gruß...