Zum Inhalt springen

HomeStackR
Zurück zur Übersicht

Profi · 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.

Lesezeit: ~7 MinAktualisiert 16. August 2026

Affiliate-Links: Als Amazon-Partner verdiene ich an qualifizierten Verkäufen – für dich bleibt der Preis gleich.

Das Wichtigste in Kürze

3 Kernaussagen für Schnellleser

Jinja2 ist die eingebaute Template-Sprache in Home Assistant – keine Installation nötig, sofort nutzbar. Mit drei Template-Typen (Sensor, Binary Sensor, Trigger) und über 120 Filtern wandelst du rohe Sensorwerte in berechnete Größen, erkennst komplexe Zustände und baust Automationen, die auf Berechnungen statt auf einzelne Sensorwerte reagieren. Wer vorausschauende Automationen bauen will, kommt an Jinja2 nicht vorbei.

  • Jinja2-Templates sind in Home Assistant fest eingebaut und erfordern keine zusätzliche Installation.
  • Es gibt drei Haupt-Template-Typen: Template-Sensoren, Binary-Sensoren und Trigger-basierte Templates.
  • Über 120 Filter stehen bereit, um rohe Sensordaten live in berechnete Werte umzuwandeln.
Template-Editor mit einem gültigen Jinja2-Ausdruck und dem direkt berechneten Ergebnis 21,4 Grad CelsiusKI-generiert
Der Template-Editor in den Home-Assistant-Entwicklerwerkzeugen hilft dir, Jinja2-Ausdrücke live zu testen.

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.

120+Verfügbare Jinja2-Filter in Home Assistant (Stand 06/2026)
3Template-Typen: Sensor, Binary Sensor, Trigger
Keine zusä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_measurement für die Einheit. Das Template wird in doppelten geschweiften Klammern geschrieben: {{ }}. Du kannst auf jeden Zustand im System zugreifen, indem du states('sensor.aussentemperatur') verwendest.

Praktisches Beispiel: Taupunkt nach Magnus-Formel

Der Taupunkt ist die Temperatur, bei der Luftfeuchtigkeit kondensiert – wichtig für Schimmelprävention. Die Magnus-Formel lautet:

γ(T, RH) = (a × T) / (b + T) + ln(RH / 100)
Taupunkt Td = (b × γ) / (a − γ)
Konstanten: a = 17,625 · b = 243,04 °C

Als YAML-Template-Sensor:

template:
  - sensor:
      - name: "Taupunkt Badezimmer"
        unit_of_measurement: "°C"
        state: >
          {% set T = states('sensor.badezimmer_temperatur') | float(0) %}
          {% set RH = states('sensor.badezimmer_feuchtigkeit') | float(0) %}
          {% set a = 17.625 %}
          {% set b = 243.04 %}
          {% set gamma = (a * T) / (b + T) + (RH / 100 | log) %}
          {{ (b * gamma / (a - gamma)) | round(1) }}

Praktisches Beispiel: Stromkosten berechnen

Wenn du einen Stromzähler-Sensor hast und deinen aktuellen Strompreis kennst (z.B. 32 ct/kWh Festpreis oder dynamisch je nach Tageszeit), erstellst du einen Template-Sensor, der die laufenden Kosten in Euro berechnet:

template:
  - sensor:
      - name: "Aktuelle Stromkosten"
        unit_of_measurement: "€"
        state: >
          {% set kwh = states('sensor.strom_zaehlerstand') | float(0) %}
          {% set preis = 0.32 %}
          {{ (kwh * preis) | round(2) }}

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.

YAML-Editor mit einem Jinja2-Template-Sensor, der aus Temperatur und Luftfeuchtigkeit den Taupunkt berechnetKI-generiert
Der Template-Sensor berechnet mit der Magnus-Formel aus 22,0 °C und 55 % Luftfeuchtigkeit einen Taupunkt von rund 12,5 °C.

Das Wesentliche in Kürze

Jinja2 ist die Template-Sprache in Home Assistant – damit machst du aus Zuständen berechnete Werte, Texte und Logik direkt in der Konfiguration. Wenn du daraus vorausschauende Automationen bauen willst, geht es mit Predictive Automatisierungen weiter.

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. | float wandelt in eine Kommazahl um, | int in 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

Schimmelrisiko steigt bei relativer Luftfeuchtigkeit dauerhaft über 65–80 % (materialabhängig) und wenn die Raumtemperatur nahe am Taupunkt liegt. Mit dem Taupunkt-Sensor aus dem Abschnitt oben baust du einen Binary Sensor, der "on" wird, wenn beide Bedingungen gleichzeitig erfüllt sind:

