Autor Thema: [MQTT2_DEVICE] readingList - einzelne Einträge aus verschachteltem JSON  (Gelesen 499 mal)

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1975
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

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19364
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-T620@Debian 11, 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

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1975
Zitat
die 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?

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19364
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-T620@Debian 11, 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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 25831
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).

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1975
$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 ;)

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19364
 ;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-T620@Debian 11, 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

Offline drhirn

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1975
Bei deinem Vorschlag hab ich drei Readings bekommen (id, tC, tF). Zwei davon wollte ich ja nicht.

Offline Beta-User

  • Developer
  • Hero Member
  • ****
  • Beiträge: 19364
 ::) Dafür gäbe es dann noch einen Negativ-Filter bzw. ggf. noch ein "^" etc...
Server: HP-T620@Debian 11, 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

 

decade-submarginal