Da ich auch über den Tellerrand schaue und mich in Homeassistant versuche, zeige ich hier meinen Workaround für das bekannte, anscheinend schon lange bestehende Problem, dass der Wert der Steigung beim Ableitungssensor nicht aktualisiert wird, falls das Eingangssignal keine neuen Werte liefert.
Ich verwende den Ableitungssensor z.B., um die Veränderung des Zisterneninhalts festzustellen. Auf Basis der Steigung in Liter/Stunde kann ich in einem weiteren Template Sensor berechnen, wie lange es noch dauert, bis bei dieser Steigung die Zisterne voll bzw. leer ist.
Da der Zisterneninhalt nach Ende des Regens, oder nach Ende der Wasserentnahme hier sehr stabil bleibt, blieb immer die letzte Steigung beim Ableitungssensor stehen.
Workaround:
Der Ableitungssensor bekommt nicht den Roh-Messwert der Zisterne sondern den Messwert + Zufallszahl
Also:
1. Zufallszahl Helfer erstellen mit MIN=1; MAX=100 Maßeiheit=L
2. Template Sensor für den "korrigierten" Messwert erstellen:
3. Ableitungssensor mit den Daten des minimal rauschenden Messwertes erstellen
4. Mit den Daten hab ich dann einen Template Sensor für die Textausgabe gefüttert
Ich verwende den Ableitungssensor z.B., um die Veränderung des Zisterneninhalts festzustellen. Auf Basis der Steigung in Liter/Stunde kann ich in einem weiteren Template Sensor berechnen, wie lange es noch dauert, bis bei dieser Steigung die Zisterne voll bzw. leer ist.
Da der Zisterneninhalt nach Ende des Regens, oder nach Ende der Wasserentnahme hier sehr stabil bleibt, blieb immer die letzte Steigung beim Ableitungssensor stehen.
Workaround:
Der Ableitungssensor bekommt nicht den Roh-Messwert der Zisterne sondern den Messwert + Zufallszahl
Also:
1. Zufallszahl Helfer erstellen mit MIN=1; MAX=100 Maßeiheit=L
2. Template Sensor für den "korrigierten" Messwert erstellen:
Code:
{{ (states('sensor.zisterne_wasserstand_in_liter') | int()) + (states('sensor.zisterne_helfer_zufallszahl') | float(0) / 10000) }}
Code:
- platform: derivative source: sensor.zisterne_wasserstand_in_liter_incl_random name: Zisterne Wassermenge Veränderung round: 2 unit_time: h unit: L/h time_window: "00:04:00"
Code:
{% set max = states('input_number.zisterne_fassungsvermogen') | float(0) %} {% set act = states('sensor.zisterne_wasserstand_in_liter') | float(0) %} {% set change = states('sensor.zisterne_wassermenge_veranderung') | float(0) %} {% set changeAbs = change | float(0) | abs %} {% if act < max %} {% set remaining = max - act | float(0) %} {% else %} {% set remaining = 0 %} {% endif %} {% if change > 150.0 and remaining > 0 %} Zisterne voll in {{ (remaining / changeAbs * 60) | round(0) }} Minuten. Aktuell: Plus {{ changeAbs | int() }} Liter pro Stunde. {% elif change > 150.0 and remaining == 0 %} Zisterne bereits übervoll!! Aktuell: Plus {{ changeAbs | int() }} Liter pro Stunde. {% elif change < -150.0 and remaining > 0%} Zisterne leer in {{ (act / changeAbs * 60) | round() }} Minuten. Aktuell: Minus {{ changeAbs | int() }} Liter pro Stunde. {% elif change < -150.0 and remaining == 0%} Zisterne noch übervoll! Aktuell: Minus {{ changeAbs | int() }} Liter pro Stunde. {% else %} Nur minimale Wasserstand Veränderung {% endif %}