MQTT_GENERIC_BRIDGE: Endlosschleife und Node-Red. Beispiel? [GELÖST]

Begonnen von frankreed, 29 Januar 2019, 08:53:43

Vorheriges Thema - Nächstes Thema

frankreed

Hallo,

ich habe in FHEM einen Homematic-Schalter als Device eingerichtet. Funktioniert gut.
MQTT-GENERIC_BRIDGE ist auch eingerichtet, funktioniert auch (bis auf die Tatsache, dass er mit als state nur "???" anzeigt).

Beim Homematic-Schalter habe ich weiterhin folgendes als Attribute eingestellt (Syntax jetzt mal egal):

als mqttPublish state:topic={"fhem/schlafzimmer/schalter/state"}
als mqttSubscribe Status:stopic={"fhem/schlagzimmer/status"}

In Node-Red:
Brav einen MQTT-Input erstellt, der auf das Topic von mqttPublish abonniert. Dieser Input ist mit einem Node-Red-Switch-Eingang verbunden. Der Switch-Ausgang geht wiederum auf einen MQTT-Ausgang verbunden, der das mqttSubscribe-Topic veröffentlicht.

Wenn ich aber jetzt den Switch betätige, egal ob in FHEM oder Node-Red, löst das eine Endlosschleife mit "ON" / "OFF" Befehlen aus.

Kann mir vielleicht jemand mal seine FHEM-Schalterdefinition mit mqttPublish bzw. mqttSubscribe geben und seinen entsprechenden Node-Red-Flow?

Vielen Dank im Voraus.

Frank

EDIT: Sorry, gehört eigentlich in den Thread https://forum.fhem.de/index.php/topic,91984.0.html

hexenmeister

Updaten. Version von gestern versucht das automatisch zu vermeiden. Ansonsten muss natürlich die Schleife irgendwo unterbrochen werden. Wenn beide seiten den Wert (zurück)senden, dann passiert so etwas. Hier sollte NodeRed das, was extern ankommt nicht wieder zurücksenden. Kannst auch mit FHEM-seitig am Gerät mqttForward auf none zu stellen versuchen.

frankreed

Habe geupdatet. Funktioniert aber immer noch nicht.
Sitze jetzt vor dem Rechner.

Hier die Definition in FHEM:
defmod Gosund_1 MQTT_DEVICE
attr Gosund_1 IODev myBroker
attr Gosund_1 alias Spülmaschine
attr Gosund_1 devStateIcon ON:rc_GREEN:OFF OFF:rc_RED:ON offline:rc_BLUE:OFF
attr Gosund_1 icon scene_dishwasher
attr Gosund_1 mqttPublish stat:topic={"/fhem/spuelmaschine/stat/POWER"} state:qos=1 state:retain=0
attr Gosund_1 mqttSubscribe cmnd:stopic={"/fhem/spuelmaschine/cmnd/POWER"}
attr Gosund_1 publishSet ON OFF cmnd/Gosund-1/POWER
attr Gosund_1 room Küche
attr Gosund_1 stateFormat {ReadingsVal($name,"precence","") eq "offline" ? "offline" : ReadingsVal($name,"state","")}
attr Gosund_1 subscribeReading_precence tele/Gosund-1/LWT
attr Gosund_1 subscribeReading_sensor tele/Gosund-1/SENSOR
attr Gosund_1 subscribeReading_setup tele/Gosund-1/STATE
attr Gosund_1 subscribeReading_state stat/Gosund-1/POWER


