Zustand ‚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 Automationen genutzt habe. Diese Automationen 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.

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!

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!

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

Produktempfehlungen