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 extractAllJSON
bekomme 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
}
}
]
}
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
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: */*
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
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
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
wie setzt man das ?
Alles was ich bisher versucht habe ging dann total in die Hose und es kommt gar nichts mehr.
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
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()
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
Super! Mit JSONMOD hats geklappt danke! ;)
Kaum macht man's richtig, schon klappts...
Nimm mal bitte Deine API keys aus Deinen Beiträgen.