
Stufe 3 · Kapitel 13 von 14
Jinja2 Templates in Home Assistant
Templates sind der Schlüssel zu dynamischen Automatisierungen: Werte berechnen, Strings verketten, Bedingungen prüfen — alles direkt in Home Assistant, ohne externe Skripte.
In 30 Sekunden
float, int, round, float(0) für sichere Fallback-Werte.Was ist Jinja2 und warum braucht man es im Smart Home?
Jinja2 ist eine Template-Engine, die ursprünglich für das Python-Webframework Flask entwickelt wurde. Home Assistant nutzt sie als eingebettete Sprache, um dynamische Werte zu berechnen. Statt einen Sensor nur abzufragen, kannst du mit Jinja2 seinen Wert umrechnen, mit anderen Werten kombinieren oder als Bedingung in Automatisierungen verwenden. Ohne Jinja2 wärst du auf die rohen Sensorwerte beschränkt — mit Jinja2 werden diese Werte zu flexiblen Bausteinen.
Template-Sensoren: Werte berechnen
Ein Template-Sensor nimmt den Wert eines oder mehrerer anderer Sensoren und berechnet daraus einen neuen Wert. Das geht von einfachen Umrechnungen (Fahrenheit zu Celsius) bis zu komplexen Formeln, die mehrere Datenquellen kombinieren.
Grundstruktur
Ein Template-Sensor benötigt mindestens zwei Attribute: den state-Wert (das Jinja2-Template, das den Sensorwert berechnet) und optional unit_of_measurementfür die Einheit. Das Template wird in geschweiften Klammern mit Prozentzeichen geschrieben: {{ }}. Du kannst auf jeden Zustand im System zugreifen, indem dustates('sensor.aussentemperatur') verwendest.
Praktisches Beispiel: Taupunkt berechnen
Der Taupunkt ist die Temperatur, bei der Luftfeuchtigkeit kondensiert — wichtig für Schimmelprävention. Du hast einen Temperatur- und einen Feuchtigkeitssensor, aber keinen Taupunkt-Sensor. Mit einem Template-Sensor berechnest du den Taupunkt nach der Magnus-Formel: Du liest Temperatur und Luftfeuchte, wendest die Formel im Template an und erhältst einen neuen Sensor sensor.taupunkt_badezimmer, den du wie jeden anderen Sensor verwenden kannst — in Dashboards, Automatisierungen und Benachrichtigungen.
Praktisches Beispiel: Stromkosten berechnen
Wenn du einen Stromzähler-Sensor hast, der den Verbrauch in kWh anzeigt, und deinen Strompreis kennst (z.B. 0,32 Euro/kWh), erstellst du einen Template-Sensor, der die laufenden Kosten in Euro berechnet. Das Template multipliziert den Zählerwert mit dem Preis und rundet auf zwei Nachkommastellen. So siehst du im Dashboard direkt, was dein Smart Home an Strom kostet — nicht nur, wie viel es verbraucht.
Pro-Tipp
Teste deine Templates immer im Entwicklerwerkzeug unter "Template", bevor du sie in die Konfiguration schreibst. Dort kannst du Templates in Echtzeit ausprobieren und sofort sehen, ob das Ergebnis stimmt — ohne Home Assistant neu zu starten.

