Jeder kennt die Frage im Sommer: «Wie heiss war es heute eigentlich maximal?» Home Assistant zeigt zwar den aktuellen Wert eines Temperatursensors an, aber das Tagesmaximum und -minimum liefert es nicht von selbst. Viele greifen dafür zur schweren Artillerie – einer externen Datenbank mit Grafana. Das ist mächtig, aber Overkill, wenn man nur zwei Zahlen pro Tag braucht. Es geht viel eleganter: mit einem trigger-basierten Template-Sensor, der komplett in der Home-Assistant-Konfiguration lebt, einen Neustart übersteht und um Mitternacht sauber zurücksetzt.
Das Problem mit gewöhnlichen Template-Sensoren
Ein normaler Template-Sensor berechnet seinen Wert jedes Mal neu, wenn sich eine referenzierte Entität ändert. Das ist perfekt für abgeleitete Werte, aber untauglich für ein Tagesmaximum: Man möchte ja gerade den höchsten Wert behalten, auch wenn die Temperatur danach wieder sinkt. Ein Sensor, der stur den aktuellen Wert spiegelt, vergisst das Maximum sofort wieder.
Die Lösung ist ein trigger-basierter Template-Sensor. Er rechnet nicht bei jeder Zustandsänderung, sondern nur, wenn ein von uns definierter Trigger feuert. Und der entscheidende Vorteil: Sein Zustand wird bei einem Neustart von Home Assistant automatisch wiederhergestellt. Das gesammelte Maximum überlebt also auch ein Update oder einen Reboot.
Schritt für Schritt zum Tagesmaximum
Wir brauchen zwei Trigger: einen, der bei jeder neuen Messung feuert, und einen Zeit-Trigger um Mitternacht, der den Wert zurücksetzt. Über trigger.id unterscheiden wir im Template, welcher der beiden ausgelöst hat. Als Quelle dient hier der Aussensensor sensor.eve_weather_20ebs9901_temperatur – ersetzen Sie ihn durch Ihren eigenen.
template:
- trigger:
- trigger: state
entity_id: sensor.eve_weather_20ebs9901_temperatur
id: messung
- trigger: time
at: "00:00:00"
id: reset
sensor:
- name: "Aussentemperatur Tagesmaximum"
unique_id: aussentemp_tagesmax
unit_of_measurement: "°C"
device_class: temperature
state: >
{% set aktuell = states('sensor.eve_weather_20ebs9901_temperatur') | float(0) %}
{% if trigger.id == 'reset' %}
{{ aktuell }}
{% else %}
{{ [aktuell, this.state | float(aktuell)] | max }}
{% endif %}
Die Logik ist überschaubar: Feuert der Zeit-Trigger (reset), setzt der Sensor sich auf den aktuellen Messwert – der neue Tag beginnt frisch. Bei jeder normalen Messung vergleicht er den neuen Wert mit seinem bisherigen Zustand (this.state) und behält den grösseren. Das float(aktuell) als Fallback fängt den ersten Start ab, wenn this.state noch «unknown» ist.
Das Minimum gleich mitnehmen
Das Tagesminimum funktioniert identisch – man tauscht nur max gegen min. Beide Sensoren dürfen im selben Trigger-Block stehen:
- name: "Aussentemperatur Tagesminimum"
unique_id: aussentemp_tagesmin
unit_of_measurement: "°C"
device_class: temperature
state: >
{% set aktuell = states('sensor.eve_weather_20ebs9901_temperatur') | float(0) %}
{% if trigger.id == 'reset' %}
{{ aktuell }}
{% else %}
{{ [aktuell, this.state | float(aktuell)] | min }}
{% endif %}
Nach dem Neuladen der Template-Integration (Entwicklerwerkzeuge → YAML → «Template-Entitäten neu laden») erscheinen beide Sensoren und beginnen sofort mit dem Sammeln. Auf einer Dashboard-Karte lassen sie sich zusammen mit dem aktuellen Wert anzeigen – fertig ist die kleine Wetterstation.
Worauf man achten sollte
Ein paar Stolpersteine sind gut zu kennen. Erstens: Trigger-basierte Sensoren aktualisieren sich nur bei den definierten Triggern. Vergisst man den State-Trigger, bleibt der Wert stehen. Zweitens: Der Reset um Mitternacht setzt auf den aktuellen Wert, nicht auf «unbekannt» – das ist Absicht, damit sofort ein gültiger Startwert existiert. Drittens: Wer den Tageshöchstwert auch nach einem Absturz exakt braucht, profitiert von der automatischen Zustandswiederherstellung, sollte aber wissen, dass ein sehr kurzer Ausfall über Mitternacht theoretisch einen Reset verpassen kann.
Für dauerhafte Verläufe über Wochen und Monate bleibt eine echte Zeitreihen-Datenbank die bessere Wahl – wie im Beitrag zum Langzeit-Logging mit InfluxDB und Grafana gezeigt. Für die schlichte Frage nach Tageshoch und -tief aber ist der trigger-basierte Sensor unschlagbar leichtgewichtig.
Fazit
Mit rund zwanzig Zeilen YAML bekommt man zwei robuste Sensoren, die Tagesmaximum und -minimum jeder beliebigen Messgrösse festhalten – Temperatur, Luftfeuchte, Leistung, Windgeschwindigkeit. Kein Add-on, keine Datenbank, kein Speicherfresser. Das Prinzip lässt sich beliebig erweitern: Statt eines Maximums kann man den Zeitpunkt des höchsten Werts als Attribut speichern oder mehrere Räume parallel überwachen. Wer einmal verstanden hat, wie trigger.id und this.state zusammenspielen, hat ein Werkzeug in der Hand, das in unzähligen Automationen wiederkehrt.