FHEM Forum

FHEM => Automatisierung => Thema gestartet von: uwirt am 05 August 2024, 11:12:14

Titel: JsonMod Hilfe für komplexe readings
Beitrag von: uwirt am 05 August 2024, 11:12:14
Hallo - ich versuche aus einer API-Abfrage mittels JsonMod die Readings auszulesen (und wenn möglich dann auch noch von °F auf °C umzurechnen).

Das Json-File schaut wie folgt aus:
{"code":0,"msg":"success","time":"1722848586","data":{"outdoor":{"temperature":{"time":"1722848551","unit":"ºF","value":"66.4"},"feels_like":{"time":"1722848551","unit":"ºF","value":"66.4"},"app_temp":{"time":"1722848551","unit":"ºF","value":"65.0"},"dew_point":{"time":"1722848551","unit":"ºF","value":"57.1"},"humidity":{"time":"1722848551","unit":"%","value":"72"}},"indoor":{"temperature":{"time":"1722848551","unit":"ºF","value":"83.5"},"humidity":{"time":"1722848551","unit":"%","value":"32"}},"solar_and_uvi":{"solar":{"time":"1722848551","unit":"W\/m²","value":"138.4"},"uvi":{"time":"1722848551","unit":"","value":"1"}},"rainfall_piezo":{"rain_rate":{"time":"1722848551","unit":"in\/hr","value":"0.00"},"daily":{"time":"1722848551","unit":"in","value":"0.00"},"event":{"time":"1722848551","unit":"in","value":"0.00"},"hourly":{"time":"1722848551","unit":"in","value":"0.00"},"weekly":{"time":"1722848551","unit":"in","value":"0.00"},"monthly":{"time":"1722848551","unit":"in","value":"0.00"},"yearly":{"time":"1722848551","unit":"in","value":"0.00"}},"wind":{"wind_speed":{"time":"1722848551","unit":"mph","value":"6.5"},"wind_gust":{"time":"1722848551","unit":"mph","value":"7.8"},"wind_direction":{"time":"1722848551","unit":"º","value":"39"}},"pressure":{"relative":{"time":"1722848551","unit":"inHg","value":"25.83"},"absolute":{"time":"1722848551","unit":"inHg","value":"25.83"}},"lightning":{"count":{"time":"1722848551","unit":"","value":"0"}},"co2_aqi_combo":{"co2":{"time":"1722848551","unit":"ppm","value":"875"},"24_hours_average":{"time":"1722848551","unit":"ppm","value":"752"}},"pm25_aqi_combo":{"real_time_aqi":{"time":"1722848551","unit":"µg\/m³","value":"14"},"pm25":{"time":"1722848551","unit":"µg\/m³","value":"3"},"24_hours_aqi":{"time":"1722848551","unit":"µg\/m³","value":"12"}},"pm10_aqi_combo":{"real_time_aqi":{"time":"1722848551","unit":"µg\/m³","value":"3"},"pm10":{"time":"1722848551","unit":"µg\/m³","value":"3"},"24_hours_aqi":{"time":"1722848551","unit":"µg\/m³","value":"3"}},"pm1_aqi_combo":{"real_time_aqi":{"time":"1722848551","unit":"µg\/m³","value":"13"},"pm1":{"time":"1722848551","unit":"µg\/m³","value":"3"},"24_hours_aqi":{"time":"1722848551","unit":"µg\/m³","value":"11"}},"pm4_aqi_combo":{"real_time_aqi":{"time":"1722848551","unit":"µg\/m³","value":"14"},"pm4":{"time":"1722848551","unit":"µg\/m³","value":"3"},"24_hours_aqi":{"time":"1722848551","unit":"µg\/m³","value":"13"}},"t_rh_aqi_combo":{"temperature":{"time":"1722848551","unit":"ºF","value":"66.6"},"humidity":{"time":"1722848551","unit":"%","value":"63"}},"leaf_ch1":{"leaf_wetness":{"time":"1722848551","unit":"%","value":"0"}},"battery":{"haptic_array_battery":{"time":"1722848551","unit":"V","value":"3.20"},"haptic_array_capacitor":{"time":"1722848551","unit":"V","value":"5.3"},"lightning_sensor":{"time":"1722848551","unit":"","value":"5"},"aqi_combo_sensor":{"time":"1722848551","unit":"","value":"6"},"leaf_wetness_sensor_ch1":{"time":"1722848551","unit":"V","value":"1.62"}}}}
Ich hätte davon gerne als erstes den Wert für outdoor temperature: 66.4 (den ich dann in °C umrechnen möchte)

Mein attr readingList bisher:
attr ecowitt readingList single(jsonPath('$.[temperature].[value]'), 'value', '-?-');funktionierte leider nicht.
Titel: Aw: JsonMod Hilfe für komplexe readings
Beitrag von: betateilchen am 05 August 2024, 12:11:00
ZitatJsonMod Hilfe für komplexe readings

Was ist denn daran bitteschön "komplex"?
Einfacher als in diesem Fall geht es doch kaum noch,

{"code":0,"msg":"success","time":"1722848586","data":{"outdoor":{"temperature":{"time":"1722848551","unit":"ºF","value":"66.4"}

man braucht nur abzuschreiben:



readingList single (jsonPath('$.data.outdoor.temperature.value'),'value','-?-')

Und mit Konvertierung wird es auch nicht viel komplexer...

readingList single (round((jsonPath('$.data.outdoor.temperature.value')-32)*5/9,1),'value','-?-')
Titel: Aw: JsonMod Hilfe für komplexe readings
Beitrag von: uwirt am 07 August 2024, 12:06:31
Besten Dank - es funktioniert.

Nur noch eine weitere (nicht-komplexe) Frage zur Umrechnung:

Ich möchte dem Luftdruck von inHg in hPA umrechnen.

Das hier:
readingList single (round(jsonPath('$.data.pressure.absolute.value')*33,8638815789),'hPA','-?-')
geht so leider nicht.
Titel: Aw: JsonMod Hilfe für komplexe readings
Beitrag von: rudolfkoenig am 07 August 2024, 12:12:25
33,8638815789 => 33.8638815789
Titel: Aw: JsonMod Hilfe für komplexe readings
Beitrag von: betateilchen am 08 August 2024, 18:17:50
Zitat von: uwirt am 07 August 2024, 12:06:31geht so leider nicht.

das ist eine ziemlich unsinnige wenig hilfreiche Problembeschreibung...
Was genau funktioniert denn nicht?

Hast Du eigentlich verstanden, was Dein Funktionsaufruf:

round( jsonPath('$.data.pressure.absolute.value')*33,8638815789 )
bewirkt bzw. tut?
Du gibst darin an, dass der aus jsonPath() ermittelte Wert mit 33 multipliziert werden soll.
Danach soll das Ergebnis auf 8638815789 Nachkommastellen gerundet werden...  8)
Titel: Aw: JsonMod Hilfe für komplexe readings
Beitrag von: betateilchen am 08 August 2024, 20:52:54
Übrigens...

Falsch:

Zitatin hPA umrechnen

Richtig:

Zitatin hPa umrechnen