Ich hatte ja bereits ausgeführt, dass ich mittels Home Assistant die Temperatur unserer Sauna „überwache“. Hierfür habe ich mittels ESPHome ein günstiges Thermometer für entsprechend hohe Temperaturen eingebunden und weiß so jederzeit, wie warm es in der Sauna ist.
Wie auch auch bereits geschrieben habe, möchte ich immer dann eine todoist-Aufgabe „Keller wischen“ erstellt bekommen, wenn ich mit dem Saunieren fertig bin.
Aber woran erkenne ich und, ob ich mit dem Saunieren wirklich fertig bin?
Klar, das naheliegendste ist eine simple Prüfung ob die Temperatur unterhalb eines bestimmten Schwellwertes liegt. Denn wenn es beispielsweise kälter als 25 Grad in der Sauna ist, ist diese wohl nicht eingeschaltet.
Wenn nun aber der ESPHome-Sensor (warum auch immer!) zwischenzeitlich nicht verfügbar (also unavailable) ist und dann wieder verfügbar ist, wird die Prüfung „Temperatur < 25 Grad“ triggern!
Du magst Home Assistant? Dann abonniere kostenlos meine Beiträge mit Tipps, Tricks und Anleitungen rund um Home Assistant:
Follow Home Assistant
Garantiert kein Spam, keine Werbung und immer mit Abmelde-Link, solltest du es dir anders überlegen!
Natürlich kann man diesen Umstand ignorieren, oder man ist ein Freak wie ich, und sucht nach einer besseren Lösung! 🙂
Die Lösung des Problems lautet Ableitung – also auf Englisch Derivative (Home Assistant Derivative)!
Mittels einer Ableitung einer Funktion erhält man die Info, ob die Funktion steigt oder sinkt. Also benötige ich eine Ableitung der Temperatur der Sauna. Denn nur wenn die Temperatur tatsächlich sinkt, möchte ich meine Automation ja auslösen lassen.
In Home Asistant definiert man hierfür einfach einen neuen Sensor, welche ich „sauna_derivative“ nenne. Hierbei legen wir fest, auf welchen Wert (also welche „Funktion“) sich die Ableitung beziehen soll und welcher Zeitraum hierbei betrachtet werden soll.
sensor:
- platform: derivative
source: sensor.temperatur_sauna
name: sauna_derivative
time_window: "01:00:00"
In meinem Fall habe ich eine Stunde (time_window: „01:00:00“) für die betrachtete Zeit gewählt.
Als Ergebnis erhalte ich nun einen neuen Sensor: sensor.sauna_derivative, welcher den Wert der Ableitung der Temperatur enthält.
Der Wertverlauf des neuen Sensors sieht dann konkret wie folgt aus:
Wenn die Sauna nicht in Betrieb ist, ist der Derivative-Sensor um den Wert Null (Bereich vor 18:45). Dann schalte ich die Sauna ein und die Kurve steigt deutlich an. Gegen 19:30 habe ich die Temperatur weiter hochgeschaltet, was den Sprung erklärt.
Gegen 21:30 war ich mit dem Saunieren fertig und der Sensor fällt deutlich ins Negative.
Aus „Versuchen“ weiß ich, dass es bis ca. -50 runtergeht. Also habe ich meine Automation wie folgt angepasst:
- alias: "Wischen nach Sauna"
trigger:
platform: numeric_state
entity_id: sensor.sauna_derivative
below: -40
for:
minutes: 1
condition:
condition: template
#6*60*60=21600
value_template: '{{ as_timestamp(now()) - (as_timestamp(state_attr("automation.wischen_nach_sauna", "last_triggered")) or 0) > 21600 }}'
action:
- action: todoist.new_task
data:
content: Keller wischen!
project: F5c
due_date_string: Tomorrow
Sobald der Derivative-Sensor für mindestens eine Minute kleiner als -40 ist, wird die Automation getriggert.
Bislang hatte ich mit dieser Lösung noch keine falsche Auslösung der Automation, was mathematisch für mich auch absolut Sinn macht.
Die Lösung finde ich persönlich deswegen absolut genial, da fail-proven und dennoch einfach!
Weitere sinnvolle Anwendungsfälle habe ich für den Derivative-Sensor noch nicht!
Produktempfehlungen
Hi, sehr gute Idee! Gleiche Idee hatte ich auch, um zu erkennen, wann mein Warmwasserboiler über die Gastherme aufgeheizt wird. Ich habe einen separaten Gaszähler, welcher geloggt wird und so könnte ich tatsächlich den Gasverbrauch für die WW Bereitung rausrechnen. Bin noch nicht so firm in der „Yaml“ Programmierung, aber bin zumindest mal auf die Idee mit dem Ableitungssensor selber gekommen. Ich werde mich bei dir an den „Programmierbeispielen“ mal etwas bedienen:-)
Schöner Anwendungsfall hierfür wäre doch der Luftdrucktrend und dann mittelbar als Anzeige „Steigt“ oder „Fällt“. Hab den Sensor grade aufgebaut, mal sehen was bei rauskommt.