Hallo zusammen,
ich bräuchte nochmal eure Hilfe bzgl. meiner Heizungs-Regelung. In diesem Beitrag wurde mir bei der Regelung mit meinen Badezimmern bereits geholfen.
Code: Alles auswählen
var Timer fenstertimer = null // Timervariable definieren
rule "Test Bad oben"
when
Time cron "0 0 5 * * ?" or // Triggere täglich um 5 Uhr
Time cron "0 0 23 * * ?" or // Triggere täglich um 23 Uhr
Item Sensor_Status_Badezimmer_oben changed // Triggere wenn der Fensterkontakt geschaltet hat
then
if(now.getHourOfDay > 4 && now.getHourOfDay < 23) { // Innerhalb des Zeitfensters?
if(Sensor_Status_Badezimmer_oben.state != CLOSED) { // Fenster offen oder nicht initialisiert?
Heizkoerper_Bad_oben_Thermostat_Mode.sendCommand(0)
logInfo("Test", "Fenster im Bad geöffnet und Heizkörper abgedreht")
fenstertimer = createTimer(now.plusMinutes(30), [| // Starte Timer für Meldung
sendPushoverMessage(pushoverBuilder("Info, Fenster Bad oben 30 Min. geöffnet").withApiKey("xxxxxxxxxx").withUser("xxxxxxxxxxxx"))
fenstertimer = null
]) // Lambda in die Funktion verschoben, Lesbarkeit des Codes
} else { // Fenster ist geschlossen!
Heizkoerper_Bad_oben_Thermostat_Mode.sendCommand(1)
logInfo("Test", "Fenster im Bad geschlossen und Heizkörper aufgedreht")
if(fenstertimer !== null) { // Timer läuft?
fenstertimer.cancel // Timer abbrechen
fenstertimer = null
}
}
}
else { // Außerhalb des Zeitfensters, Heizung aus!
Heizkoerper_Bad_oben_Thermostat_Mode.sendCommand(0)
logInfo("Test", "Nachtmodus")
if(fenstertimer !== null) { // Timer läuft?
fenstertimer.cancel // Timer abbrechen
fenstertimer = null
}
}
end
Nun habe ich mir für die restlichen Heizkörper meines Hauses weitere Eurotronic Spirit gekauft. Eingebunden wurden diese bereits. Ich habe ein wenig im Netz nach Ideen zur Umsetzung gesucht und bin dabei auf eine Interessante Anleitung von Thom Dietrich gestoßen (
https://community.openhab.org/t/heating ... odes/34843).
Diese würde ich gerne in einer leicht geänderten Form in mein System integrieren.
Ich bin nun soweit das ich auf der sitemap den Modus ändern kann, das sich zu bestimmten Uhrzeiten die eingestellten Sollwerte der Thermostate ändern.
Ich würde nun gerne zwei Dinge hinzufügen.
- "Feste Heizzeit" --> Im Zeitfenster von 5 - 22.30 Uhr wird geheizt. Je nach Modi und Uhrzeit (siehe heating_mode.rules) Zwischen 22.30 und 5 Uhr sollen die Heizkörper ausgeschaltet werden. Aktuell setze ich die Thermostate um 22.30 Uhr auf 15°C.
- "Fenster offen" Erkennung --> Je nachdem welches Fenster offen Ist, sollen die Heizkörper aus dem Raum etwas heruntergeregelt werden (Eco Mode).
Nun stelle ich mir die Frage wie ich das ganze realisieren könnte.
Hier mal die aktuelle heating_mode.rules. (Modus Party und Sickday ist aktuell nur zu Testzwecken mit einem item versethen!)
Code: Alles auswählen
val String filename = "heating_mode.rules"
rule "Initialize uninitialized virtual Items"
when
System started
then
createTimer(now.plusSeconds(180)) [ |
logInfo(filename, "Executing 'System started' rule for Heating")
if (Whg_Heating_Mode.state == NULL)
{
Whg_Heating_Mode.postUpdate("NORMAL")
}
Heating_PresetNormal_Group.members.filter[item | item.state == NULL].forEach[item | item.postUpdate(20.0)]
Whg_Heating_UpdateHeater.sendCommand(ON)
]
end
rule "React on heating mode switch, send target temperatures"
when
Item Whg_Heating_Mode received update or
Item Whg_Heating_UpdateHeater received command ON
then
Whg_Heating_UpdateHeater.postUpdate(OFF)
logInfo(filename, "Heating Mode: " + Whg_Heating_Mode.state)
switch Whg_Heating_Mode.state {
case "NORMAL": {
AZ_Heizung_SetTemp.sendCommand(AZ_TempNormal.state as Number)
BDU_Heizung_SetTemp.sendCommand(BDU_TempNormal.state as Number)
BDO_Heizung_SetTemp.sendCommand(BDO_TempNormal.state as Number)
EZ_Heizung_SetTemp.sendCommand(EZ_TempNormal.state as Number)
WZKL_Heizung_SetTemp.sendCommand(WZKL_TempNormal.state as Number)
WZKR_Heizung_SetTemp.sendCommand(WZKR_TempNormal.state as Number)
WZG_Heizung_SetTemp.sendCommand(WZG_TempNormal.state as Number)
SZ_Heizung_SetTemp.sendCommand(SZ_TempNormal.state as Number)
TZ_Heizung_SetTemp.sendCommand(TZ_TempNormal.state as Number)
KUE_Heizung_SetTemp.sendCommand(KUE_TempNormal.state as Number)
KZ_Heizung_SetTemp.sendCommand(KZ_TempNormal.state as Number)
AZ_Heizung_Mode.sendCommand(1)
TZ_Heizung_Mode.sendCommand(1)
BDU_Heizung_Mode.sendCommand(1)
BDO_Heizung_Mode.sendCommand(1)
EZ_Heizung_Mode.sendCommand(1)
WZKL_Heizung_Mode.sendCommand(1)
WZKR_Heizung_Mode.sendCommand(1)
WZG_Heizung_Mode.sendCommand(1)
SZ_Heizung_Mode.sendCommand(1)
TZ_Heizung_Mode.sendCommand(1)
//KU_Heizung_Mode.sendCommand(1)
KZ_Heizung_Mode.sendCommand(1)
}
case "PARTY": {
AZ_Heizung_SetTemp.sendCommand(20.0)
AZ_Heizung_Mode.sendCommand(1)
}
case "SICKDAY": {
AZ_Heizung_SetTemp.sendCommand(23.0)
AZ_Heizung_Mode.sendCommand(1)
}
case "OFF_SUMMER": {
Heating_Theromstat_Mode.sendCommand(0)
}
default : { logError(filename, "Heating Mode unknown: " + Whg_Heating_Mode.state) }
}
end
// ========================
// mode resets
rule "End PARTY and SICKDAY mode at 2:00 in the night"
when
Time cron "0 0 2 ? * * *"
then
if (Whg_Heating_Mode.state == "PARTY" || Whg_Heating_Mode.state == "SICKDAY") {
Whg_Heating_Mode.postUpdate("NORMAL")
}
end
// ========================
// NORMAL schedule
rule "MON-FRI, 05:00"
when
Time cron "0 0 5 ? * MON-FRI *"
then
BDU_TempNormal.postUpdate(22.0)
BDO_TempNormal.postUpdate(21.0)
EZ_TempNormal.postUpdate(21.0)
WZKL_TempNormal.postUpdate(21.0)
WZKR_TempNormal.postUpdate(21.0)
WZG_TempNormal.postUpdate(21.0)
KZ_TempNormal.postUpdate(20.0)
Whg_Heating_UpdateHeater.sendCommand(ON)
end
rule "MON-FRI, 07:00"
when
Time cron "0 30 7 ? * MON-FRI *"
then
BDU_TempNormal.postUpdate(18.0)
BDO_TempNormal.postUpdate(18.0)
EZ_TempNormal.postUpdate(18.0)
WZKL_TempNormal.postUpdate(18.0)
WZKR_TempNormal.postUpdate(18.0)
WZG_TempNormal.postUpdate(18.0)
KZ_TempNormal.postUpdate(18.0)
Whg_Heating_UpdateHeater.sendCommand(ON)
end
rule "MON-FRI, 11:00"
when
Time cron "0 0 11 ? * MON-FRI *"
then
BDU_TempNormal.postUpdate(22.0)
BDO_TempNormal.postUpdate(18.0)
EZ_TempNormal.postUpdate(21.0)
WZKL_TempNormal.postUpdate(21.0)
WZKR_TempNormal.postUpdate(21.0)
WZG_TempNormal.postUpdate(21.0)
KZ_TempNormal.postUpdate(21.0)
Whg_Heating_UpdateHeater.sendCommand(ON)
end
rule "Täglich 18:00"
when
Time cron "0 0 18 1/1 * ? *"
then
AZ_TempNormal.postUpdate(20.0)
BDO_TempNormal.postUpdate(20.0)
SZ_TempNormal.postUpdate(19.0)
TZ_TempNormal.postUpdate(19.0)
Whg_Heating_UpdateHeater.sendCommand(ON)
end
rule "Täglich 18:30"
when
Time cron "0 30 18 1/1 * ? *"
then
KZ_TempNormal.postUpdate(18.0)
Whg_Heating_UpdateHeater.sendCommand(ON)
end
rule "Täglich 22:30"
when
Time cron "0 30 22 * * ?"
then
AZ_TempNormal.postUpdate(15.0)
BDU_TempNormal.postUpdate(15.0)
BDO_TempNormal.postUpdate(15.0)
EZ_TempNormal.postUpdate(15.0)
WZKL_TempNormal.postUpdate(15.0)
WZKR_TempNormal.postUpdate(15.0)
WZG_TempNormal.postUpdate(15.0)
SZ_TempNormal.postUpdate(15.0)
TZ_TempNormal.postUpdate(15.0)
KZ_TempNormal.postUpdate(15.0)
Whg_Heating_UpdateHeater.sendCommand(ON)
end
rule "SAT-SUN, 06:00"
when
Time cron "0 0 6 ? * SAT,SUN *"
then
BDU_TempNormal.postUpdate(22.0)
BDO_TempNormal.postUpdate(21.0)
EZ_TempNormal.postUpdate(21.0)
WZKL_TempNormal.postUpdate(21.0)
WZKR_TempNormal.postUpdate(21.0)
WZG_TempNormal.postUpdate(21.0)
KZ_TempNormal.postUpdate(20.0)
Whg_Heating_UpdateHeater.sendCommand(ON)
end
Ich bin für allerlei Vorschläge offen!
Liebe Grüße eleven