FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: drhirn am 20 September 2022, 13:40:55

Titel: [MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: drhirn am 20 September 2022, 13:40:55
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
Titel: Antw:[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: Beta-User am 20 September 2022, 14:01:59
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.
Titel: Antw:[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: drhirn am 20 September 2022, 14:04:36
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?
Titel: Antw:[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: Beta-User am 20 September 2022, 14:07:24
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...!
Titel: Antw:[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: rudolfkoenig am 20 September 2022, 14:56:23
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).
Titel: Antw:[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: drhirn am 20 September 2022, 15:19:40
$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 ;)
Titel: Antw:[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: Beta-User am 20 September 2022, 15:29:28
 ;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 ...
Titel: Antw:[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: drhirn am 20 September 2022, 16:20:40
Bei deinem Vorschlag hab ich drei Readings bekommen (id, tC, tF). Zwei davon wollte ich ja nicht.
Titel: Antw:[MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON
Beitrag von: Beta-User am 20 September 2022, 16:24:05
 ::) Dafür gäbe es dann noch einen Negativ-Filter bzw. ggf. noch ein "^" etc...