Home Assistant Template Sensoren
Durch die Hilfe von Home-Assistant Templates können die Daten von verschiedenen Sensoren umgewandelt, kombiniert oder mit eigenen Formeln versehen werden. Templates ermöglichen das Erstellen von Logikblöcken für den Einsatz in eigenen Sensoren, Bedingungen oder für das Anpassen bestimmter Werte in Lovelance Cards. Als Syntax wird Jinja2 verwendet, eine voll funktionsfähigen Template-Engine für Python.
Wo können Templates verwendet werden?
Templates können in den folgenden Home-Assistant-Komponenten eingesetzt werden:
- Entwicklerwerkzeuge / TEMPLATE
- Markdown-Card (Lovelance)
- Template-Sensoren (unter Helfer)
- Automatisierungen
Entwicklerwerkzeuge
Neue Templates lassen sich am einfachsten unter Entwicklerwerkzeuge > TEMPLATE testen.
Wer gleichzeitig mehrere Template-Entwürfe erstellen möchte, kann dazu auch eine Markdown-Card verwenden:
Markdown-Card
Alternativ können Template-Entwürfe auch als Markdown Card in einem Lovelance-Dashboard gespeichert werden:
Wer einen neuen Sensor auf Basis eines Templates erstellen will, kann dies in den Einstellungen unter "Geräte & Diense", "HELFER ERSTELLEN" und "Template":
Template-Sensor: Helfer
Ursprünglich wurden Template-Sensoren in der configuration.yaml-Datei hinterlegt. In aktuellen Home Assistant Versionen können die Templates komfortabel als Helfer in der Home Assistant Oberfläche angelegt werden. Die Helfer zeigen beim Erstellen bereits die berechneten Werte oder eventuelle Syntaxfehler.
Menüpunkt: Einstellungen, Helfer erstellen -> Template:
Zur Auswahl stehen mehrere Optionen. Ich verwende meist entweder einen binären Sensor, also "Ein" und "Aus", oder für bestimmte Werte ein Template für einen Sensor:
Zur Erstellung, siehe auf dieser Seite: Template Beispiele
Automatisierungen
Die angelegten Template-Sensoren könnten in einer Automatisierung verwendet werden, oder alternativ bieten diese die Möglichkeit direkt einen Template-Block in den Auslösern oder Bedingungen zu hinterlegen:
Innerhalb der Automatisierungen können Templates als Auslöser, Bedingung und in den Bedingungen von Aktionen verwendet werden:
siehe auch: Home Assistant Automatisierung - Möglichkeiten & Basics
Template Beispiele
Um die Werte bestimmter Sensoren oder Variablen zu interpretieren, können diese in Jinja2 innerhalb von {{ und }} geschrieben werden. Das Setzen von Variablen kann mit folgender Syntax erfolgen: {% set variable = 1 %}. Auch "if", "else", oder "else if" -Anweisungen können innerhalb von {% und %} interpretiert werden. Das Hinzufügen von Kommentaren ist innerhalb von {# und #} möglich.
Als konkretes Beispiel für einen Template-Sensor könnte aus dem Datum und der Uhrzeit für den nächsten Sonnenaufgang, die Uhrzeit als eigene Entität zur Verfügung gestellt werden. Der integrierte Sensor für den Sonnenaufgang steht in folgendem Format zur Verfügung: 2023-09-12T07:40:21.796007+00:00. Für das Extrahieren der Uhrzeit kann folgendes Template eingesetzt werden:
{{
as_timestamp(states.sun.sun.attributes.next_rising) |
timestamp_custom('%H:%M')
}}
"as_timestamp" wandelt dabei den Wert ("states.") des Sensors "sun.sun.attributes.next_rising" in einen Unix-Timestamp um. Ein Pipe "|" an die Funktion "timestamp_custom" wandelt den Timestamp zurück in "Stunden":"Minuten": '%H:%M'. Wie bereits erwähnt kann das Template in den Entwicklerwerkzeugen getestet werden:
Eingesetzt als Template-Sensor, zeigt auch dieser eine Vorschau des Ergebnisses:
Beim Speichern des Template-Sensors wird ein neuer Sensor mit der ID: sensor.Name, hier "sensor.sonnenaufgang" angelegt und steht als eigene Entität in Home Assistant zur Verfügung.
Template - Cheat Sheet
Hier ein paar Beispiel-Templates:
was | Template |
---|---|
Sonnenaufgang als Text Stunden:Minuten |
|
Sonnenuntergang als Text Stunden:Minuten |
|
Sonne: Sonnenaufgang - Sonnenuntergang als Text |
|
Tageslicht in Stunden pro Tag |
|
Test ob nach Sonnenaufgang |
|
Test ob 180 Minuten nach Sonnenaufgang |
|
Test ob nach Sonnenuntergang |
|
verbleibendes Tageslicht in Stunden |
|
Leistung (Watt) aus Strom (I) und Spannung (U) |
|
Über den Stromverbrauch der Heizungssteuerung - gemessen mit einer Zigbee Steckdose - kann ich feststellen, welche Aktion die Heizung gerade durchführt. |
Der folgende Sensor ändert den Status anhand des Stromverbrauchs der Heizungssteuerung und kann damit z.B. in einer Lovelance-Card als Information eingeblendet werden:
|
Zeit seit der letzten Statusänderung in Minuten länger als x Minuten (im Beispiel 30 Minuten) |
Um festzustellen, wann der Status eines Sensors zuletzt geändert wurde, setze ich für meine Heizung folgendes Template ein.
Das Template prüft, ob die letzte Statusänderung vor mehr als 30 Minuten ("> 30") stattgefunden hat. Ich verwende das Template in den Automatisierungen damit meine Heizung nicht kurz nach dem Einschalten durch eine bestimmte Statusänderung wieder deaktiviert wird.
|
"Nicht Verfügbar"- Wert vorgeben: 0 |
Um die Zahl 0 anstelle von "nicht verfügbar" für eine Entität zu verwenden, kann ein Standardwert, hier "0" für float verwendet werden. Die Variable verwendet den Standardwert, wenn die Umwandlung in float nicht erfolgreich war.
|
Slow-Down-Changes |
|
Vorherigen Wert im Template-Sensor verwenden
Mithilfe des folgenden Templates kann ein Template-Sensor (hier sensor.lastavailablestate) den letzten Wert zurückgeben, der nicht "unavailable" war:
{% if states('sensor.sometimes_unavailable') != 'unavailable'%}
{{ sensor.sometimes_unavailable }}
{% else %}
{{ states('sensor.lastavailablestate') }}
{% endif %}
Home Assistant Schnee-Erkennung PV-Anlage
Bei einer PV-Anlage steigt die Spannung mit der Anzahl der PV-Modulen, auch bei schlechten Lichtverhältnissen. Anders, wenn bestimmte Module teilweise oder komplett von Schnee bedeckt sind. Diese Tatsache habe ich mir zunutze gemacht und in Home Assistant eine Schnee-Erkennung zusammengestellt. Warum? Um die PV-Vorhersage für den nächsten Tag zu korrigieren, und die Steuerung für die Heizung entsprechend anzupassen. ... weiterlesen
{{percentage}} % positiv