In Node-Red folgenden Flow definiert:
[{"id":"57702935.8d1bf8","type":"mqtt out","z":"98fbf74d.960cb8","name":"Küche_MQTT_Out","topic":"/fhem/spuelmaschine/cmnd/POWER","qos":"2","retain":"false","broker":"a3de36cb.a5fb28","x":630,"y":140,"wires":[]},{"id":"a3de36cb.a5fb28","type":"mqtt-broker","z":"","name":"mosquitto","broker":"192.168.178.53","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Ich schaffe es einfach nicht, das ganze zu verbinden. Wenn ich in FHEM schalte passiert in Node-Red nichts, ebenso umgekehrt.
Das ganze hängt sicher nur an einer Kleinigkeit, aber irgendwo steckt da der Wurm drin.....

hexenmeister

Gibt es einen Grund, MQTT_DEVICE und an diesem die Bridge zu verwenden? Was soll das werden?

Mein Beispiel:
defmod DG_WZ_SA_Licht_Top EnOcean 0000000B
attr DG_WZ_SA_Licht_Top IODev FGW14
attr DG_WZ_SA_Licht_Top alias Licht WZ DG Top
attr DG_WZ_SA_Licht_Top devStateIcon off:light_light_dim_00@gray on:light_light_dim_100@yellow .*:hourglass
attr DG_WZ_SA_Licht_Top eep A5-38-08
attr DG_WZ_SA_Licht_Top event-on-change-reading state,buttons,channelA,channelB,channelC,channelD
attr DG_WZ_SA_Licht_Top group Beleuchtung
attr DG_WZ_SA_Licht_Top gwCmd switching
attr DG_WZ_SA_Licht_Top icon light_downlight
attr DG_WZ_SA_Licht_Top manufID 00D
attr DG_WZ_SA_Licht_Top mqttPublish state:topic=/hatest/dg/wz/licht/top/state
attr DG_WZ_SA_Licht_Top mqttSubscribe state:stopic=/hatest/dg/wz/licht/top/set
attr DG_WZ_SA_Licht_Top room Wohnzimmer
attr DG_WZ_SA_Licht_Top subDef 0010000B
attr DG_WZ_SA_Licht_Top subType gateway
attr DG_WZ_SA_Licht_Top webCmd on:off


NodeRed-Flow:
[{"id":"5cc4e13b.c300e","type":"mqtt in","z":"62e90aa0.5d60d4","name":"","topic":"/hatest/dg/wz/licht/top/state","qos":"2","broker":"e7d617ab.0f9208","x":250,"y":160,"wires":[["7c433c6c.a28d94"]]},{"id":"1a718b01.6af075","type":"mqtt out","z":"62e90aa0.5d60d4","name":"","topic":"/hatest/dg/wz/licht/top/set","qos":"","retain":"","broker":"e7d617ab.0f9208","x":800,"y":160,"wires":[]},{"id":"7c433c6c.a28d94","type":"ui_switch","z":"62e90aa0.5d60d4","name":"","label":"Wohnzimmer DG Top","group":"e4f06bbf.a91a28","order":1,"width":0,"height":0,"passthru":false,"decouple":"true","topic":"","style":"","onvalue":"on","onvalueType":"str","onicon":"","oncolor":"","offvalue":"off","offvalueType":"str","officon":"","offcolor":"","x":560,"y":160,"wires":[["1a718b01.6af075"]]},{"id":"e7d617ab.0f9208","type":"mqtt-broker","z":"","broker":"192.168.0.15","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":""},{"id":"e4f06bbf.a91a28","type":"ui_group","z":"","name":"Schalter","tab":"50154367.e9148c","order":2,"disp":true,"width":"6","collapse":false},{"id":"50154367.e9148c","type":"ui_tab","z":"","name":"Home","icon":"dashboard","order":1}]


frankreed

Bis jetzt war das Device (eine mit Tasmota geflashte Steckdose) als MQTT-Device über den MQTT-Broker eingerichtet, um es über FHEM zu bedienen. Daher auch die Attribute publishset und subscribeReading*.
Hat gut funktioniert.

Jetzt bin ich auf die glorreiche Idee gekommen, das Device über die Node-Red-UI zu schalten und habe die MQTT_GENERIC_BRIDGE dazu verwendet, Aktionen aus FHEM über den Broker an Node-Red zu senden. Mit dem kleinen Schubs von hexenmeister habe ich meinen Denkfehler, glaube ich, verstanden:

Mit der Doppeldefinition von MQTT-Device als auch als ein an die GENERIC_BRIGE angeschlossenes Device wird ja zweimal was an den Broker geschickt. Und dabei kann halt Blödsinn herauskommen.
War voll verpeilt  :)

Herzlichen Dank an Hexenmeister, Thread als gelöst gekennzeichnet.