HTTP Binding JSON auslesen

Die alternative Firmware für ESP8266 based devices

Moderatoren: seppy, udo1toni

Antworten
adele
Beiträge: 24
Registriert: 17. Aug 2022 01:16
Answers: 0

HTTP Binding JSON auslesen

Beitrag von adele »

Ich habe eine OBI-Funkdose mit einem BME280 und einem BH1750 bestückt und Tasmota zeigt mir auch meine Werte an. Als JSON-Datei bekomme ich

Code: Alles auswählen

{"StatusSNS":{"Time":"2023-07-16T20:25:59","BME280":{"Temperature":27.1,"Humidity":40.0,"DewPoint":12.4,"Pressure":981.7},"BH1750":{"Illuminance":17},"PressureUnit":"hPa","TempUnit":"C"}}
zurück.

Ich habe in OH3 ein Thing angelegt:

Code: Alles auswählen

Thing http:url:steckdose03 "Steckdose03" [
    baseURL="http://10.10.18.3/cm?cmnd=status%2010",
    refresh=60
  ] {
    Channels:
        Type number : temperature "Temperatur"  [ stateTransformation="JSONPATH:$.BME280.Temperature" ]
        Type number : humidity    "Luftfeuchte" [ stateTransformation="JSONPATH:$.BME280.Humidity" ]
        Type number : dewpoint    "Taupunkt"    [ stateTransformation="JSONPATH:$.BME280.DewPoint" ]
        Type number : pressure    "Luftdruck"   [ stateTransformation="JSONPATH:$.BME280.Pressure" ]
        Type number : illuminance "Helligkeit"  [ stateTransformation="JSONPATH:$.BH1750.Illuminance" ]
}
Ich bekomme in der Konsole stets die Fehlermeldung:

Code: Alles auswählen

Creating request for 'http://10.10.18.3/cm?cmnd=status%2010' failed: Conversion = '2'
Die Werte der Kanäle bleiben aber bei NULL. HTTP-Binding und JSONPATH sind installiert. Offenbar lese ich falsch aus.
Vielen Dank für Eure Hilfe.

Benutzeravatar
udo1toni
Beiträge: 13985
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: HTTP Binding JSON auslesen

Beitrag von udo1toni »

Das ist kein Wunder, denn Dein Path ist falsch:

Code: Alles auswählen

{
    "StatusSNS": {
        "Time": "2023-07-16T20:25:59",
        "BME280": {
            "Temperature": 27.1,
            "Humidity": 40.0,
            "DewPoint": 12.4,
            "Pressure": 981.7
        },
        "BH1750": {
            "Illuminance": 17
        },
        "PressureUnit": "hPa",
        "TempUnit": "C"
    }
}
Es gibt hier einen übergeordneten gemeinsamen Knoten "StatusSNS", also eher so:

Code: Alles auswählen

Thing http:url:steckdose03 "Steckdose03" [
    baseURL="http://10.10.18.3/cm?cmnd=status%2010",
    refresh=60
  ] {
    Channels:
        Type number : temperature "Temperatur"  [ stateTransformation="JSONPATH:$.StatusSNS.BME280.Temperature" ]
        Type number : humidity    "Luftfeuchte" [ stateTransformation="JSONPATH:$.StatusSNS.BME280.Humidity" ]
        Type number : dewpoint    "Taupunkt"    [ stateTransformation="JSONPATH:$.StatusSNS.BME280.DewPoint" ]
        Type number : pressure    "Luftdruck"   [ stateTransformation="JSONPATH:$.StatusSNS.BME280.Pressure" ]
        Type number : illuminance "Helligkeit"  [ stateTransformation="JSONPATH:$.StatusSNS.BH1750.Illuminance" ]
}
Tipp: Du kannst bei number Channels noch zusätzlich den Parameter unit setzen, dann landen die Werte gleich mit der korrekten Einheit im passenden Item (das sollte dann natürlich auch als UoM Item angelegt sein, also z.B. Number:Temperature oder Number:Pressure).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

adele
Beiträge: 24
Registriert: 17. Aug 2022 01:16
Answers: 0

Re: HTTP Binding JSON auslesen

Beitrag von adele »

Oh, dass hätte man sehen können :))

Aber, ich werde den Fehler

Code: Alles auswählen

[WARN ] [ttp.internal.http.RefreshingUrlCache] - Creating request for 'http://10.10.18.3/cm?cmnd=status%2010' failed: Conversion = '2'
trotzdem nicht los.

adele
Beiträge: 24
Registriert: 17. Aug 2022 01:16
Answers: 0

Re: HTTP Binding JSON auslesen

Beitrag von adele »

Der Fehler löst sich auf wenn in der URL statt
...%20.... ein + verendet wird.

Code: Alles auswählen

baseURL="http://10.10.18.3/cm?cmnd=status+10"

Antworten