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
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.
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?
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...!
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).
$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 ;)
;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 ...
Bei deinem Vorschlag hab ich drei Readings bekommen (id, tC, tF). Zwei davon wollte ich ja nicht.
::) Dafür gäbe es dann noch einen Negativ-Filter bzw. ggf. noch ein "^" etc...