Home Assistant Anleitung how to… ‚unavailable‘ bei Sensor-Templates vermeiden

Wer mit Sensor-Templates arbeitet und hierbei auf Daten externer Anbieter zurückgreift (also beispielsweise per Scrape oder REST-Api ermittelte Daten), wir das Problem kennen, dass diese externen Daten punktuell nicht zur Verfügung stehen werden und einem dann das Sensor-Template „zerschießen“.

Statt 1,499€ für den aktuellen Spritpreis, steht dann dort „unavailable“. Dieses unavailable bleibt dann leider so lange bestehen, bis die Daten über die externe Quelle wieder erfolgreich ermittelt werden konnten.

Relativ lange hatte ich mit diesem Problem bei diversen Sensor-Templates zu tun. Ärgerlich war dies für mich immer dann, wenn ich einen dieser Sensoren in Automatisierungen genutzt habe. Diese Automatisierungen liefen dann „amok“, da „unavailable“ oder eben der erste valide Wert nach unavailable den Trigger der Automation auslösen konnte.

Relativ lange habe ich versucht, dies über die Automation, also durch Hinzufügen von Konditionen [Home Assistant: Conditions] irgendwie einzufangen oder zu verhindern. Alle meine Versuche blieben jedoch ohne Erfolg und diverse Automations feuerten immer wieder ihre Action ab, obwohl dies eigentlich nicht gewollt war.

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

Leider viel zu spät erst kam ich auf die Idee, das Problem bereits beim entstehen des Wertes „unavailable“ zu lösen, also in meinen Sensor-Templates beim zuweisen des aktuellen Wertes hierauf zu prüfen.

Anhand des folgenden kleinen Code-Beispiels möchte ich dir zeigen, wie dies mit entsprechenden If-Abfragen und einem kleinen „Trick“ geht, so dass es kein „unavailable“ mehr als Sensor-Wert geben sollte:

- platform: template
  sensors:
    dhl_pin_json:
      friendly_name: "DHL-PIN"
      value_template: >-
        {% set invalid_value = 'unavailable' %}
        {% set state = states('sensor.dhl_json') %}
        {% if state != invalid_value %} 
            {{ state_attr('sensor.dhl_json', 'DHL_PIN') }}
        {% else %}
            {{ states('sensor.dhl_pin_json') }} 
        {% endif %}

Das Code-Beispiel stammt aus meiner Script für die Darstellung der aktuellen DHL Packstation PIN in Home Assistant. Ich lese die DHL-Emails aus, extrahiere die PIN, schreibe diese in eine Datenbank und erzeuge hieraus einen JSON-Datensatz, welcher von Home Assistant „übernommen“ wird.

Dieser JSON-Datensatz beinhaltet die aktuelle PIN, sowie den Timestamp der E-Mail, mit welcher ich die PIN erhalten habe.

Mein Code oben beschreibt nun, wie ich den Sensor „sensor.dhl_pin_json“ über ein Sensor-Template „befülle“. Hierfür prüfe ich, ob der Sensor „sensor.dhl_json“, welcher die kompletten Daten/Attribute des JSON-Aufrufs beinhaltet, nicht den Wert „unavailable“ hat.

Ist also sensor.dhl_json ungleich unavailable, fülle ich den Sensor sensor.dhl_pin_json mit dem Attribut DHL_PIN des Sensors sensor.dhl_json.

Anderenfalls weise ich dem Sensor sensor.dhl_pin_json seinen eigenen Wert zu – also den letzten gültigen Wert!

Sofern es also einmalig einen validen Wert (ungleich unavailable) für meinen Sensor sensor.dhl_pin_json gegeben hat, sollte dieser nicht mehr auf unavailable gesetzt werden – selbst, wenn der JSON-Aufruf tatsächlich nicht erfolgreich gewesen ist!

Hierbei handelt es sich um einen von mir so genannten Quicktipp. In dieser kleinen „Home Assistant how-to“ Reihe, gebe ich hilfreiche Tipps und Tricks, welche mir die Arbeit mit Home Assistant vereinfachen und deswegen vielleicht auch für dich hilfreich sein können!

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

AngebotBestseller Nr. 1
Echo Dot (3. Gen.) Intelligenter Lautsprecher mit Alexa,...*
  • Unser beliebtester smarter Lautsprecher – Jetzt mit neuem...
  • Steuern Sie die Musikwiedergabe per Sprachbefehl – Streamen Sie...

*= Preis inkl. MwSt., ggf. zzgl. Versandkosten. Letzte Aktualisierung vor 60 Minuten / Affiliate Links / Bilder von der Amazon Product Advertising API. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen.

Schreibe einen Kommentar

Die folgenden im Rahmen der DSGVO notwendigen Bedingungen müssen gelesen und akzeptiert werden:
Durch Abschicken des Formulares wird dein Name, E-Mail-Adresse und eingegebene Text in der Datenbank gespeichert. Für weitere Informationen wirf bitte einen Blick in die Datenschutzerklärung.