Home Assistant Templates / Statistik und Sensoren
Durch die Hilfe von Home-Assistant Templates können die Daten von verschiedenen Sensoren umgewandelt, kombiniert oder mit eigenen Formeln versehen werden. Templates ermöglichen das Erstellen von Logikblöcken fĂŒr den Einsatz in eigenen Sensoren, Bedingungen oder fĂŒr das Anpassen bestimmter Werte in Lovelance Cards. Als Syntax wird Jinja2 verwendet, eine voll funktionsfĂ€higen Template-Engine fĂŒr Python.
Wo können Templates verwendet werden?
Templates können in den folgenden Home-Assistant-Komponenten eingesetzt werden:
- Entwicklerwerkzeuge / TEMPLATE
- Template-Sensoren (unter Helfer)Â
- Automatisierungen
- bestimmte Lovelance Cards
Entwicklerwerkzeuge
Am einfachsten können neue Templates unter Entwicklerwerkzeuge / TEMPLATE getestet werden:
Wer einen neuen Sensor auf Basis eines Templates erstellen will, kann dies in den Einstellungen unter "GerĂ€te & Diense", "HELFER ERSTELLEN" und "Template":Â
Template-Sensor: Helfer
UrsprĂŒnglich wurden Template-Sensoren in der configuration.yaml-Datei hinterlegt. In aktuellen Home Assistant Versionen können die Templates komfortabel als Helfer in der Home Assistant OberflĂ€che angelegt werden. Die Helfer zeigen beim Erstellen bereits die berechneten Werte oder eventuelle Syntaxfehler.
MenĂŒpunkt: Einstellungen, Helfer erstellen -> Template:Â
Zur Auswahl stehen die Optionen fĂŒr einen binĂ€ren Sensor, also "Ein" und "Aus", oder einen beliebigen anderen Sensor:
Zur Erstellung, siehe auf dieser Seite:Â Template Beispiele
Automatisierungen
Die angelegten Template-Sensoren könnten in einer Automatisierung verwendet werden, oder alternativ bieten diese die Möglichkeit direkt einen Template-Block in den Auslösern oder Bedingungen zu hinterlegen:
Innerhalb der Automatisierungen können Templates als Auslöser, Bedingung und in den Bedingungen von Aktionen verwendet werden:
siehe auch: Home Assistant Automatisierung - Möglichkeiten & Basics
Template Beispiele
Als konkretes Beispiel fĂŒr einen Template-Sensor könnte aus dem Datum und der Uhrzeit fĂŒr den nĂ€chsten Sonnenaufgang, die Uhrzeit als eigene EntitĂ€t zur VerfĂŒgung gestellt werden. Der integrierte Sensor fĂŒr den Sonnenaufgang steht in folgendem Format zur VerfĂŒgung:  2023-09-12T07:40:21.796007+00:00. FĂŒr das Extrahieren der Uhrzeit, kann folgendes Template eingesetzt werden:
{{
as_timestamp(states.sun.sun.attributes.next_rising) |
timestamp_custom('%H:%M')
}}
"as_timestamp" wandelt dabei den Wert ("states.") des Sensors "sun.sun.attributes.next_rising" in einen Unix-Timestamp um. Ein Pipe "|" an die Funktion "timestamp_custom" wandelt den Timestamp zurĂŒck in "Stunden":"Minuten": '%H:%M'. Wie bereits erwĂ€hnt kann das Template in den Entwicklerwerkzeugen getestet werden:
Eingesetzt als Template-Sensor, zeigt auch dieser eine Vorschau des Ergebnisses:
Beim Speichern des Template-Sensors wird ein neuer Sensor mit der ID: sensor.Name, hier "sensor.sonnenaufgang" angelegt und steht als eigene EntitĂ€t in Home Assistant zur VerfĂŒgung.Â
Template - Cheat Sheet
Hier ein paar Beispiel-Templates:
was | Template |
---|---|
Sonnenaufgang |
|
Sonnenuntergang |
|
Sonne: Sonnenaufgang - Sonnenuntergang |
|
Tageslicht in Stunden pro Tag |
|
Test ob nach Sonnenaufgang |
|
Test ob 180 Minuten nach Sonnenaufgang |
|
Test ob nach Sonnenuntergang |
|
verbleibendes Tageslicht in Stunden |
|
Leistung (Watt) aus Strom (I) und Spannung (U) |
|
Ăber den Stromverbrauch der Heizungssteuerung -Â gemessen mit einer Zigbee Steckdose - kann ich feststellen, welche Aktion die Heizung gerade durchfĂŒhrt. |
Der folgende Sensor Àndert den Status anhand des Stromverbrauchs der Heizungssteuerung und kann damit z.B. in einer Lovelance-Card als Information eingeblendet werden:
|
Zeit seit der letzten StatusÀnderung in Minuten lÀnger als x Minuten (im Beispiel 30 Minuten) |
 Um festzustellen, wann der Status eines Sensors zuletzt geĂ€ndert wurde, setze ich fĂŒr meine Heizung folgendes Template ein.
