MQTT2 Device published topic von client node in state Device

Begonnen von holle75, 31 Januar 2020, 17:18:51

Vorheriges Thema - Nächstes Thema

holle75

Oh, diese Begrifflichkeiten  ???

Ich versuche es zu umschreiben ...

Ich habe ein MQTT2-Device

Internals:
   CFGFN     
   CID        nodemcuArduino
   DEF        nodemcuArduino
   DEVICETOPIC MQTT2_nodemcuArduino
   FUUID      5e317605-f33f-6bb4-4573-520295d665bdbfa6
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 186
   MQTT2_FHEM_Server_TIME 2020-01-31 16:56:58
   MSGCNT     186
   NAME       MQTT2_nodemcuArduino
   NR         22421
   STATE      off
   TYPE       MQTT2_DEVICE
   OLDREADINGS:
   READINGS:
     2020-01-31 16:56:58   RichtungFhem    0
     2020-01-31 16:56:54   state           off
Attributes:
   IODev      MQTT2_FHEM_Server
   readingList nodemcuArduino:nodemcuArduino/RichtungFhem:.* RichtungFhem
   room       MQTT2_DEVICE
   setList    on nodemcuArduino/Richtungnodemcu 1
off nodemcuArduino/Richtungnodemcu 0


welches über den MQTT2 Server in fhem mit einer nodemcu kommuniziert.

Über on/off in fhem kann ich die LED mit dem im List aufgeführen "attr setList" auf der nodemcu schalten. Wenn ich über den Taster auf der nodemcu die selbe LED schalte, erhält das MQTT2 Device im Reading "RichtungFhem" eine 1, resp. 0. Das ist auch ganz schön so.

Jetzt hätte ich aber natürlich gerne, dass state und Icon im fhem MQTT2 Device mit dem Zustand auf der nodemcu korrespondieren.

Wie bekomme ich das von der nodecmu gepublishte topic "nodemcuArduino/RichtungFhem" was gleichzusetzen ist mit dem Zustand der LED  ins state (on/off) vom MQTT2 Device?

Ich hoffe, man kann verstehen worauf ich hinaus will  ..

Danke und Grüße
H.




TomLee


holle75

Hallo Thomas und Danke.

attr nodemcuArduino jsonMap RichtungFhem:state

Hört sich logisch an, verändert aber leider nichts. Weiterhin bekomme ich brav mein "RichtungFhem" Reading 1 und 0, aber im state bleibt es beim on/off von der in fhem ausgeführten Schaltung davor.

TomLee

#3
Schon mit dem Attribut eventMap versucht das on/off aus setlist zu mappen, wenn 1/0 im state stehen soll ?

edit:

oder die setlist anpassen auf 0=off/1=on

holle75

#4
eben probiert, .... und auch allerlei andere möglichen Kombinationen mit setlist, eventmap, jsonmap, aber weiterhin bleibt state und "Richtungfhem" völlig unabhängig voneinander. Was mich wundert ist, dass ich noch andere MQTT2-Devices eingebunden habe, wo das Zusammenspiel zwischen dem von den nodes gepublishten Reading und state in fhem funktioniert. ohne Jsonmap, etc .

Habe eben mal das ganze Device gelöscht und über autocreate neu anlegen lassen, keine Änderung. Wüßte auch nicht, was im arduino code falsch sein müßte, weil das Problem ja auf fhem Seite liegt.

Edit: ein Beispiel für ein MQTT2-Device wo Reading und state zusammenspielen. Ich seh da nicht viel anderes (außer das dieses Device unter ESPeasy läuft und das Problem Device unter arduino)

Internals:
   CID        ESPClient_5C_CF_7F_1B_DD_3A
   DEF        ESPClient_5C_CF_7F_1B_DD_3A
   DEVICETOPIC ESPClient_1_Relais_2
   FUUID      5e2df9b2-f33f-6bb4-d623-93a76f43a0a39cf8
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 19
   MQTT2_FHEM_Server_TIME 2020-01-31 22:36:39
   MSGCNT     19
   NAME       ESPClient_1_Relais_2
   NR         1221
   STATE      on
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-01-31 22:36:39   RelaisAnAus_2   1
     2020-01-31 22:36:38   state           on
Attributes:
   IODev      MQTT2_FHEM_Server
   autocreate 0
   event-on-change-reading .*
   readingList ESPClient_5C_CF_7F_1B_DD_3A:ESP-Easy-1/Test_GPIO/RelaisAnAus_2:.* RelaisAnAus_2
   room       MQTT2_DEVICE
   setList    on:noArg ESP-Easy-1/cmd GPIO,14,1
off:noArg ESP-Easy-1/cmd GPIO,14,0

rudolfkoenig

jsonMap wirkt (wie der Name es auch suggeriert) nur bei JSON Daten, wenn man diese mit json2nameValue nach Readings konvertiert.

attr nodemcuArduino eventMap RichtungFhem.*0:off RichtungFhem.*1:onDas konvertiert zwar die Events nach on/off, STATE (was fuer die Anzeige verwendet wird) bleibt aber unveraendert.

Ich wuerde stattdessen die folgende Methode nutzen:
attr nodemcuArduino userReadings state:RichtungFhem.* {$eventValue eq "1" ? "on" : "off"}

holle75

Danke Rudolf, das funktioniert.

Aber wieso brauchen die anderen MQTT2 Devices, die mehr oder weniger identisch aussehen, das userReadings nicht? Wo liegt da fhem intern die entscheidende Info?

rudolfkoenig


holle75

#8
ESPEasy publisht Json state bei jedem Schaltvorgang (was man nur im Hautptdevice sieht), mein ArduinoCode (noch) nicht.
Deswegen funktioniert Rudolfs Vorgang, und TomLees hier nicht.