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
Hast du die JSONMAP in einem externen Editor (Windows) erstellt oder direkt die Config bearbeitet?
Direkt in der Fhem Oberfläche
Hmm, momentan habe ich sonst keine Idee. Bei mir funktioniert es mit mehreren Zeilen.
Vielleicht weiß Rudi weiter...
Vermutung, lange schon kein Update mehr gemacht.
Update letzte Woche
Warum verheimlichst du die komplette Device-Definition ?
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.
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.
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.
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") }
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.
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)" ) }
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
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 ?
Es sind noch viel mehr Werte. Es macht mehr Sinn zu Filtern als im jsonmap rauszunehmen
Bisher reim ich mir zusammen zu deinem Anliegen eine Umsetzung in dem anderen Thread gezeigt zu haben.