Hauptmenü

Frage HTTPMOD und JSON

Begonnen von Stonemuc, 01 August 2025, 16:17:55

Vorheriges Thema - Nächstes Thema

Stonemuc

Ich möchte die zwei Werte meines Poolthermometers per HTTPMOD JSON abgreifen, verstehe aber überhaupt nichts im Wiki....nur Bahnhof.
Könnte mir einer mal Tipps dazu geben? Wie muss ich mein Device definieren, dass er mir den Wert der Garage mit 22.9 und den Wert Pool mit 20.3 ausgibt?
Ich hab es so versucht..geht aber nicht.

defmod Pooltemperatur HTTPMOD http://192.168.2.157/api 120
attr Pooltemperatur reading01JSON Garage
attr Pooltemperatur reading01Name Temperatur_Garage
attr Pooltemperatur reading02JSON Pool
attr Pooltemperatur reading02Name Temperatur_Pool



Das sind die Rohdaten:

{
  "systemname": "Temperatursensor",
  "secure_counter": 2124,
  "firmware": "2.3.06-b",
  "sensors": [
    {
      "name": "Garage",
      "value": 22.9375,
      "mean-1": {
        "value": 22.95417,
        "count": 60,
        "period": 3600
      },
      "mean-24": {
        "value": "NaN",
        "count": 0,
        "period": 86400
      },
      "unit": "Celsius",
      "time": "Fri Aug  1 16:00:42 2025"
    },
    {
      "name": "Pool",
      "value": 20.375,
      "unit": "Celsius",
      "time": "Fri Aug  1 16:00:42 2025"
    }
  ]
}

FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

TomLee

#1
Hallo,

würd das mit JsonMod angehen und für jede Temperatur ein Device anlegen:

defmod jm_garage JsonMod http://192.168.2.157/api
attr jm_garage readingList single(jsonPath('$.sensors.0.mean-1.value'), 'temperature', -99)

setstate jm_t1 2025-08-01 17:52:55 .computedReadings temperature
setstate jm_t1 2025-08-01 17:52:55 temperature 22.95417
defmod jm_pool JsonMod http://192.168.2.157/api
attr jm_pool readingList single(jsonPath('$.sensors.1.value'), 'temperature', -99)

setstate jm_t 2025-08-01 17:24:54 .computedReadings temperature
setstate jm_t 2025-08-01 17:24:54 temperature 20.375

Sieht kompliziert aus, ist es aber gar nicht. Zum nachvollziehen kannst Dir mal alle Readings anlegen lassen, mit complete() in readingList.

defmod jm_all JsonMod http://192.168.2.157/api
attr jm_all readingList complete()

Gruß Thomas

betateilchen

Die defmod sind beide falsch, entweder JsonMod oder HTTPMOD.

Zitat von: TomLee am 01 August 2025, 17:35:57defmod jm_garage JsonMod HTTPMOD http://192.168.2.157/api

Und warum man dafür zwei devices brauchen soll, habe ich nicht verstanden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Sry, kam daher das ich das selbst mit file nachvollzogen und die IP (mit HTTPMOD) aus der Definition im ersten Post kopiert und im Nachhinein in meine Definitionen eingefügt hatte.

In weiser Voraussicht dacht ich mir zwei Devices machen sich besser, sollte eine Sprachsteuerung im Einsatz sein.

TomLee

Zitat von: betateilchen am 01 August 2025, 17:51:01...

Und warum man dafür zwei devices brauchen soll, habe ich nicht verstanden.

Welche Readingnamen würdest Du denn für zwei Temperaturen in einem Device wählen?

Bei mir (mein ich) sind das unabhängig von der Sprachsteuerung immer temperature-Readings.

Stonemuc

Danke für die Hinweise und Vorschläge....aber irgendwie geht es mit meiner kuriosen Methode jetzt doch irgendwie.

defmod Pooltemperatur HTTPMOD http://192.168.2.157/api 120
attr Pooltemperatur extractAllJSON 1
attr Pooltemperatur reading01JSON Garage
attr Pooltemperatur reading01Name Temperatur_Garage
attr Pooltemperatur reading02JSON Pool
attr Pooltemperatur reading02Name Temperatur_Pool

setstate Pooltemperatur 2025-08-01 19:42:09 firmware 2.3.06-b
setstate Pooltemperatur 2025-08-01 19:42:09 secure_counter 4781
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_mean-1_count 60
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_mean-1_period 3600
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_mean-1_value 25.07292
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_mean-24_count 0
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_mean-24_period 86400
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_mean-24_value NaN
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_name Garage
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_time Fri Aug  1 19:42:07 2025
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_unit Celsius
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_01_value 25.125
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_02_name Pool
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_02_time Fri Aug  1 19:42:07 2025
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_02_unit Celsius
setstate Pooltemperatur 2025-08-01 19:42:09 sensors_02_value 20.25
setstate Pooltemperatur 2025-08-01 19:42:09 systemname Temperatursensor


Ich werde aber die Variante von TomLee benutzen...
FHEM aus Raspberry PI 3 B+, Haussteuerung auf EnOcean Basis, Tecalor THZ 404eco Wärmepumpe

TomLee

#6
Zitat von: betateilchen am 01 August 2025, 17:51:01...
Und warum man dafür zwei devices brauchen soll, habe ich nicht verstanden.

Gegenargumente?

Oder gar Verbesserungsvorschläge?