da ich keine Lust habe die Heizperiode manuell zu aktivieren, habe ich mir eine simple Rule dafür gebaut. Der Vorteil ist, dass die Heizperiode auch wieder deaktiviert wird, wenn beispielsweise nach einem kalten Herbstanfang die Temperaturen wieder deutlich ansteigen.
So hab ich das gelöst:
1) Die Items:
Ich habe einen Temperatur Differenzsensor, den ich auch zur Erkennung von direkter Sonneneinstrahlung nutze. Dazu aber ein andermal.
Er liefert ca. jede Minute einen Temperaturwert von draußen. Zusätzlich habe ich diese Informationen persistiert.
Außentemperatur:
Code: Alles auswählen
Number WeatherTempDiffSensor1State
"Temperatur Sensor 1 [%.1f °C]"
<temperature>
(gWetter)
{homematic="address=XXXXXX, channel=1, parameter=TEMPERATURE" }
Code: Alles auswählen
/**
* Switch für Heizperiode
*/
Switch GlobalHeatingPeriod
"Heizperiode"
(gSystem)
Ich habe diesen auch über die Sitemap konfigurierbar gemacht, so kann auch meine Frau jederzeit den Schwellwert anpassen.
Code: Alles auswählen
/**
* Schwellwert für Heizperiode
*/
Number GlobalHeatingPeriodThreshold
"Schwellwert für Heizperiode [%.1f °C]"
(gSystem)
Code: Alles auswählen
Selection item=GlobalHeatingPeriodThreshold icon="temperature" label="Schwellwert Heizperiode" mappings=[15="15°C", 16="16°C", 17="17°C", 18="18°C", 19="19°C", 20="20°C", 21="21°C"]
Die Regel aktiviert die Heizperiode, wenn in den vergangenen 5 Tagen die Durchschnittstemperatur unter dem angegebenen Schwellwert lag und schickt gleichzeitig eine WhatsApp Nachricht.
Auslöser für eine Prüfung ist entweder eine Veränderung des Schwellwerts oder ein Update der Aussentemperatur.
Code: Alles auswählen
/**
* Heizperiode schalten
*/
rule "Event_GlobalHeatingPeriod"
when
Item GlobalHeatingPeriodThreshold received update or
Item WeatherTempDiffSensor2State received update
then
var String rulemsg = null
// Prüfen ob Aussentemperatur unter Schwellwert liegt
if (WeatherTempDiffSensor2State.averageSince(now.minusDays(5)) < GlobalHeatingPeriodThreshold.state as DecimalType && GlobalHeatingPeriod.state == OFF){
rulemsg = "Die durchschnittliche Aussentemperatur der letzten 5 Tage (" + WeatherTempDiffSensor2State.averageSince(now.minusDays(5)).format("%.2f °C") + ") lag unter dem festgelegten Schwellwert (" + GlobalHeatingPeriodThreshold.state + "°C). Heizperiode wird aktiviert."
postUpdate(GlobalHeatingPeriod, ON)
logInfo("HomeBox.SystemRules:Event_GlobalHeatingPeriod", rulemsg)
executeCommandLine("/opt/yowsup/yowsup-cli@@demos@@-c@@/opt/yowsup/homebox.config@@-s@@XXXX@@" + rulemsg + "")
} else if (WeatherTempDiffSensor2State.averageSince(now.minusDays(5)) >= GlobalHeatingPeriodThreshold.state as DecimalType && GlobalHeatingPeriod.state == ON){
rulemsg = "Die durchschnittliche Aussentemperatur der letzten 5 Tage (" + WeatherTempDiffSensor2State.averageSince(now.minusDays(5)).format("%.2f °C") + ") lag über dem festgelegten Schwellwert (" + GlobalHeatingPeriodThreshold.state + "°C). Heizperiode wird deaktiviert."
postUpdate(GlobalHeatingPeriod, OFF)
logInfo("HomeBox.SystemRules:Event_GlobalHeatingPeriod", rulemsg)
executeCommandLine("/opt/yowsup/yowsup-cli@@demos@@-c@@/opt/yowsup/homebox.config@@-s@@XXXX@@" + rulemsg + "")
}
rulemsg = null
end
Vielleicht nutzt das Spielchen jemandem. Wenn Fragen sind, einfach hier posten!
Grüße,
Seppy