Die wichtigsten Filter: float, int, round und mehr
Filter sind das Werkzeug, um Werte zu transformieren. Sie werden mit dem Pipe-Symbol (|) angewendet und können verkettet werden. Hier sind die Filter, die du am häufigsten brauchst:
float und int — Sichere Typumwandlung
Home Assistant speichert alle Zustände als Strings. Wenn du mit einem Sensorwert rechnest, musst du ihn zuerst in eine Zahl umwandeln.| floatwandelt in eine Kommazahl um, | intin eine Ganzzahl. Der Clou: Du kannst einen Fallback-Wert übergeben — | float(0)liefert 0, wenn der Sensorwert nicht umgewandelt werden kann (z.B. weil der Sensor "unavailable" meldet). Ohne Fallback würde das Template fehlschlagen und die gesamte Automatisierung stoppen.
round — Dezimalstellen kontrollieren
Sensoren liefern oft mehr Nachkommastellen als nötig.| round(1)rundet auf eine Nachkommastelle, | round(0)auf eine ganze Zahl. Das ist sinnvoll, wenn der Wert im Dashboard angezeigt wird oder als Trigger-Schwelle dient — niemand braucht 21.437291 Grad als Sollwert.
Weitere nützliche Filter
- default('Wert'): Liefert einen Standardwert, wenn der Ausdruck undefined oder none ist. Ideal als Sicherheitsnetz.
- string: Wandelt einen Zahlenwert explizit in einen String um.
- trim: Entfernt führende und abschließende Leerzeichen.
- replace('alt', 'neu'): Ersetzt Zeichenfolgen innerhalb eines Strings.
- regex_replace: Ersetzt mit regulären Ausdrücken — mächtig, aber komplexer.
- multiply(X): Multipliziert den Wert mit X — praktisch für Einheitenumrechnungen.
Wusstest du schon?
Du kannst Filter verketten:{{ states('sensor.temp') | float(0) | round(1) }}wandelt zuerst sicher in eine Zahl (mit Fallback 0) und rundet dann auf eine Nachkommastelle. Die Reihenfolge ist entscheidend — immer zuerst float, dann round, nie umgekehrt.
Template Binary Sensors: Komplexe Zustände erkennen
Ein Template Binary Sensor hat nur zwei Zustände: on oder off. Er eignet sich für Ja-Nein-Entscheidungen, die von mehreren Bedingungen abhängen. Im Gegensatz zu einem normalen Sensor definierst du nicht den Wert, sondern die Bedingung, unter der der Sensor "on" wird.
Beispiel: Schimmelgefahr erkannt
Schimmel entsteht, wenn die relative Luftfeuchtigkeit lange Zeit über 65 % liegt UND die Raumtemperatur unter dem Taupunkt liegt. Du definierst einen Template Binary Sensor, der "on" wird, wenn beide Bedingungen gleichzeitig erfüllt sind. Dieser Sensor kann dann eine Benachrichtigung auslösen ("Lüften!") oder automatisch die Lüftungsanlage aktivieren. Die Logik wäre: Wenn Luftfeuchtigkeit größer als 65 % UND Taupunkt größer als Raumtemperatur minus 3 Grad, dann Schimmelgefahr.
Beispiel: Jemand ist nachts unterwegs
Du kombinierst einen Bewegungsmelder, die Uhrzeit und den Anwesenheitsstatus: Wenn der Bewegungsmelder aktiv ist UND es zwischen 23:00 und 06:00 Uhr ist UND jemand zu Hause ist, dann ist jemand nachts unterwegs. Das kann genutzt werden, um automatisch ein Nachtlicht mit Dimmstufe zu aktivieren oder eine Benachrichtigung zu senden, wenn niemand zu Hause sein sollte (mögliche Einbruch-Situation).
Pro-Tipp
Gib deinem Template Binary Sensor immer ein aussagekräftiges device_class-Attribut — zum Beispielmoisturefür Feuchtigkeitssensoren oderoccupancyfür Anwesenheitssensoren. Das sorgt für die richtigen Icons und Farbcodierungen im Dashboard.
Template-Triggers: Automatisierungen auf berechneten Werten
Template-Triggers erweitern die Trigger-Möglichkeiten von Automatisierungen erheblich. Während normale State-Trigger auf einen einzelnen Sensorwert reagieren, kann ein Template-Trigger eine beliebige Jinja2-Bedingung als Trigger verwenden. Das Template wird bei jeder Zustandsänderung ausgewertet — wenn sich das Ergebnis von false auf true ändert, wird die Automatisierung ausgelöst.
Beispiel: Energiepreis unter Schwellenwert
Du hast einen dynamischen Energiepreis-Sensor und willst die Waschmaschine starten, wenn der Preis unter 0,25 Euro/kWh fällt. Ein Template-Trigger prüft den Preis und löst die Automatisierung aus, wenn der Schwellenwert unterschritten wird. So nutzt du günstige Strompreisspitzen automatisch — ohne manuell den Preis zu beobachten.
Beispiel: Komfort-Schwelle überschritten
Du berechnest einen Komfort-Index aus Temperatur, Luftfeuchtigkeit und CO2-Gehalt. Wenn der Index einen bestimmten Wert unterschreitet, wird ein Template-Trigger aktiv und startet automatisch die Lüftung. Der Clou: Die Automatisierung reagiert auf einen berechneten Wert, nicht auf einzelne Sensoren — die Logik steckt im Template, nicht in der Automation.
Wusstest du schon?
Template-Triggers werden bei jeder Zustandsänderung **aller referenzierten Entitäten** neu ausgewertet. Wenn dein Template drei Sensoren referenziert, wird es ausgewertet, sobald sich einer der drei ändert. Das bedeutet: Du musst keinen bestimmten Trigger-Sensor angeben — das System ermittelt die Abhängigkeiten automatisch.
Nützliche Template-Snippets
Hier sind einige bewährte Snippets, die du direkt in deine Konfiguration übernehmen kannst:
Sonnenstand-basierte Beschattung
Verwende den Sun-Sensor, um zu berechnen, ob die Sonne durch ein bestimmtes Fenster scheint. Du kombinierst die Elevation (Höhenwinkel) mit dem Azimuth (Seitwinkel) und den Fensterorientierung deines Hauses. Wenn die Elevation über 20 Grad und der Azimut im Bereich des Südfensters liegt, wird die Jalousie automatisch heruntergefahren. So vermeidest du unnötige Aufheizung im Sommer.
Batterieladezustand überwachen
Ein Template-Sensor, der alle Batteriesensoren durchläuft und die Anzahl der Geräte mit unter 20 % Ladung zählt. Das nutzt die states-Funktion, um alle Entitäten eines bestimmten Musters zu durchsuchen, und selectattr, um nur diejenigen zu filtern, deren Wert unter dem Schwellenwert liegt. Das Ergebnis ist eine einzelne Zahl, die im Dashboard angezeigt oder als Trigger für eine Benachrichtigung genutzt werden kann.
Zeitdifferenz berechnen
Wie lange ist das Fenster schon offen? Mit state_attr und dem Attribut "last_changed" berechnest du die Zeitdifferenz zum aktuellen Zeitpunkt. Das Template liefert die Dauer in Minuten, die du in einer Automatisierung verwendest: "Wenn Fenster länger als 30 Minuten offen, sende Erinnerung."
Pro-Tipp
Komplexe Templates auslagern: Wenn ein Template mehr als 5-6 Zeilen hat, definiere es als Template-Sensor und referenziere den Sensor in der Automatisierung. Das macht die YAML-Dateien lesbarer und den Template-Sensor im Dashboard sichtbar — was das Debugging deutlich erleichtert.