{"id":1330,"date":"2026-07-19T18:11:33","date_gmt":"2026-07-19T16:11:33","guid":{"rendered":"https:\/\/www.coremind.ch\/wordpress\/?p=1330"},"modified":"2026-07-19T18:11:33","modified_gmt":"2026-07-19T16:11:33","slug":"tages-min-max-ohne-datenbank-trigger-sensoren","status":"publish","type":"post","link":"https:\/\/www.coremind.ch\/wordpress\/tages-min-max-ohne-datenbank-trigger-sensoren\/","title":{"rendered":"Tages-Min\/Max ohne Datenbank: Trigger-Sensoren"},"content":{"rendered":"<p>Jeder kennt die Frage im Sommer: \u00abWie heiss war es heute eigentlich maximal?\u00bb Home Assistant zeigt zwar den aktuellen Wert eines Temperatursensors an, aber das Tagesmaximum und -minimum liefert es nicht von selbst. Viele greifen daf\u00fcr zur schweren Artillerie \u2013 einer externen Datenbank mit Grafana. Das ist m\u00e4chtig, 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 \u00fcbersteht und um Mitternacht sauber zur\u00fccksetzt.<\/p>\n<h2>Das Problem mit gew\u00f6hnlichen Template-Sensoren<\/h2>\n<p>Ein normaler Template-Sensor berechnet seinen Wert jedes Mal neu, wenn sich eine referenzierte Entit\u00e4t \u00e4ndert. Das ist perfekt f\u00fcr abgeleitete Werte, aber untauglich f\u00fcr ein Tagesmaximum: Man m\u00f6chte ja gerade den h\u00f6chsten Wert <em>behalten<\/em>, auch wenn die Temperatur danach wieder sinkt. Ein Sensor, der stur den aktuellen Wert spiegelt, vergisst das Maximum sofort wieder.<\/p>\n<p>Die L\u00f6sung ist ein <strong>trigger-basierter<\/strong> Template-Sensor. Er rechnet nicht bei jeder Zustands\u00e4nderung, 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 \u00fcberlebt also auch ein Update oder einen Reboot.<\/p>\n<h2>Schritt f\u00fcr Schritt zum Tagesmaximum<\/h2>\n<p>Wir brauchen zwei Trigger: einen, der bei jeder neuen Messung feuert, und einen Zeit-Trigger um Mitternacht, der den Wert zur\u00fccksetzt. \u00dcber <code>trigger.id<\/code> unterscheiden wir im Template, welcher der beiden ausgel\u00f6st hat. Als Quelle dient hier der Aussensensor <code>sensor.eve_weather_20ebs9901_temperatur<\/code> \u2013 ersetzen Sie ihn durch Ihren eigenen.<\/p>\n<pre><code>\ntemplate:\n  - trigger:\n      - trigger: state\n        entity_id: sensor.eve_weather_20ebs9901_temperatur\n        id: messung\n      - trigger: time\n        at: \"00:00:00\"\n        id: reset\n    sensor:\n      - name: \"Aussentemperatur Tagesmaximum\"\n        unique_id: aussentemp_tagesmax\n        unit_of_measurement: \"\u00b0C\"\n        device_class: temperature\n        state: >\n          {% set aktuell = states('sensor.eve_weather_20ebs9901_temperatur') | float(0) %}\n          {% if trigger.id == 'reset' %}\n            {{ aktuell }}\n          {% else %}\n            {{ [aktuell, this.state | float(aktuell)] | max }}\n          {% endif %}\n<\/code><\/pre>\n<p>Die Logik ist \u00fcberschaubar: Feuert der Zeit-Trigger (<code>reset<\/code>), setzt der Sensor sich auf den aktuellen Messwert \u2013 der neue Tag beginnt frisch. Bei jeder normalen Messung vergleicht er den neuen Wert mit seinem bisherigen Zustand (<code>this.state<\/code>) und beh\u00e4lt den gr\u00f6sseren. Das <code>float(aktuell)<\/code> als Fallback f\u00e4ngt den ersten Start ab, wenn <code>this.state<\/code> noch \u00abunknown\u00bb ist.<\/p>\n<h2>Das Minimum gleich mitnehmen<\/h2>\n<p>Das Tagesminimum funktioniert identisch \u2013 man tauscht nur <code>max<\/code> gegen <code>min<\/code>. Beide Sensoren d\u00fcrfen im selben Trigger-Block stehen:<\/p>\n<pre><code>\n      - name: \"Aussentemperatur Tagesminimum\"\n        unique_id: aussentemp_tagesmin\n        unit_of_measurement: \"\u00b0C\"\n        device_class: temperature\n        state: >\n          {% set aktuell = states('sensor.eve_weather_20ebs9901_temperatur') | float(0) %}\n          {% if trigger.id == 'reset' %}\n            {{ aktuell }}\n          {% else %}\n            {{ [aktuell, this.state | float(aktuell)] | min }}\n          {% endif %}\n<\/code><\/pre>\n<p>Nach dem Neuladen der Template-Integration (Entwicklerwerkzeuge \u2192 YAML \u2192 \u00abTemplate-Entit\u00e4ten neu laden\u00bb) erscheinen beide Sensoren und beginnen sofort mit dem Sammeln. Auf einer Dashboard-Karte lassen sie sich zusammen mit dem aktuellen Wert anzeigen \u2013 fertig ist die kleine Wetterstation.<\/p>\n<h2>Worauf man achten sollte<\/h2>\n<p>Ein paar Stolpersteine sind gut zu kennen. Erstens: Trigger-basierte Sensoren aktualisieren sich <strong>nur<\/strong> bei den definierten Triggern. Vergisst man den State-Trigger, bleibt der Wert stehen. Zweitens: Der Reset um Mitternacht setzt auf den <em>aktuellen<\/em> Wert, nicht auf \u00abunbekannt\u00bb \u2013 das ist Absicht, damit sofort ein g\u00fcltiger Startwert existiert. Drittens: Wer den Tagesh\u00f6chstwert auch nach einem Absturz exakt braucht, profitiert von der automatischen Zustandswiederherstellung, sollte aber wissen, dass ein sehr kurzer Ausfall \u00fcber Mitternacht theoretisch einen Reset verpassen kann.<\/p>\n<p>F\u00fcr dauerhafte Verl\u00e4ufe \u00fcber Wochen und Monate bleibt eine echte Zeitreihen-Datenbank die bessere Wahl \u2013 wie im Beitrag zum <a href=\"https:\/\/www.coremind.ch\/wordpress\/langzeit-logging-in-ha-influxdb-grafana\/\">Langzeit-Logging mit InfluxDB und Grafana<\/a> gezeigt. F\u00fcr die schlichte Frage nach Tageshoch und -tief aber ist der trigger-basierte Sensor unschlagbar leichtgewichtig.<\/p>\n<h2>Fazit<\/h2>\n<p>Mit rund zwanzig Zeilen YAML bekommt man zwei robuste Sensoren, die Tagesmaximum und -minimum jeder beliebigen Messgr\u00f6sse festhalten \u2013 Temperatur, Luftfeuchte, Leistung, Windgeschwindigkeit. Kein Add-on, keine Datenbank, kein Speicherfresser. Das Prinzip l\u00e4sst sich beliebig erweitern: Statt eines Maximums kann man den Zeitpunkt des h\u00f6chsten Werts als Attribut speichern oder mehrere R\u00e4ume parallel \u00fcberwachen. Wer einmal verstanden hat, wie <code>trigger.id<\/code> und <code>this.state<\/code> zusammenspielen, hat ein Werkzeug in der Hand, das in unz\u00e4hligen Automationen wiederkehrt.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jeder kennt die Frage im Sommer: \u00abWie heiss war es heute eigentlich maximal?\u00bb Home Assistant zeigt zwar den aktuellen Wert eines Temperatursensors an, aber das Tagesmaximum und -minimum liefert es nicht von selbst. Viele greifen daf\u00fcr zur schweren Artillerie \u2013 einer externen Datenbank mit Grafana. Das ist m\u00e4chtig, aber Overkill, wenn man nur zwei Zahlen &#8230; <a title=\"Tages-Min\/Max ohne Datenbank: Trigger-Sensoren\" class=\"read-more\" href=\"https:\/\/www.coremind.ch\/wordpress\/tages-min-max-ohne-datenbank-trigger-sensoren\/\" aria-label=\"Mehr Informationen \u00fcber Tages-Min\/Max ohne Datenbank: Trigger-Sensoren\">Weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-1330","post","type-post","status-publish","format-standard","hentry","category-ha"],"_links":{"self":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1330","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/comments?post=1330"}],"version-history":[{"count":1,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1330\/revisions"}],"predecessor-version":[{"id":1389,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/posts\/1330\/revisions\/1389"}],"wp:attachment":[{"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/media?parent=1330"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/categories?post=1330"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.coremind.ch\/wordpress\/wp-json\/wp\/v2\/tags?post=1330"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}