[Gelöst] Perl replace von geschweiften Klammern in DOIF?

Begonnen von Phantomato, 17 November 2020, 12:37:37

Vorheriges Thema - Nächstes Thema

Phantomato

Hallo,

ich hänge schon seit Stunden daran ohne eine Lösung zu finden und zwar möchte ich diesen json Ausdruck:
{"ZbReceived":{"0xB1D1":{"Device":"0xB1D1","Temperature":21,"Humidity":53.44,"Pressure":1015,"PressureScale":-1,"PressureScaledValue":10156,"SeaPressure":1015,"Endpoint":1,"LinkQuality":52}}}
kürzen sodass er hinterher so aussieht:

{"Temperature":21,"Humidity":53.44,"Pressure":1015,"PressureScale":-1,"PressureScaledValue":10156,"SeaPressure":1015,"Endpoint":1,"LinkQuality":52}
um hinterher mit epandJSON sauber die einzelne Readings zu erhalten.

Ich versuche zur Zeit das Problem mit einer DOIF Schleife zu lösen:
define TasmotaZigbeeSetDeviceReadings DOIF ([TasmotaZigbeeKoordinator:Sensor] =~ "0x0B1C")
(
   ({my $msg = ReadingsVal('TasmotaZigbeeKoordinator','Sensor','');; $msg =~ s/{"ZbReceived//;; fhem("setreading IkeaRemoteControl1 Message $msg")})
)


Die Anweisung $msg =~ s/{"ZbReceived// scheitert offensichtlich an der "{". Ich habe alles versucht, gegooglet usw. aber einer Lösung bin ich leider nicht näher gekommen. 
Server: RaspberryPi4 4GB @Raspbian GNU/Linux 10 (buster), Docker, FHEM Docker | Homematic nanoCUL868 (VCCU) | Tasmota Switch & Sensors | Tasmota Zigbee | Zigbee2mqtt | SIGNALduino | Alexa & GoogleHome

Beta-User

MMn. solltest du mit dieser Art Device besser auf MQTT2_DEVICE ausweichen und dem Tasmota auch eine SetOption verpassen, damit er für jede ZigBee-ID einen eigenen Topic-Pfad aufmacht. Bei MQTT2_DEVICE haben wir schon die Routinen (via attrTemplate), um mit zigbee2tasmota umzugehen. Just my2ct.

Ansonsten kannst du auch den Code aus den betreffenden attrTemplate "klauen" und für MQTT_DEVICE anpassen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Phantomato

Danke für die Antwort. Ich habe mqtt2 überhapt zum ersten mal eingerichtet und den Tasmota2Zigbee Koordinator auf mqtt2 eingerichtet. Es hat soweit funktioniert und die Zigbee Devices werden angelegt.
Die Readings sind zb. "ZbReceived_0xB1D1_BatteryPercentage". Das war eigentlich der Grund warum ich mit dem Perl-Ausdruck und replace angefangen hatte. Ich wollte die Readings ohne "ZbReceived_0xB1D1_" haben, weil ich den teil als unflexibel erachte. Na ja ist jetzt nicht so tragisch. Immerhin habe ich jetzt eine gute Basis mit mqtt2 für Tasmota.
Server: RaspberryPi4 4GB @Raspbian GNU/Linux 10 (buster), Docker, FHEM Docker | Homematic nanoCUL868 (VCCU) | Tasmota Switch & Sensors | Tasmota Zigbee | Zigbee2mqtt | SIGNALduino | Alexa & GoogleHome

Beta-User

Es gibt passende attrTemplate dafür ;) , mir ist schon klar, dass das ohne Tricks drumrum komisch ist. Wiki konsultieren...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Phantomato

Wow! Tatsache! So einfach war die Lösung. Danke  ;D
Server: RaspberryPi4 4GB @Raspbian GNU/Linux 10 (buster), Docker, FHEM Docker | Homematic nanoCUL868 (VCCU) | Tasmota Switch & Sensors | Tasmota Zigbee | Zigbee2mqtt | SIGNALduino | Alexa & GoogleHome