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.
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
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!
Produktempfehlungen