Das Template prĂŒft, ob die letzte StatusĂ€nderung vor mehr als 30 Minuten ("> 30") stattgefunden hat. Ich verwende das Template in den Automatisierungen damit meine Heizung nicht kurz nach dem Einschalten durch eine bestimmte StatusĂ€nderung wieder deaktiviert wird.  |
"Nicht VerfĂŒgbar"- Wert vorgeben: 0 |
Um die Zahl 0 anstelle von "nicht verfĂŒgbar" fĂŒr eine EntitĂ€t zu verwenden, kann eine einfache if-Abfrage mit "is_number" verwendet werden:
|
Vorherigen Wert im Template-Sensor verwenden
Mithilfe des folgenden Templates kann ein Template-Sensor (hier sensor.lastavailablestate) den letzten Wert zurĂŒckgeben, der nicht "unavailable" war:Â
{% if states('sensor.sometimes_unavailable') != 'unavailable'%}
{{ sensor.sometimes_unavailable }}
{% else %}
{{ states('sensor.lastavailablestate') }}
{% endif %}
Neben den Template-Sensoren gibt es in Home-Assistant zusĂ€tzliche Helfer-Sensoren fĂŒr bestimmte Daten:
bestimmte Helfer
Riemann Summenintegralsensor (vormals Platform:Integration) hinzufĂŒgen
Um aus einem Momentanwert den Verbrauch zu bestimmen, kann ein sogenannter Riemann Summenintegralsensor hinzugefĂŒgt werden. Damit kann aus bestimmten Verbrauchswerten: Watt der komplette Verbrauch als Wh (Watt-Stunden) summiert werden:
Der Verbrauch wird summiert:
Riemann Summenintegralsensor Methode Àndern: trapezoidal vs. left
Wird als Methode fĂŒr den Riemann Summenintegralsensor "Trapezregel" verwendet, kann ein Spike dazu fĂŒhren, dass der EnergiezĂ€hler zu viel zĂ€hlt:
Leider gibt es in der grafischen OberflĂ€che keine Möglichkeit die Methode des Summenintegralsensors zu Ă€ndern. Eine Ănderung ist ĂŒber einen Editor nur direkt in der Konfiguration möglich:
geÀndert in "left"
Um den summierten Verbrauch wieder auf eine bestimmte Zeitspanne zu beziehen, kann die "Platform Integration" als âutility_meterâ verwendet werden:
VerbrauchszĂ€hler hinzufĂŒgen (vormals Utility_Meter)
Der VerbrauchszĂ€hler verwendet den Gesamtverbrauch und unterteilt diesen in bestimmte Zeitspannen: z.B. stĂŒndlich (hourly) oder (tĂ€glich) daily:
Statistics Platform
Mithilfe der Statistics Platform können bestimmte historische Werte reprĂ€sentiert werden, als Beispiel die Summe bestimmter Werte. Aktuell mĂŒssen diese in der configuration.yaml-Datei hinzugefĂŒgt werden, da es dafĂŒr noch keine Helper-Funktionen in der GUI gibt, lediglich einen Feature Request: https://community.home-assistant.io/t/make-a-statistics-helper/610340:
sensor:
- name: rain_weather_24
platform: statistics
entity_id: sensor.rain_weather
state_characteristic: sum
max_age:
hours: 24
sum_differences verwendet die Unterschiede zwischen den Werten bei einem fortlaufenden ZĂ€hler:Â
sensor:
- name: powerplug_24
platform: statistics
entity_id: sensor.powerplug_summation_delivered
state_characteristic: sum_differences
max_age:
hours: 24
Ein weiteres Beispiel ist die durchschnittliche Temperatur der letzten 24 Stunden
sensor:
- name: aussen_temperature_24
platform: statistics
entity_id: sensor.aussen_temperature
state_characteristic: mean
max_age:
hours: 24
SQL Integration
Zudem können die Daten fĂŒr bestimmte Sensoren direkt die SQL-Integration aus der Datenbank gelesen werden. So können zum Beispiel Statistik-Daten auch im Nachhinein abgefragt werden, ohne zuvor einen entsprechenden Sensor anlegen zu mĂŒssen.
Beschreibung | SQL-Query fĂŒr die SQL-Integration, als Spalte in der Integration wird "val" ĂŒber "as val" vorgegeben:Â |
---|---|
Delta-Wert (Produktion) eines Energy-Sensors gestern (aus der LTS-Statistik-Tabelle gelesen) |
|
Delta-Wert (Produktion) eines Energy-Sensors heute bis jetzt (aus der Statistik-Short_Term-Tabelle gelesen) |
|
Delta-Wert (Produktion) eines Energy-Sensors gestern bis zur selben Zeit (aus der Statistik-Short_Term-Tabelle gelesen) |
|
Delta-Wert (Produktion) eines Energy-Sensors gestern zur selben Zeit bis Tagesende: z.B. PV-Produktion verbleibend gestern zur selben Zeit (aus der Statistik-Short_Term-Tabelle gelesen) |
|
Delta-Wert (Produktion) eines Energy-Sensors gestern zur selben Zeit bis Tagesende, aus der States-Tabelle gelesen |
|
gestern: kleinster Wert eines Sensors (aus der States-Tabelle gelesen) |
|
kleinster Wert, z. B. der tiefste Batterieladestatus von gestern. |
FĂŒr den Ladezustand meiner Batterie (in Prozent) funktionierte weder Max, noch ein normales Order, da z.B. 100 kleiner als 42.2 interpretiert wurde. |
Batterieladestatus gestern zur selben Zeit |
|
letzter Zeitpunkt eines Sensors mit einem bestimmten Wert als Unix Timestamp |
|
letzter Zeitpunkt eines Sensors mit einem bestimmten Wert als Datum / Uhrzeit |
|
Delta-Wert (Produktion) eines Energy-Sensors seit dem ein anderen Sensors zuletzt einen bestimmten Wert hatte (aus der Statistik-Short_Term-Tabelle gelesen) |
|
Maximalwert eines Sensors in den letzten 10 Tagen bis zur aktuellen Uhrzeit |
|
Mindestwert eines Sensors in den letzten 10 Tagen bis zur aktuellen Uhrzeit |
|
Unerwartetes Verhalten date() vs datetime()
"date()" in den Queries verwendet die aktuell eingestellte Zeitzone, "datetime()" hingegen UTC. Vergleiche oder Ausgaben mit "date()" in den Queries besitzen dadurch im Vergleich zu den Timstamps der Datenbank ein Offset: Bei Verwendung von GMT+2 als Zeitzone kann unixepoch(date('now','+2 hours')) fĂŒr den aktuellen Tag verwendet werden, um das Offset zu korrigieren. unixepoch(date('now','-22 hours')) wĂ€re dementsprechend gestern. Nach Umstellung der Sommerzeit Ă€ndert sich das Offset dann auf unixepoch(date('now','+1 hours')) ...
Auch ein Workaround mit date("now","utc") funktioniert nicht, da "utc" an dieser Stelle bei Verwendung der Home Assistant SQL Integration ignoriert wird. (In einem SQLite Browser wĂŒrde es funktionieren). Ich habe dazu auch ein Issue auf Github erstellt und werde diesen Artikel entsprechend anpassen, falls sich etwas Neues ergibt: https://github.com/home-assistant/core/issues/124702.
Â
Home Assistant Schnee-Erkennung PV-Anlage
Bei einer PV-Anlage steigt die Spannung mit der Anzahl der PV-Modulen, auch bei schlechten LichtverhĂ€ltnissen. Anders, wenn bestimmte Module teilweise oder komplett von Schnee bedeckt sind. Diese Tatsache habe ich mir zunutze gemacht und in Home Assistant eine Schnee-Erkennung zusammengestellt. Warum? Um die PV-Vorhersage fĂŒr den nĂ€chsten Tag zu korrigieren, und die Steuerung fĂŒr die Heizung entsprechend anzupassen. ... weiterlesen
{{percentage}} % positiv