JSON-Daten einlesen

Ich hatte in einem anderen Beitrag schon einmal über die Möglichkeit gesprochen, Webseiten-Inhalte von Home Assistant zu scrapen. Letztlich ist dies aber für den von mir in diesem konkreten Fall gewünschten Daten-Input nicht wirklich effizient.

Also habe ich die benötigten/gewünschten Daten als JSON bereitgestellt, und lasse diese nun von Home Assistant automatisch einlesen. Der Vorteil von JSON-Daten gegenüber dem Scrapen?

Home Assistant: How to... Kurzanleitungen und Nützliches für Home Assistant!

Zum einen kann man beim JSON-Abruf festlegen, wie regelmäβig die Daten geladen werden sollen. Wenn ich also weiβ, dass sich die Daten maximal einmal pro Stunde ändern werden, reicht es vollkommen, auch nur einmal pro Stunde den JSON-Abruf auszuführen. 

Darüber hinaus ist es natürlich deutlich eleganter strukturierte Daten abzurufen, anstelle den eher als Quick&Dirty zu bezeichnenden Weg des Scrapens zu gehen 😉

Um JSON-Daten in Home Assistant zu nutzen, benötigst du natürlich im JSON-Format bereitgestellte Daten (;)) und folgenden Code:

Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:

Follow Home Assistant
( 571 Followers )
X

Follow Home Assistant

E-mail : *
* Ich stimme der Datenschutzerklärung zu!

Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!

- platform: rest
  authentication: basic
  username: "EIN_USERNAME"
  password: "EIN_PASSWORD"
  scan_interval: 60
  resource: https://link.zu/deiner/json/datei.php
  name: "My Quotes"
  json_attributes:
    - "person"
    - "quote"
- platform: template
  sensors:
    myquote_person:
      friendly_name: "Quote-Person"
      value_template: >-
        {% set invalid_value = 'unavailable' %}
        {% set state = states('sensor.my_quotes') %}
        {% if state != invalid_value %} {{ state_attr('sensor.my_quotes', 'person') }}
        {% else %}Meister Yoda
        {% endif %}
- platform: template
  sensors:
    myquote_quote:
      friendly_name: "Quote-Quote"
      value_template: >-
        {% set invalid_value = 'unavailable' %}
        {% set state = states('sensor.my_quotes') %}
        {% if state != invalid_value %} {{ state_attr('sensor.my_quotes', 'quote') }}
        {% else %}Tu es oder tu es nicht. Es gibt kein Versuchen!
        {% endif %}

In diesem Code habe ich sogar einen Fallback eingebaut, falls die JSON-Daten einmal nicht verfügbar sein sollten, damit der Home Assistant Sensor nicht „unavailable“ ist, sondern einen Dummy-Wert erhält. Inwiefern dies für deinen konkreten Anwendungszweck sinnvoll oder möglich ist, musst du natürlich selbst bewerten!

Du kannst den Code natürlich nach deinem Bedarf anpassen. Die URL musst du auf jeden Fall anpassen. Der Intervall hängt davon ab, wie oft sich die Daten ändern können. 

Ich würde den Abruf nich unnötig oft ausführen lassen, da dies natürlich letztlich wieder Arbeit ist, die Home Assistant verrichten muss. Und unnötige Arbeit sollten wir nun wirklich jedem Ersparen 😉

Dieser Beitrag ist Teil einer kleinen Beitrags-Serie rund um den Home Assistant.

Produktempfehlungen

2 Gedanken zu „JSON-Daten einlesen“

  1. Sorry habe versehent geklickt:

    Hallo Oli,

    könnte ich dich um Hilfe bitten bzgl. Json?

    Ich würde gerne den Beregner in Home Assitant als Bedingung je Regenprognose ein oder ausgeschalten lassen. Dazu stellt der lokale Wetterdienst folgende Abfrage zur Verfügung:

    https://data.civis.bz.it/de/dataset/southtyrolean-weatherservice-weatherdistricts/resource/aaf363af-7dad-423a-a137-662c57fd74b4

    Ich würde folgenden Wert benötigen: $.forecasts[0].rainTo

    sollte der nicht 0 sein dann soll der Beregner nicht einschalten

    könntest du mir helfen das script zu erstellen?

    MfG

    Philipp

    • Hi Philipp,

      hast du denn den Wert bereits als value_template in Home Assistant verfügbar?

      Wenn ja, ist es ja eigentlich nur noch eine simple Automation, die bspw. zu einer fixen Uhrzeit überprüft, ob das value_template > ist (also Kondition) und nur in diesem Fall den Beregner auslöst.

      VG

      Olli

Die Kommentare sind geschlossen.