Seite 1 von 1

HTTP Binding JSON auslesen

Verfasst: 16. Jul 2023 22:22
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.

Re: HTTP Binding JSON auslesen

Verfasst: 17. Jul 2023 04:59
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).

Re: HTTP Binding JSON auslesen

Verfasst: 17. Jul 2023 13:21
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.

Re: HTTP Binding JSON auslesen

Verfasst: 17. Jul 2023 16:48
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"