Seite 1 von 1

Automatische Aktivierung der Heizperiode

Verfasst: 21. Nov 2015 18:44
von seppy
Hallo Zusammen,

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" }
Den Schalter für die Heizperiode

Code: Alles auswählen

/**
 * Switch für Heizperiode
 */
Switch GlobalHeatingPeriod
	"Heizperiode"
	(gSystem)
Und den Schwellwert.

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)
Der Sitemap Eintrag sind so aus:

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"]
2) Die Rule:

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