🧪Template-Tester

Home Assistant nutzt Jinja2-Templates für berechnete Werte, Bedingungen und Nachrichten. Hier werten Sie Templates gegen das Musterhaus aus – mit denselben typischen Fehlern wie im echten System.

💡 states() liefert immer Text.

Ergebnis
Im Wohnzimmer hat es 21.4 °C.
Benutzte Entitäten:sensor.wohnzimmer_temperatur

Home Assistant merkt sich diese Entitäten, um Template-Sensoren nur bei deren Änderung neu zu berechnen.

⚠️ Nachbau: Dieser Tester ist eine eigene, sichere Auswertung einer Teilmenge von Jinja2 und den HA-Erweiterungen – ohne eval, mit Rechenschritt-Limit. Echtes Home Assistant kennt „hunderte“ Funktionen, Filter und Tests, nutzt eine Sandbox-Umgebung und wandelt Ergebnisse zusätzlich in native Typen um. Zum Prüfen am echten System: Entwicklerwerkzeuge → Template.

Musterhaus verändern

Unterstützt

Syntax

{{ … }} {% if/elif/else %} {% for … in … %} {% set %} {# … #} {{- -}} a if b else c + - * / // % ** ~ == != < > <= >= and or not in is defined/number/…

Funktionen
states('x')is_state('x','on')state_attr('x','a')is_state_attrhas_valuestates.<domain>.<id>expand()float(d)int(d)round(n)bool(d)iif(c,a,b)now()utcnow()area_namearea_idarea_entitiesfloor_namefloor_areaslabel_entitiesdevice_attris_numberrangeminmax
Filter
floatintroundabsdefaultupperlowertitlecapitalizetrimreplacejoinlistcount/lengthfirstlastsortreverseuniquesumminmaxmapselectrejectselectattrrejectattrslugifytojsoniifis_numbertimestamp_customas_timestamp

Nicht dabei: Makros, Regex-Filter, Zeitrechnung mit timedelta, Namespaces u. v. m.

🎯Die drei häufigsten Fallen

⚠️ 1 · states() ist Text
states('sensor.x') > 20 vergleicht Text mit Zahl → Fehler. Immer | float(0) oder | int(0) davor.
⚠️ 2 · unknown & unavailable
Beim Start oder bei Funkproblemen sind Werte unknown/unavailable. has_value() prüft das, ein Default fängt es ab.
💡 3 · states.x.y vs. states('x.y')
states.sensor.x.state liefert bei fehlender Entität einen Fehler bzw. nichts, states('sensor.x') dagegen unknown. Die Doku empfiehlt die Funktionsform.
# Template-Sensor (UI: Helfer → Template → Sensor, oder YAML)
template:
  - sensor:
      - name: "Leistung gesamt"
        unit_of_measurement: "W"
        device_class: power
        state_class: measurement
        state: >
          {{ states('sensor.stromzaehler_leistung') | float(0)
             + states('sensor.kaffeemaschine_leistung') | float(0) }}
        availability: "{{ has_value('sensor.stromzaehler_leistung') }}"