Seltsames Verhalten JSONMAP

Begonnen von Medel, 22 September 2023, 19:40:52

Vorheriges Thema - Nächstes Thema

Medel

Hallo,

habe folgende JSONMAP erstellt:
ZbReceived_0x3D33_LinkQuality:LinkQuality
ZbReceived_0x3D33_CurrentPositionLiftPercentage:Position
ZbReceived_0x3D33_TuyaMovingState:TuyaMovingState
ZbReceived_0x3D33_TuyaCalibration:TuyaCalibration
ZbReceived_0x3D33_TuyaCalibrationTime:TuyaCalibrationTime

wenn ich die Zeile direkt mit einem Zeilenwechsel (Enter) abschließe wird wird jede zweite nicht ersetzt und das Original nicht aktualisiert
wenn ich die Zeile mit einem Leerzeichen mit anschließendem Zeilenwechsel (Enter) abschließe wird wird jede zweite nicht ersetzt, das Original wird aktualisiert

oder gibt es eine andere Möglichkeit "ZbReceived_0x3D33_" wegzubekommen.
Es wurde gewünscht dass ich meine zwei Beiträge verlinke, hier der Link wie ich das Device aus einem Json bekomme:
https://forum.fhem.de/index.php?topic=135069.0

frober

Hast du die JSONMAP in einem externen Editor (Windows) erstellt oder direkt die Config bearbeitet?
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

Medel


frober

Hmm, momentan habe ich sonst keine Idee. Bei mir funktioniert es mit mehreren Zeilen.
Vielleicht weiß Rudi weiter...
Raspi 3b mit Raspbian Bullseye und relativ aktuellem Fhem,  FS20, LGW, PCA301, Zigbee, MQTT, MySensors mit RS485(CAN-Receiver) und RFM69, etc.,
einiges umgesetzt, vieles in Planung, smile

********************************************
...man wächst mit der Herausforderung...

TomLee

Vermutung, lange schon kein Update mehr gemacht.

Medel


TomLee

Warum verheimlichst du die komplette Device-Definition ?

Medel

#7
Hier die Komplette Definition:
defmod MQTT2_z2t_3D33 MQTT2_DEVICE z2t_3D33
attr MQTT2_z2t_3D33 IODev mymqtt2_client

attr MQTT2_z2t_3D33 jsonMap ZbReceived_0x3D33_LinkQuality:LinkQuality\
ZbReceived_0x3D33_CurrentPositionLiftPercentage:Position\
ZbReceived_0x3D33_TuyaMovingState:TuyaMovingState\
ZbReceived_0x3D33_TuyaCalibration:TuyaCalibration\
ZbReceived_0x3D33_TuyaCalibrationTime:TuyaCalibrationTime

attr MQTT2_z2t_3D33 readingList tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"CurrentPositionLiftPercentage") }
tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"LinkQuality") }
tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"TuyaMovingState") }
tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"TuyaCalibration") }
tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"TuyaCalibrationTime") }

attr MQTT2_z2t_3D33 room MQTT
attr MQTT2_z2t_3D33 setList open:noArg    cmnd/tasmota2zigbee/Zbsend { "device":"0x3D33", "send":{"ShutterOpen":""} }\
close:noArg   cmnd/tasmota2zigbee/Zbsend { "device":"0x3D33", "send":{"ShutterClose":""} }\
stop:noArg    cmnd/tasmota2zigbee/Zbsend { "device":"0x3D33", "send":{"ShutterStop":""} }\
attr MQTT2_z2t_3D33 setStateList open close stop
Habe gerade festgestellt dass es ohne den Filtereintrag (5. Wert in json2nameValue) geht, aber wie bekomme ich dann die vielen generierten readings unterdrückt ohne sie alle in der jsonmap aufzuführen zu müssen.

TomLee

ZitatHabe gerade festgestellt dass es ohne den Filtereintrag (5. Wert in json2nameValue) geht, aber wie bekomme ich dann die vielen generierten readings unterdrückt ohne sie alle in der jsonmap aufzuführen zu müssen.

Ich, Laie, hab bisher noch nicht genau verstanden was genau gewünscht ist.

rudolfkoenig

ZitatHier die Komplette Definition:
Der Abschnitt nach jsonMap wurde vmtl. manuell bearbeitet, koennte von einem readingList stammen.
Mehrere readingsList Eintraege mit dem gleichen Regexp beim gleichen MQTT2_DEVICE funktionieren nicht.
Ein ",," in dem Funktionsaufruf in diesen Zeilen ist gleichwertig mit einem ",", das war fuer mich auch neu. Damit ist der letzte Wert Parameter #4.

