HA kann an vielen Stellen (z.B. Template-Sensor, Template-Trigger, Template fähige Karten) Code über Jinja2-Templating ausführen.
Wer immer schon ein wenig über Templating lernen wollte, der kann diese Beispiele hier zum Üben verwenden.
Ich hab mir aus der Anleitung die interessantesten Teile herausgesucht und Code-Snippets erstellt, die man 1:1 in den Template-Editor der Entwicklerwerkzeuge kopieren kann.
Wer den noch nicht kennt, der hat wirklich etwas verpasst. Also dringend mal ansehen!
Template-Editor.png
Interessant ist auch der Teil über Reusing Templates, das ist die Umschreibung von Macros.
Leider ist im Trigger-Teil der Automation-Trigger nur ein Subset verfügbar, gekennzeichnet mit: (nicht in Limited Templates)
Das ist wohl auch ein Grund, warum ich lieber Template-Trigger verwende, die jedoch nicht direkt auf Ereignisse reagieren können wie die Automation.
Ich verwende in den folgenden Code-Beispielen häufig Sensoren der Demo-Integration, also z.B. sensor.outside_temperature oder light.bed_light.
Da man bei Strings sowohl einfache also auch doppelte Hochkomma verwenden kann, hab ich meist einfache verwendet, man sieht das auch häufiger so.
Bei JSON-Strings oder Verschachtelungen muss man jedoch aufpassen, da es dort nicht mehr egal ist. (z.B. thread: "Walter's Anleitungen")
Noch ein Hinweis zur String-Concatenation. Man sieht immer wieder dass statt dem Tilde-Operator der Plus-Operator zum verbinden von Strings verwendet wird.
~ gilt als der sichere und + gilt als der unsichere, und wenn man wissen möchte, warum sie so genannt werden, entfernt man einfach mal die string Umwandlung bei der unteren Zeile.
Die Reihenfolge hier entspricht der Original Doku, so findet man sich schneller zurecht wenn man beides parallel verwendet.
States (nicht in Limited Templates)
Die Funktion states() lernt man meist als erstes, with_unit bleibt dabei aber oft unbekannt.
Interessant ist auch die Warnung, dass man besser states('sensor.temperature') verwendet und nicht states.sensor.temperature.state, obwohl beides funktioniert.
Attributes (nicht in Limited Templates)
state_attr() ist vermutlich ebenfalls bereits bekannt, da viele Entities nicht nur einen Status sondern auch noch zusätzliche Attribute hat.
State Translated (nicht in Limited Templates)
state_translated() funktioniert leider nur bei manchen States und auch nicht bei Attributen.
Working with Groups (nicht in Limited Templates)
Die expand() Funktion liefert immer das gesamte Objekt zurück.
Die Funktion kann auch mit mehr als einer Group umgehen: expand('group1', 'group2', ...)
Entities (auch in Limited Templates)
Mit is_hidden_entity(entity_id) kann man prüfen, ob eine Entity hidden ist.
Liste aller hidden Entities
Mit reject statt select bekommt man alle non-hidden Entities.
Wer immer schon ein wenig über Templating lernen wollte, der kann diese Beispiele hier zum Üben verwenden.
Ich hab mir aus der Anleitung die interessantesten Teile herausgesucht und Code-Snippets erstellt, die man 1:1 in den Template-Editor der Entwicklerwerkzeuge kopieren kann.
Wer den noch nicht kennt, der hat wirklich etwas verpasst. Also dringend mal ansehen!
Template-Editor.png
Interessant ist auch der Teil über Reusing Templates, das ist die Umschreibung von Macros.
Leider ist im Trigger-Teil der Automation-Trigger nur ein Subset verfügbar, gekennzeichnet mit: (nicht in Limited Templates)
Das ist wohl auch ein Grund, warum ich lieber Template-Trigger verwende, die jedoch nicht direkt auf Ereignisse reagieren können wie die Automation.
Ich verwende in den folgenden Code-Beispielen häufig Sensoren der Demo-Integration, also z.B. sensor.outside_temperature oder light.bed_light.
Da man bei Strings sowohl einfache also auch doppelte Hochkomma verwenden kann, hab ich meist einfache verwendet, man sieht das auch häufiger so.
Bei JSON-Strings oder Verschachtelungen muss man jedoch aufpassen, da es dort nicht mehr egal ist. (z.B. thread: "Walter's Anleitungen")
Noch ein Hinweis zur String-Concatenation. Man sieht immer wieder dass statt dem Tilde-Operator der Plus-Operator zum verbinden von Strings verwendet wird.
~ gilt als der sichere und + gilt als der unsichere, und wenn man wissen möchte, warum sie so genannt werden, entfernt man einfach mal die string Umwandlung bei der unteren Zeile.
HTML-Code:
{{ "Temperatur: " ~ 22.5 ~ " °C" }}
{{ "Temperatur: " + 22.5 | string + " °C" }}
Die Reihenfolge hier entspricht der Original Doku, so findet man sich schneller zurecht wenn man beides parallel verwendet.
States (nicht in Limited Templates)
Die Funktion states() lernt man meist als erstes, with_unit bleibt dabei aber oft unbekannt.
HTML-Code:
{{ states('sensor.outside_temperature') }}
{{ states('sensor.outside_temperature', with_unit=True) }}
Attributes (nicht in Limited Templates)
state_attr() ist vermutlich ebenfalls bereits bekannt, da viele Entities nicht nur einen Status sondern auch noch zusätzliche Attribute hat.
HTML-Code:
{{ state_attr('sensor.outside_temperature','battery_level') }}
State Translated (nicht in Limited Templates)
HTML-Code:
{{ states('sun.sun') }}
{{ state_translated('sun.sun') }}
{{ 'sun.sun' | state_translated }}
Working with Groups (nicht in Limited Templates)
Die expand() Funktion liefert immer das gesamte Objekt zurück.
HTML-Code:
{{ expand('media_player.group') | selectattr('attributes.volume_level', 'gt', 0) | list }}
Entities (auch in Limited Templates)
Mit is_hidden_entity(entity_id) kann man prüfen, ob eine Entity hidden ist.
Liste aller hidden Entities
HTML-Code:
{{ states | map(attribute='entity_id') | select('is_hidden_entity') | list }}


Kommentar