MQTT Rückmeldung abwarten für Status

Begonnen von Groej, 30 März 2018, 11:23:26

Vorheriges Thema - Nächstes Thema

Groej

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
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

helmut

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
Intelligenz ist die Fähigkeit, Arbeit zu vermeiden, aber dafür zu sorgen, daß die Arbeit gemacht wird.
(Linus Torvalds)

Groej

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
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

helmut

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
Intelligenz ist die Fähigkeit, Arbeit zu vermeiden, aber dafür zu sorgen, daß die Arbeit gemacht wird.
(Linus Torvalds)

hexenmeister

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.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Groej

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
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280

hexenmeister

Kann schon sein, dass ohne stateFormat state auch funktioniert, state verhält sich anders, als andere Readings.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Groej

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  :)
FHEM - RaspPi2 - KNXD - KNX - CUL 868 - FS20 - HMS - WH3080 - Signalduino 433 MHz - Telegram - Anel Elektronik IP Steckdosen - BME280