Web-Api als Json auslesen

Hallo.
ich versuche, mit Scrape eine Web-API von Wunderground auszulesen, weil die Integration in HA wohl nicht mehr unterstützt wird.
Das zurück gegebene JSOn sieht so aus:

{"observations":[{"stationID":"ILANDS105","obsTimeUtc":"2024-03-02T13:16:18Z","obsTimeLocal":"2024-03-02 14:16:18","neighborhood":"Achdorf","softwareType":null,"country":"DE","solarRadiation":null,"lon":12.153,"realtimeFrequency":null,"epoch":1709385378,"lat":48.523,"uv":null,"winddir":292,"humidity":85,"qcStatus":1,"metric":{"temp":10,"heatIndex":10,"dewpt":7,"windChill":10,"windSpeed":0,"windGust":0,"pressure":996.95,"precipRate":0.00,"precipTotal":1.02,"elev":450}}]}

Ich dazu nach Anleitung Scrape installiert und folgende Zeilen in configuration.yaml eingefügt.

sensor:
  - platform: scrape
    resource: https://api.weather.com/v2/pws/observations/current?stationId=ILANDS105&format=json&units=m&apiKey=XXXXX
    select: "#\/observations\/0\/metric\/temp > td:nth-child(2) > span:nth-child(1) > span:nth-child(1)"

Den API-Key habe ich heraus genommen.
Nach der Video-Anleitung habe ich den CSS-Selector verwendet und den Wert in die select-Anweisung kopiert.
Leider bekomme ich als Wert nur “Unknown” zurück.
Ich habe den Code auch in das Template eingefügt.

Hat jemand einen Tipp für mich?

Guck dir mal die Dokumentation zu Scrape an, das ist anders aufgebaut.

scrape:
  - resource: https://api.weather.com/v2/pws/observations/current?stationId=ILANDS105&format=json&units=m&apiKey=XXXXX
    sensor:
      - name: "Wetter"
        select: "#\/observations\/0\/metric\/temp > td:nth-child(2) > span:nth-child(1) > span:nth-child(1)"

aber den JSON path musst du im value_template: wählen.

value_template: "{{ value['observations'][0]['metric']['temp'] }}"
oder
value_template: "{{ value_json['observations'][0]['metric']['temp'] }}"

so oder so ähnlich müsste das aussehen.

LG
Tobi

Hallo Tobi.
Danke für Deine rasche Antwort.
Ich habe nun folgenden Code:

scrape:
- resource: https://api.weather.com/v2/pws/observations/current?stationId=ILANDS105&format=json&units=m&apiKey=XXX
  sensor:
      - name: "Aussen-Temperatur"
        select: "#\/observations\/0\/metric\/temp > td:nth-child(2) > span:nth-child(1) > span:nth-child(1)"
        value_template: "{{ value_json['observations'][0]['metric']['temp'] }}"

Das erzeugt beim Ausprobieren im Template einen Fehler: “UndefinedError: ‘value_json’ is undefined”
Und das bei beiden Varianten Deiner Lösung.
In den Entitäten taucht auch kein Wert auf.

Ich glaube Scrape ist dafür nicht das richtige, wenn ich da länger drüber nachdenke.
Scrape ist dazu da Sachen von einer Website zu holen, aber du hast da ja nur JSON Code?
Probiere mal REST

rest:
  - scan_interval: 60
    resource: https://api.weather.com/v2/pws/observations/current?stationId=ILANDS105&format=json&units=m&apiKey=XXX
    sensor:
      - name: "Aussen-Temperatur"
        value_template: "{{ value_json['observations'][0]['metric']['temp'] }}"
      - name: "Luftfeuchtigkeit"
        value_template: "{{ value_json['observations'][0]['humidity'] }}"

Ich weiß nicht ob du ein Limit in den anfragen hast vielleicht musst du den scan_interval anpassen

LG
Tobi

Hallo Tobi.
Voltreffer :sweat_smile:
Herzlichen Dank.
Damit kann ich weiter arbeiten.
LG und schönen Abend
Uli

1 „Gefällt mir“