template:
  - binary_sensor:
      - name: "Schimmelgefahr Badezimmer"
        device_class: moisture
        state: >
          {% set rh = states('sensor.badezimmer_feuchtigkeit') | float(0) %}
          {% set temp = states('sensor.badezimmer_temperatur') | float(0) %}
          {% set taupunkt = states('sensor.taupunkt_badezimmer') | float(0) %}
          {{ rh > 65 and temp < taupunkt + 3 }}

Dieser Sensor kann dann eine Benachrichtigung auslösen ("Lüften!") oder automatisch die Lüftungsanlage aktivieren.

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:

automation:
  - alias: "Waschmaschine bei günstigem Strompreis starten"
    trigger:
      - platform: template
        value_template: >
          {{ states('sensor.strompreis_aktuell') | float(99) < 0.25 }}
    action:
      - service: switch.turn_on
        target:
          entity_id: switch.waschmaschine

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 der 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:

template:
  - sensor:
      - name: "Geräte mit schwacher Batterie"
        unit_of_measurement: "Geräte"
        state: >
          {{ states.sensor
            | selectattr('attributes.device_class', 'eq', 'battery')
            | map(attribute='state')
            | map('float', 100)
            | select('lt', 20)
            | list
            | count }}

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.

Hardware-Empfehlung: Mit dieser Kombination startest du

Jinja2 ist eingebaut – du brauchst keine extra Hardware dafür. Aber für die Beispiele in diesem Artikel brauchst du eine laufende Home Assistant Instanz. Wenn du kompakt starten willst: Der Home Assistant Green(öffnet in neuem Tab) (~120 €, fertig eingerichtet, einfach anstecken). Wenn du Zigbee-Sensoren (z.B. Temperatur- und Feuchtigkeitssensoren für den Taupunkt-Sensor) einbinden willst, brauchst du zusätzlich einen Zigbee-Stick. Mit dieser Kombination kannst du alle Beispiele aus diesem Artikel direkt umsetzen.

Fazit: Jinja2 ist die Grundlage für smarte Logik

Jinja2 ist keine optionale Erweiterung – es ist die Grundlage für jedes nicht-triviale Smart-Home-Setup. Über 120 Filter, drei Template-Typen, keine Installation. Der Einstieg gelingt mit Template-Sensoren (Werte umrechnen, z.B. Taupunkt nach Magnus-Formel) und Binary-Sensoren (Zustände erkennen, z.B. Schimmelgefahr). Wer komplexe Logik braucht, nutzt Template-Triggers – Automationen, die auf berechneten Werten statt auf einzelnen Sensoren reagieren.

Häufig gestellte Fragen

Wie teste ich ein Jinja2-Template, bevor ich es in die Konfiguration schreibe?
Im Home Assistant Entwicklerwerkzeug gibt es einen 'Template'-Tab. Dort kannst du Templates in Echtzeit eingeben und sofort das Ergebnis sehen – ohne Neustart. Ideal für das Testen von Formeln wie dem Taupunkt-Berechnung, bevor du sie in die YAML-Konfiguration überträgst.
Was ist der Unterschied zwischen Template-Sensor und Template-Binary-Sensor?
Ein Template-Sensor liefert einen Wert (z.B. 18.3 °C, 42.7 €, 5 Geräte). Ein Template-Binary-Sensor liefert nur on oder off – er repräsentiert eine Ja-Nein-Entscheidung, die von einer Bedingung abhängt (z.B. 'Schimmelgefahr ja/nein'). Binary Sensoren eignen sich als Trigger für Benachrichtigungen und Automatisierungen.
Brauche ich für Jinja2 eine zusätzliche Integration?
Nein. Jinja2 ist in Home Assistant eingebaut – keine Installation, kein Add-on, keine Konfiguration. Sobald du Home Assistant laufen hast, kannst du direkt mit Templates beginnen.
Kann ich komplexe Templates auslagern?
Ja – und das ist empfehlenswert. Definiere komplexe Berechnungen als Template-Sensor und referenziere den Sensorwert in deinen Automatisierungen. So bleibt die YAML-Konfiguration übersichtlich, und du kannst den Sensorwert im Dashboard beobachten und debuggen.
Wie gehe ich mit 'unavailable'-Sensorwerten um?
Immer einen Fallback-Wert mitgeben: `| float(0)` statt nur `| float`. Ohne Fallback schlägt das Template fehl, wenn der Sensor 'unavailable' meldet – die Automatisierung stoppt. Mit Fallback 0 rechnet das Template weiter und liefert zumindest ein definiertes Ergebnis.