FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: Groej am 30 März 2018, 11:23:26

Titel: MQTT Rückmeldung abwarten für Status
Beitrag von: Groej am 30 März 2018, 11:23:26
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
Titel: Antw:MQTT Rückmeldung abwarten für Status
Beitrag von: helmut am 30 März 2018, 15:04:09
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
Titel: Antw:MQTT Rückmeldung abwarten für Status
Beitrag von: Groej am 30 März 2018, 15:38:35
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
Titel: Antw:MQTT Rückmeldung abwarten für Status
Beitrag von: helmut am 30 März 2018, 22:34:35
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
Titel: Antw:MQTT Rückmeldung abwarten für Status
Beitrag von: hexenmeister am 30 März 2018, 22:47:26
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.
Titel: Antw:MQTT Rückmeldung abwarten für Status
Beitrag von: Groej am 31 März 2018, 10:21:34
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
Titel: Antw:MQTT Rückmeldung abwarten für Status
Beitrag von: hexenmeister am 31 März 2018, 10:46:25
Kann schon sein, dass ohne stateFormat state auch funktioniert, state verhält sich anders, als andere Readings.
Titel: Antw:MQTT Rückmeldung abwarten für Status
Beitrag von: Groej am 31 März 2018, 15:04:39
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  :)