Hallo,
ich habe mehrere MQTT Device am Laufen und ist stelle eigentlich bei alles fest das wenn ich was schalte und das Gerät gar nicht da ist das trotzdem der Status geändert wird. Ich habe getrennte Topics im Device aber anscheinend sind die egal.
Mach ich was falsch oder ist das ein Fehler?
Wenn ich die Dose schalte wird /wohnung/smarthome/obi1/cmd,1 gesendet an den Broker und in dem Moment wird auch der Status geändert im FHEM. Es wird also gar nicht auf /wohnung/smarthome/obi1/switch,1 gewartet an der Stelle was das Gerät zurück sendet wenn es denn da ist.
Hier mal ein List einer OBI Wlan Steckdose mit ESPeasy und MQTT Anbindung
Internals:
CFGFN ./FHEM/fhem_mqtt.cfg
CHANGED
IODev Mosquitto
NAME OBI_Dose1
NR 763
STATE 0
TYPE MQTT_DEVICE
READINGS:
2018-03-30 11:11:01 state 0
2018-03-30 11:11:01 transmission-state outgoing publish sent
message_ids:
publishSets:
:
topic /wohnung/smarthome/obi1/cmd
values:
1
0
sets:
0
1
subscribe:
/wohnung/smarthome/obi1/switch
subscribeExpr:
^\/wohnung\/smarthome\/obi1\/switch$
subscribeReadings:
/wohnung/smarthome/obi1/switch:
cmd
name state
Attributes:
IODev Mosquitto
alias Test 1
devStateIcon 1:message_socket@green:0 0:message_socket@red:1 offline:message_socket@blue
event-on-change-reading state
group OBI-Dose
publishSet 1 0 /wohnung/smarthome/obi1/cmd
room Wohnung
stateFormat state
subscribeReading_state /wohnung/smarthome/obi1/switch
webCmd :
Danke für Tipps und schöne Ostern Euch hier.
Gruß
Jörg
Hallo Joerg,
hast Du Dir denn mit mosquitto_sub oder einem anderen geeigneten Werkzeug mal die Kommunikation
zwischen fhem und Geraet angesehen? Ist das Topic fuer das subscribeReading korrekt?
Gruss Helmut
Hallo Helmut,
ja das passt aber selbst wenn es falsch wäre wäre es egal. Der Status wird geändert obwohl das Gerät gar nicht eingeschaltet ist.
Gruss
Jörg
Hallo Joerg,
das kann ich hier nachvollziehen. Dass ich Dein Problem nicht habe, liegt wohl daran, dass ich mein
Reading ungleich "state" genannt habe. "state" ist ein besonderes Reading und wird auf den Wert der
letzten Aktion gesetzt. Warum das subscribeReading hier nicht vorgeht, kann ich nicht erklaeren, aber
nimm einfach einen anderen Namen wie "subscribeReading_status" oder so und aendere stateFormat
und event-on-change-reading entsprechend.
Gruss Helmut
Genau daran liegt es auch. PublishSet überwacht und sendet Änderungen, die per set Befehl (ohne zusätzlichen Readingsnamen) gesetzt werden. Damit wird auch gleich state gesetzt. Ändere publishSet auf ein anderes Reading.
Moin,
Danke für Eure Hilfe. Jetzt klappt es. Allerdings geht es auch ohne stateFormat oder sollte es so nicht gehen?
Internals:
CFGFN ./FHEM/fhem_mqtt.cfg
CHANGED
IODev Mosquitto
NAME OBI_Dose1
NR 764
STATE 1
TYPE MQTT_DEVICE
READINGS:
2018-03-31 10:18:56 state 1
2018-03-31 10:18:23 status 0
2018-03-31 10:18:56 transmission-state outgoing publish sent
message_ids:
publishSets:
:
topic /wohnung/smarthome/obi1/cmd
values:
1
0
sets:
0
1
subscribe:
/wohnung/smarthome/obi1/switch
subscribeExpr:
^\/wohnung\/smarthome\/obi1\/switch$
subscribeReadings:
/wohnung/smarthome/obi1/switch:
cmd
name status
Attributes:
IODev Mosquitto
alias Test 1
devStateIcon 1:message_socket@green:0 0:message_socket@red:1 offline:message_socket@grey
event-on-change-reading status
group OBI-Dose
publishSet 1 0 /wohnung/smarthome/obi1/cmd
room Wohnung
subscribeReading_status /wohnung/smarthome/obi1/switch
webCmd :
Gruß
Jörg
Kann schon sein, dass ohne stateFormat state auch funktioniert, state verhält sich anders, als andere Readings.
So ich habs jetzt. Hab auch noch ein Notify gebaut was dann die Geräte dann als offline Kennzeichnet
Internals:
CFGFN ./FHEM/fhem_mqtt.cfg
IODev Mosquitto
NAME OBI_Dose1
NR 769
STATE offline
TYPE MQTT_DEVICE
READINGS:
2018-03-31 15:01:16 lwt Connection Lost
2018-03-31 11:25:28 state 0
2018-03-31 15:01:16 status offline
2018-03-31 15:01:16 transmission-state incoming publish received
message_ids:
publishSets:
:
topic /wohnung/smarthome/obi1/cmd
values:
1
0
sets:
0
1
subscribe:
/wohnung/smarthome/obi1/switch
/wohnung/smarthome/obi1/status/LWT
subscribeExpr:
^\/wohnung\/smarthome\/obi1\/switch$
^\/wohnung\/smarthome\/obi1\/status\/LWT$
subscribeReadings:
/wohnung/smarthome/obi1/status/LWT:
cmd
name lwt
/wohnung/smarthome/obi1/switch:
cmd
name status
Attributes:
IODev Mosquitto
alias Test 1
devStateIcon 1:message_socket@green:0 0:message_socket@red:1 offline:message_socket@grey
event-on-change-reading status,lwt
group OBI-Dose
publishSet 1 0 /wohnung/smarthome/obi1/cmd
room Wohnung
stateFormat status
subscribeReading_lwt /wohnung/smarthome/obi1/status/LWT
subscribeReading_status /wohnung/smarthome/obi1/switch
webCmd :
Hier das Notify
Internals:
CFGFN ./FHEM/fhem_mqtt.cfg
DEF .*:lwt:.* { if ($EVENT !~ m/Connected/) { fhem ("setreading $NAME status offline")}}
NAME MQTT_online_check_notify
NR 756
NTFY_ORDER 50-MQTT_online_check_notify
REGEXP .*:lwt:.*
STATE 2018-03-31 15:01:21
TYPE notify
READINGS:
2018-03-31 14:56:02 state active
Attributes:
room 99_System
Danke für die Hilfe :)