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
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.
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
Halte ich für keine so gute Idee. Das bezieht sich explizit auf ein konkretes Device.
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
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.
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