Hallo zusammen,
ich wollte euch hier einmal kurz zeigen, wie ich die Heizungssteuerung und Fenster-auf-Szenarien in OpenHAB umgesetzt habe. Hintergrund ist der, dass ich, wie vermutlich viele andere, das System nur noch laufen lassen will, bis die Hardware den Geist aufgibt, ich habe keine Ersatzgeräte. Wenn nun ein Heizkörperthermostat oder ein Fenstersensor aufgibt, dann benötige ich einen neuen von einem anderen Hersteller und kann somit nicht mehr die Szenarien von der SHC nutzen. Deswegen habe ich alles in OpenHAB umgezogen und muss im Zweifel nur den ITem-Namen in den Rules wechseln und alles läuft wie vorher. Daher hier meine Rules für die doch sehr wichtigen Heizungs-Szenarien:
1. Vorbereitung
Als erstes benötigen wir für jeden Raum ein extra Item, welches die Temperatur in bestimmten Fällen zwischenspeichert. Hier ein kleines Beispiel, wie die bei mir aussehen:
2. Regeln Heizungssteuerung
Ich zeige das hier jetzt mal Beispielhaft an meinem Wohnzimmer, welches ein Fenster und eine Terassentür hat, somit müssen zwei Sensoren mit in die Regeln aufgenommen werden. Kommen wir aber zuerst zur Heizungssteuerung selbst, in diesem Beispiel mit unterschiedlichen Regeln für Montag-Donnerstag, Freitag, Samstag, Sonntag:
rule "SteuerungWohnzimmerheizung"
when
Time cron "0 0/30 * * * ? *" // Jede 30 Minuten überprüfen
then
var dayOfWeek = now.getDayOfWeek.getValue
var hourOfDay = now.getHour()
var minuteOfHour = now.getMinute()
var targetTemperature = 0.0
if (dayOfWeek >= 1 && dayOfWeek <= 4) { // Montag bis Donnerstag
if (hourOfDay == 13 && minuteOfHour == 0) {
targetTemperature = 21.5
} else if (hourOfDay == 21 && minuteOfHour == 0) {
targetTemperature = 18.5
}
} else if (dayOfWeek == 5) { // Freitag
if (hourOfDay == 13 && minuteOfHour == 0) {
targetTemperature = 21.5
} else if (hourOfDay == 22 && minuteOfHour == 30) {
targetTemperature = 18.5
}
} else if (dayOfWeek == 6) { // Samstag
if (hourOfDay == 7 && minuteOfHour == 0) {
targetTemperature = 21.5
} else if (hourOfDay == 22 && minuteOfHour == 30) {
targetTemperature = 18.5
}
} else if (dayOfWeek == 7) { // Sonntag
if (hourOfDay == 7 && minuteOfHour == 0) {
targetTemperature = 21.5
} else if (hourOfDay == 21 && minuteOfHour == 0) {
targetTemperature = 18.5
}
}
if (targetTemperature > 0.0 && Wohnzimmer_Fenster_OffenGeschlossen.state == CLOSED && Wohnzimmer_Tur_OffenGeschlossen.state == CLOSED && Status_Heizen.state == ON) {
RST2_Wohnzimmerheizung_Wohnzimmer_Solltemperatur.sendCommand(targetTemperature)
} else if (targetTemperature > 0.0 && Wohnzimmer_Fenster_OffenGeschlossen.state == OPEN || targetTemperature > 0.0 && Wohnzimmer_Tur_OffenGeschlossen.state == OPEN) {
Stored_Temperature_Wohnzimmer.postUpdate(targetTemperature)
}
end
Alles anzeigen
Die Regel wird alle halbe Stunde ausgeführt und prüft dann, ob ein Zeitpunkt erreicht ist, an dem die Temperatur umgestellt werden soll.
Direkt umgestellt wird nur, wenn alle Fenster zu sind und der Zustand Heizen aktiv ist. Wenn aber ein Fenster offen ist, dann wird die neue Temperatur nur in unseren Zwischenspeicher geschrieben. Wieso das so ist, sehen wir bei den nächsten Regeln.
3. Regeln Fenster auf und zu
Wenn nun ein Fenster geöffnet wird, soll die aktuelle Temperatur gespeichert werden und die Heizung ausgeschaltet werden:
rule "Wohnzimmer Fenster geöffnet"
when
Item Wohnzimmer_Fenster_OffenGeschlossen changed to OPEN or
Item Wohnzimmer_Tur_OffenGeschlossen changed to OPEN
then
if (Status_Heizen.state == ON && RST2_Wohnzimmerheizung_Wohnzimmer_Solltemperatur.state as Number != 6|°C) {
val currentTemperature = RST2_Wohnzimmerheizung_Wohnzimmer_Solltemperatur.state as Number
Stored_Temperature_Wohnzimmer.postUpdate(currentTemperature)
RST2_Wohnzimmerheizung_Wohnzimmer_Solltemperatur.sendCommand(6.0)
}
end
Alles anzeigen
Wenn dann wieder beide Fenster geschlossen sind, soll die abgespeicherte Temperatur wieder ans HKT gesendet werden.
rule "Wohnzimmer Fenster geschlossen"
when
Item Wohnzimmer_Fenster_OffenGeschlossen changed to CLOSED or
Item Wohnzimmer_Tur_OffenGeschlossen changed to CLOSED
then
if (Status_Heizen.state == ON && Wohnzimmer_Fenster_OffenGeschlossen.state == CLOSED && Wohnzimmer_Tur_OffenGeschlossen.state == CLOSED) {
RST2_Wohnzimmerheizung_Wohnzimmer_Solltemperatur.sendCommand(Stored_Temperature_Wohnzimmer.state as Number)
}
end
Und hier kommt auch die Heizungssteuerung wieder ins Spiel: Wenn nämlich, während das Fenster geöffnet ist, ein Zeitpunkt erreicht wird, in dem die Temperatur geändert werden soll, wird dies nach schließen des Fensters mit berücksichtigt, da der Zwischenspeicher von der Steuerung überschrieben wurde.
Die Regeln funktionieren bei mir wunderbar und ich hoffe, dass ich hiermit einigen helfen konnte.
Der Vorteil ist natürlich, dass ich wenn ein Gerät kaputt geht, nur z.B. "RST2_Wohnzimmerheizung_Wohnzimmer_Solltemperatur" durch den neuen Gerätenamen austauschen muss und alles läuft wieder nach einer Sekunde Arbeit.