JSON Daten mit HTTPMOD in FHEM

Begonnen von Steffen@Home, 15 November 2023, 11:44:53

Vorheriges Thema - Nächstes Thema

Steffen@Home

Hallo Zusammen,
ich würde gerne einen JSON-response mit HTTPMOD in FHEM als einzelne Readings bekommen aber ich bekomme keine Readings, was muss ich tun ? Danke!
defmod wetter_station HTTPMOD https://api.weather.com/v2/pws/observations/current?apiKey=XXX&stationId=ISTRINDE5&format=json&units=m 60

Habe die folgenden Attribute hinzugefügt:
getHeader1 Content-Type: application/json
   getHeader2 Accept: */*

Aber mit attr wetter_station extractAllJSONbekomme ich eine Fehlermeldung "attribute value is missing"
...Nachfolgend ein Beispiel.

{
    "observations": [
        {
            "stationID": "ISTRINDE5",
            "obsTimeUtc": "2023-11-15T10:27:41Z",
            "obsTimeLocal": "2023-11-15 11:27:41",
            "neighborhood": "Rindelbach",
            "softwareType": "EasyWeatherV1.2.2",
            "country": "DL",
            "solarRadiation": 162.2,
            "lon": 10.117672,
            "realtimeFrequency": null,
            "epoch": 1700044061,
            "lat": 48.983112,
            "uv": 1,
            "winddir": 278,
            "humidity": 64,
            "qcStatus": 1,
            "metric": {
                "temp": 9,
                "heatIndex": 9,
                "dewpt": 3,
                "windChill": 8,
                "windSpeed": 9,
                "windGust": 13,
                "pressure": 1018.29,
                "precipRate": 0,
                "precipTotal": 2.79,
                "elev": 462
            }
        }
    ]
}
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

MadMax-FHEM

#1
Schon mal in die Attribute von HTTPMOD geschaut?

-> extractAllJSON schon mal gesetzt?

EDIT: mit einem list des HTTPMOD-Devices statt "nur" deiner def-Zeile hätte man gesehen was du schon versucht hast usw. 8)
Siehe https://forum.fhem.de/index.php?topic=71806.0

Evtl. das hier interessant: https://forum.fhem.de/index.php/topic,122508.msg1170713.html#msg1170713

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Steffen@Home

#2
Oh ja stimmt sorry...

Internals:
   BUSY       0
   CFGFN     
   DEF        https://api.weather.com/v2/pws/observations/current?apiKey=XXX&stationId=ISTRINDE5&format=json&units=m 60
   FUUID      6554a5e8-f33f-1cf4-5272-67404436742e0d5b
   Interval   60
   MainURL    https://api.weather.com/v2/pws/observations/current?apiKey=XXX&stationId=ISTRINDE5&format=json&units=m
   ModuleVersion 4.1.16 - 4.4.2023
   NAME       wetter_station
   NOTIFYDEV  global
   NR         225
   NTFY_ORDER 50-wetter_station
   STATE      ???
   TYPE       HTTPMOD
   value     
   HttpUtils:
     NAME       
     addr       https://api.weather.com:443
     auth       0
     buf       
     code       200
     compress   1
     conn       
     data       
     displayurl https://api.weather.com/v2/pws/observations/current?apiKey=XXX&stationId=ISTRINDE5&format=json&units=m
     header     
     host       api.weather.com
     httpheader HTTP/1.0 200 OK
Content-Length: 498
Content-Type: application/json; charset=UTF-8
X-Region: eu-west-1
Strict-Transport-Security: max-age=86400
X-Content-Type-Options: nosniff
Content-Security-Policy: default-src 'none'
X-Trace-Token: 4f9fc8fe-8525-466b-9fc8-fe8525566bef
trace-name: v2includerouter-include-get
Access-Control-Allow-Origin: *
Surrogate-Control: ESI/1.0
Cache-Control: max-age=5
Date: Wed, 15 Nov 2023 11:06:12 GMT
Connection: close
     httpversion 1.0
     hu_blocking 0
     hu_filecount 1
     hu_port    443
     hu_portSfx
     ignoreredirects 1
     loglevel   4
     path       /v2/pws/observations/current?apiKey=XXX&stationId=ISTRINDE5&format=json&units=m
     protocol   https
     redirects  0
     timeout    2
     url        https://api.weather.com/v2/pws/observations/current?apiKey=XXX&stationId=ISTRINDE5&format=json&units=m
     sslargs:
   QUEUE:
   READINGS:
   REQUEST:
     context    reading
     data       
     header     
     ignoreredirects 0
     num        unknown
     retryCount 0
     type       update
     url        https://api.weather.com/v2/pws/observations/current?apiKey=XXX&stationId=ISTRINDE5&format=json&units=m
Attributes:
   getHeader1 Content-Type: application/json
   getHeader2 Accept: */*
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

Steffen@Home

Ich habe nun Attribute angelegt und kann auf den Button "get wetter_station AllValues", aber es passiert nichts.  ::)

attr wetter_station get01JSON ExtractAllJSON
attr wetter_station get01Name AllValues
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

