[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON

Begonnen von drhirn, 20 September 2022, 13:40:55

Vorheriges Thema - Nächstes Thema

drhirn

Hallo,

der Shelly Plus H&T liefert leider ziemlich verschachteltes JSON:
{"src":"shellyplusht-c049ef8722b8","dst":"shellyplusht-c049ef8722b8/events","method":"NotifyFullStatus","params":{"ts":0.79,"ble":{},"cloud":{"connected":false},"devicepower:0":{"id": 0,"battery":{"V":0.43, "percent":0},"external":{"present":true}},"ht_ui":{},"humidity:0":{"id": 0,"rh":48.5},"mqtt":{"connected":true},"sys":{"mac":"C049EF87XXX","restart_required":false,"time":null,"unixtime":null,"uptime":0,"ram_size":235700,"ram_free":166132,"fs_size":458752,"fs_free":172032,"cfg_rev":8,"kvs_rev":0,"webhook_rev":0,"available_updates":{},"wakeup_reason":{"boot":"deepsleep_wake","cause":"status_update"},"wakeup_period":600},"temperature:0":{"id": 0,"tC":22.8, "tF":73.0},"wifi":{"sta_ip":"XXX.XXX.XXX.XXX","status":"got ip","ssid":"XXXXX","rssi":-43},"ws":{"connected":false}}}

Eine readingList mit
$DEVICETOPIC/events/rpc:.* { json2nameValue($EVENT) }
funktioniert, setzt aber natürlich für jeden (relevanten) Reading-Namen ein "params_" davor. Abgesehen davon interessieren mich die meisten Daten, die da geliefert werden nicht.

Ich finde aber leider nicht heraus, wie eine readingList-Zeile aussehen müsste, damit ich z.B. nur das Reading "temperature" und den Wert "22.8" habe. Ich könnte natürlich jsonMap verwenden, dann habe ich aber trotzdem noch alle Daten, obwohl ich sie nicht möchte.

Kann mir da bitte jemand einen Tipp geben?

Danke!
Stefan

Beta-User

Na ja, json2nameValue() kennt noch zwei weitere Parameter außer den "allgemein bekannten 3". Das sind Filter-Anweisungen, Kurzfassung einer Erklärung wäre in https://wiki.fhem.de/wiki/MQTT2_DEVICE_-_Schritt_f%C3%BCr_Schritt#json2nameValue.28.29 zu finden.
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

drhirn

Zitatdie Argumente 4 und 5 entsprechen einem Positiv- bzw.- Negativ-Filter, gefiltert wird, wenn die jeweils übergebene regexp matcht (5. Argument) bzw. nicht matcht (4. Argument)

Sehr kurz gefasst ;D

Wie würde da ein Beispiel aussehen?

Beta-User

Vermutlich so:
$DEVICETOPIC/events/rpc:.* { json2nameValue($EVENT,'',$JSONMAP,'temperature') }
Ich weiß nur nicht mehr, ob der Positiv-Filter vor oder nach der Umbenennung via jasonMap zuschlägt, sonst düfte es "tC" sein...

Falls du es verständlicher formulierne kannst: Bitte sehr...!
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

rudolfkoenig

Ich weiß nur nicht mehr, ob der Positiv-Filter vor oder nach der Umbenennung via jasonMap zuschlägt, [...].

Erst kommt negativFilter (Argument 5), dann map (Argument 3), dann positivFilter (Argument 4).

drhirn

$DEVICETOPIC/events/rpc:.* { json2nameValue($EVENT,'',$JSONMAP,'tC') }
Liefert genau die gewünschte Temperatur in Celsius. Nicht mehr, nicht weniger. jsonMap brauch ich dann trotzdem noch für einen hübschen Reading-Namen.

Und verstehen tu ich's sowieso nicht ;)

Beta-User

 ;D Mein Vorschlag bezog sich auf die gewünschte Umbenennung auf temperature (=passend gesetztes jsonMap), und nachdem Rudi nochmal klargestellt hat, wie die Reihenfolge der Abarbeitung ist (Danke!), wirst du da wohl nochmal nacharbeiten müssen :P ...
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

drhirn

Bei deinem Vorschlag hab ich drei Readings bekommen (id, tC, tF). Zwei davon wollte ich ja nicht.

Beta-User

 ::) Dafür gäbe es dann noch einen Negativ-Filter bzw. ggf. noch ein "^" etc...
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