ZitatHabe gerade festgestellt dass es ohne den Filtereintrag (5. Wert in json2nameValue) geht, aber wie bekomme ich dann die vielen generierten readings unterdrückt ohne sie alle in der jsonmap aufzuführen zu müssen.
Sowohl filter wie auch negfilter werden als Regexp ausgewertet.
In einem Regexp kann man mehrere Werte durch | getrennt auffuehren, also
(CurrentPositionLiftPercentage|LinkQuality|...)
Klammer ist notwendig, wenn man das ganze in ^$ einschliessen will.

Medel

ZitatDer Abschnitt nach jsonMap wurde vmtl. manuell bearbeitet
habe fehlenden Teil ergänzt, da war noch ein Kommentar und die Icon Definition darüber. Dabei habe ich offensichtlich den ersten Teil des Readings rausgelöscht.

Zitat(CurrentPositionLiftPercentage|LinkQuality|...)
das Funktioniert so nicht, ohne "" kommt eine Fehlermeldung:
Bareword "CurrentPositionLiftPercentage" not allowed while "strict subs" in use at (eval 321008) line 1.
Bareword "LinkQuality" not allowed while "strict subs" in use at (eval 321008) line 1.

Wenn ich es mit "" mache werden die Readings nicht aktualisiert
tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"CurrentPositionLiftPercentage|LinkQuality"|"TuyaMovingState"|"TuyaCalibration"|"TuyaCalibrationTime") }

rudolfkoenig

Zitathabe fehlenden Teil ergänzt,
Damit fuehrt mein Kommentar bei nachfoilgenden Lesern zur Verwirrung.

ZitatDabei habe ich offensichtlich den ersten Teil des Readings rausgelöscht.
Und das \ am Zeilenende wohl auch.
Z.Zt. noch unkorrigiert.

Zitatdas Funktioniert so nicht, ohne "" kommt eine Fehlermeldung:
Die Zeile wird als perl evaluiert, da sollte man auch die perl-Syntax beachten.

ZitatWenn ich es mit "" mache werden die Readings nicht aktualisiert
Im Beispiel sind (z.Zt) definitiv zu viele ", das duerfte eigentlich zu einer Meldung im Log fuehren.

Otto123

Ein Parameter -> in dem Fall ein String -> nur einmal " "
Ich denke so:
tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"CurrentPositionLiftPercentage|LinkQuality|TuyaMovingState|TuyaCalibration|TuyaCalibrationTime") }oder ->
ZitatKlammer ist notwendig, wenn man das ganze in ^$ einschliessen will.
tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"(CurrentPositionLiftPercentage|LinkQuality|TuyaMovingState|TuyaCalibration|TuyaCalibrationTime)" ) }
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Medel

Habe es mal so geändert:
defmod MQTT2_z2t_3D33 MQTT2_DEVICE z2t_3D33
attr MQTT2_z2t_3D33 IODev mymqtt2_client

attr MQTT2_z2t_3D33 jsonMap ZbReceived_0x3D33_CurrentPositionLiftPercentage:Position\
ZbReceived_0x3D33_TuyaMovingState:TuyaMovingState\
ZbReceived_0x3D33_TuyaCalibration:TuyaCalibration\
ZbReceived_0x3D33_TuyaCalibrationTime:TuyaCalibrationTime

attr MQTT2_z2t_3D33 readingList \
tele/tasmota2zigbee/3D33/SENSOR:.* { json2nameValue($EVENT,'',$JSONMAP,,"(CurrentPositionLiftPercentage|LinkQuality|TuyaMovingState|TuyaCalibration|TuyaCalibrationTime)") }

attr MQTT2_z2t_3D33 room MQTT
attr MQTT2_z2t_3D33 setList open:noArg    cmnd/tasmota2zigbee/Zbsend { "device":"0x3D33", "send":{"ShutterOpen":""} }\
close:noArg   cmnd/tasmota2zigbee/Zbsend { "device":"0x3D33", "send":{"ShutterClose":""} }\
stop:noArg    cmnd/tasmota2zigbee/Zbsend { "device":"0x3D33", "send":{"ShutterStop":""} }
attr MQTT2_z2t_3D33 setStateList open close stop


Leider geht es immer noch nicht ganz. Der erste Eintrag "CurrentPositionLiftPercentage" wird nicht aktualisiert, auch nicht ohne die Klammern

TomLee

Ich hab immer noch nicht verstanden um was es geht, was soll das jetzt bringen alle Keys des Json im Filterparameter aufzulisten, wenn doch eh alle Werte später gewollt sind, wozu dann filtern ?