Steffen@Home

Mit den Attributen
attr wetter_station get01JSON observations
attr wetter_station get01Name observations
bekomme ich nun ein Ergebnis, aber so sollte das ja nicht aussehen  :))

Wie bekomme ich das besser sortiert oder nur einzelne Werte von mir aus und nicht den ganzen Inhalt der "observations" -Liste  ???

das geht leider nicht... vermutlich weil observations eine Liste ist  :o
attr wetter_station get01JSON observations_stationID.value
READINGS:
    2023-11-15 13:58:08  observations1-1 DL
    2023-11-15 13:58:08  observations1-10 2.79
    2023-11-15 13:58:08  observations1-11 1018.29
    2023-11-15 13:58:08  observations1-12 9
    2023-11-15 13:58:08  observations1-13 7
    2023-11-15 13:58:08  observations1-14 20
    2023-11-15 13:58:08  observations1-15 14
    2023-11-15 13:58:08  observations1-16 Rindelbach
    2023-11-15 13:58:08  observations1-17 2023-11-15 13:57:49
    2023-11-15 13:58:08  observations1-18 2023-11-15T12:57:49Z
    2023-11-15 13:58:08  observations1-19 1
    2023-11-15 13:58:08  observations1-2 1700053069
    2023-11-15 13:58:08  observations1-20 EasyWeatherV1.2.2
    2023-11-15 13:58:08  observations1-21 59
    2023-11-15 13:58:08  observations1-22 ISTRINDE5
    2023-11-15 13:58:08  observations1-23 0
    2023-11-15 13:58:08  observations1-24 219
    2023-11-15 13:58:08  observations1-3 64
    2023-11-15 13:58:08  observations1-4 48.983112
    2023-11-15 13:58:08  observations1-5 10.117672
    2023-11-15 13:58:08  observations1-6 3
    2023-11-15 13:58:08  observations1-7 462
    2023-11-15 13:58:08  observations1-8 9
    2023-11-15 13:58:08  observations1-9 0
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

MadMax-FHEM

Noch mal:

-> extractAllJSON schon mal gesetzt?

Ich habe das mal auf 2 gesetzt und ein "reread" angestossen.
Dann erhalte ich Readings und die zugehörigen Attribute.

So wie ich das gelesen habe/verstehe, dann einfach mit den angelegten Attributen "spielen", bis es "gefällt".
(also löschen, Readings umbenennen usw.)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Steffen@Home

wie setzt man das ?

Alles was ich bisher versucht habe ging dann total in die Hose und es kommt gar nichts mehr.
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

MadMax-FHEM

Zitat von: Steffen@Home am 15 November 2023, 14:48:45wie setzt man das ?
Hä, naja wie man eben ein Attribut setzt.

Entweder direkt in FHEMWEB-cmd Fenster:

attr wetter_station extractAllJSON 2

Oder in der Detailansicht "unter" dem Device in der "Attributauswahlliste" (DropDown) eben extractAllJSON wählen und dann dahinter aus der DropDown 2, vorne auf "attr" klicken (-> rotes Fragezeichen erscheint) und dann auf save, fertig...

Vorher halt alles löschen, also zumindest alle Attribute...

Oder mal ein neues Device anlegen (einfach deine defmod vom ersten Post -> Name des Devices ändern) und dort dann das Attribut setzen.
Dann beim Device (DropDown) set reread und warten (also Browser refresh), nicht wundern, da kommt dann (auch) das rote Fragezeichen, es werden ja autom. Attribute angelegt...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

betateilchen

#8
Warum eigentlich HTTPMOD und nicht JsonMod, wenn die Daten eh in json kommen?

defmod jtest JsonMod https://api.weather.com/v2/pws/observations/current?apiKey=entfernt&stationId=ISTRINDE5&format=json&units=m
attr jtest readingList complete()
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

#9
Zitat... oder nur einzelne Werte von mir aus und nicht den ganzen Inhalt der "observations" -Liste

Mit JsonMod hier ein Beispiel nur einen bestimmten Wert zu erhalten:

defmod jm_test JsonMod https://api.weather.com/v2/pws/observations/current?apiKey=xxx&stationId=ISTRINDE5&format=json&units=m
attr jm_test readingList single(jsonPath('$.observations.0.humidity'),'humidity','n/a')

setstate jm_test 2023-11-15 14:10:01 humidity 64

Steffen@Home

Super! Mit JSONMOD hats geklappt danke! ;)
Pi 1 - FHEM, HM-MOD-RPI-PCB, HM-RT-CC-DN, HM-WDS10-TH-O, HM-Sec-SCo, HM-LC-Sw1PBU-FM, Relais Platine für ext. Ansteuerung, LD382 Wifi LED Controller, DHT
Pi 2 - Kamera, DHT
Pi 3 - FHEM2, Grafana, DHT, Magnet-Sensoren, Relais-Platine

betateilchen

Kaum macht man's richtig, schon klappts...

Nimm mal bitte Deine API keys aus Deinen Beiträgen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!