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.
Attribut jsonMap setzen
RichtungFhem:state
Gruß
Thomas
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.
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
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
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:on
Das 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"}
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?
Sorry, keine Idee.
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.