JsonMod Hilfe für komplexe readings

Begonnen von uwirt, 05 August 2024, 11:12:14

Vorheriges Thema - Nächstes Thema

uwirt

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.
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya|EcoWitt

betateilchen

#1
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','-?-')
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

uwirt

#2
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.
FHEM / Ubuntu / fitlet2
HomeMatic: CCU3|HmIP-STHD|HmIP-PCBS|HmIP-PCBS2|HmIP-PCBS-BAT|HM-WDC7000|HM-WDS40|HM-LC-Sw1-FM|HM-LC-RGBW-WM|HM-ES-PMSw1-Pl|HM-ES-TX-WM
NAS: DS218+|DS209j|DS216+II|DS412+
Devices: Panasonic Webcams|Withings|Gardena Smart|Tuya|EcoWitt

rudolfkoenig


betateilchen

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)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Übrigens...

Falsch:

Zitatin hPA umrechnen

Richtig:

Zitatin hPa umrechnen
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!