[Gelöst] MQTT + Dummy Geräte

Begonnen von chanky, 20 Februar 2019, 20:01:32

Vorheriges Thema - Nächstes Thema

chanky

Hallo zusammen,

Ich hab folgendes Problem. Ich möchte alle States von meiner MQTT App (MQTT Dash) synchron zu meinem FHEM Server halten. Ich hab unterschiedliche Geräte im Einsatz und aber auch ein paar Dummy Geräte.

Heater

Internals:
   FUUID      5c42ddfd-f33f-ccf0-d163-9cebf893bbf8b834
   LASTInputDev MQTT_Broker
   MQTT_Broker_MSGCNT 7
   MQTT_Broker_TIME 2019-02-20 18:43:20
   MSGCNT     7
   NAME       Heater
   NR         94
   STATE      off
   TYPE       dummy
   READINGS:
     2019-02-20 18:43:20   state           off
Attributes:
   event-on-change-reading .*
   icon       scene_bath
   mqttPublish state:topic=/Home/Switches/Heater
   mqttSubscribe state:stopic=/Home/Switches/HeaterCmd
   room       myRoom
   setList    on off
   userattr   mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long
   webCmd     on:off



mqqttGeneric

  Internals:
   DEF        mqtt bedRoomLamp,TYPE=dummy,TYPE=Weather,garbage
   FUUID      5c457db9-f33f-ccf0-7b4e-fea59171180a2a45
   IODev      MQTT_Broker
   NAME       mqttGeneric
   NR         103
   NTFY_ORDER 50-mqttGeneric
   STATE      ???
   TYPE       MQTT_GENERIC_BRIDGE
   devspec    bedRoomLamp,TYPE=dummy,TYPE=Weather,garbage
   prefix     mqtt
   CHANGED:
     incoming-count: 35293
     incoming-count: 35294
     incoming-count: 35295
     incoming-count: 35296
   READINGS:
     2019-02-20 18:51:10   device-count    15
     2019-02-20 18:51:42   incoming-count  35296
     2019-02-20 18:51:42   outgoing-count  35583
     2019-02-20 18:51:42   transmission-state outgoing publish sent
     2019-02-20 18:51:10   updated-reading-count 0
     2019-02-20 18:51:10   updated-set-count 17
   devices:
     :global:
       :defaults:
         pub:qos    1
         pub:retain 1
         sub:qos    1
         sub:retain 0
     Heater:
       :publish:
         state:
           mode       R
           topic      /Home/Switches/Heater
       :subscribe:
         HASH(0x256a9c8)
         
   globalDeviceExcludes:
   globalReadingExcludes:
   globalTypeExcludes:
     pub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
     sub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
   subscribe:
Attributes:
   IODev      MQTT_Broker
   globalDefaults sub:qos=1 sub:retain=0 pub:qos=1 pub:retain=1
   room       MQTT




Meine Strategie ist wie folgt:

Global in der MQTT_GENERIC_BRIDGE habe ich unter globalDefaults die Definition->  globalDefaults sub:qos=1 sub:retain=0 pub:qos=1 pub:retain=1

Durch die definition oben erwarte ich mir dass die Bridge alle Nachrichten mit retain flag == 1 an meinem Broker sendet.


Das Problem:

Ich schicke ein Topic "/Home/Switches/HeaterCmd" von meiner App, (hier ist der retain flag == 0 in der App eingestellt), und abonniere das Topic "/Home/Switches/Heater"

mein Dummy Gerät abboniert das Topic  "/Home/Switches/HeaterCmd" und durch stopic soll das Gerät der state vom Topic zugewiesen bekommen.
Das Gerät legt dann seine state über das Topic "/Home/Switches/Heater" auf dem Broker auf (hier soll der retain flag == 1 durch die globalDefaults definition)

Hier habe ich mir gedacht, sollte die Verbindung zum Broker unterbrochen werden und ich mich neue mit dem Broker neue verbinde dann hole mich mir einfach der state von der letzten Nachtricht mit dem retain flag. Das stimmt leider nur für Geräte!=Dummy, bei Dummy Geräte verhält sich ganz anders.

Bei Dummy Geräte wird nach stopic der Retain Flag nicht mitgeschickt, aber der State wird erfolgreich geändert, hier gibt dann das Problem wenn man mit dem Broker neue verbindet, hat man dann irgend einen alten State.

Interessant ist wenn man der State vom Dummy direkt im FHEM ändert,hier wird das Topic immer mit dem retain flag == 1  geschickt. Jetzt bin ich ganz verwirrt

Ist dieses verhalten ein Bug oder ein Feature? Warum ist das Verhalten bei Dummy anders....? Bitte um eure Hilfe.
 
   
Vielen Dank im Voraus!

LG
Chanky

hexenmeister

Das ist tatsächlich ein Feature, kein Bug. Es ist auch nicht so, dass der retain-Flag beeinflusst wird, vielmehr leiten die Dummies die durch per MQTT ankommende Nachrichten verursachten Änderungen gar nicht erst weiter. Das dient der Vermeidung von Endlosschleifen und kann durch das Attribut mqttForward beeinflusst werden. Steht im Commandref.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

chanky

Vielen Dank, mit dem Attribut mqttForward funktioniert bei mir wie ich gern hätte. Ganz nett wäre noch eine Möglichkeit dieses Attribut global direkt in der Bridge zu setzen.

LG
Chanky


hexenmeister

Halte ich für keine so gute Idee. Das bezieht sich explizit auf ein konkretes Device.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

chanky

Naja wenn man 20 Dummy devices hat ist es recht mühsam, bei jedem das Attribut manuell zu setzen. Ich weiß dass in blöde Konstellationen zu einer  Endlosschleife führen kann aber wenn man bewusst global setzen will, was spricht da was dagegen.

LG

Sent from my SM-G930F using Tapatalk


hexenmeister

20 Stück? 5 Minuten mit einem Texteditor einmalig. Naja, kein großer Aufwand. Ich habe über 100 Dummies über meherere Insdtallationen verteil und halte es auch einmalig für gut machbar.

Zitatwas spricht da was dagegen.
Vor allem meine Unlust auf Supportanfragen. Bin mir leider sicher, dass viele es nicht bewusst einsetzen werden.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

chanky

Und natürlich hast du wieder recht. Ich hab nur an mich gedacht, wie du sagst es kann auch schnell in die andere Richtung gehen.

BTW das modul ist echt genial  mir taugt es dass man jedes Device mqtt fähig machen kann.

Vielen Dank für dein Support!


Sent from my SM-G930F using Tapatalk