Zum Inhalt springen
HomeStackR
Smart Home Background
Zurück zur Übersicht

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.

7 Min. LesezeitAktualisiert 3. Juni 2026

In 30 Sekunden

Jinja2 ist die Template-Engine von Home Assistant. Mit Templates erstellst du Template-Sensoren, die Werte aus anderen Sensoren berechnen, Template Binary Sensors für komplexe Zustandsbedingungen und Template-Triggers, die auf berechneten Werten basieren. Die wichtigsten Filter: 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.

100+Verfügbare Jinja2-Filter in Home Assistant
3Template-Typen: Sensor, Binary Sensor, Trigger
0Zusätzliche Installation nötig — Jinja2 ist eingebaut

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.
Laptop-Bildschirm mit YAML-Editor, in dem ein Jinja2-Template-Sensor definiert wird
Template-Sensoren werden direkt in der Home Assistant YAML-Konfiguration definiert. · Klicken zum Vergrößern

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 Beispiel moisture für Feuchtigkeitssensoren oder occupancy fü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.

Passende Tools