Hi guys,
I’m absolutely new to home automation. I’ve started my first steps with some Thermostatic Valve and tried to make some rules. I got some inspiration out of the Community. But for some reason the rules are not working properly. I guess the rules are working but the Valve dont take the new temperatures sometimes.
Items Definition:
Number WZ_Heating_TargetTemp "Wohnzimmer Zieltemperatur [%.1f °C]" { channel="zwave:device:08fe2912:node7:thermostat_setpoint_heating" }
Number BZ_Heating_TargetTemp "Badezimmer Zieltemperatur [%.1f °C]" { channel="zwave:device:08fe2912:node8:thermostat_setpoint_heating" }
Number K_Heating_TargetTemp "Kueche Zieltemperatur [%.1f °C]" { channel="zwave:device:08fe2912:node9:thermostat_setpoint_heating" }
Number WZ_Heating_Mode "Wohnzimmer Heizmodus" <temperature> { channel="zwave:device:08fe2912:node7:thermostat_mode"}
Number BZ_Heating_Mode "Badezimmer Heizmodus" <temperature> { channel="zwave:device:08fe2912:node8:thermostat_mode"}
Number K_Heating_Mode "Kueche Heizmodus" <temperature> { channel="zwave:device:08fe2912:node9:thermostat_mode"}
Number WZ_Battery "Wohnzimmer Batterie [%d %%]" <Battery> { channel="zwave:device:08fe2912:node7:battery-level"}
Number BZ_Battery "Badezimmer Batterie [%d %%]" <Battery> { channel="zwave:device:08fe2912:node8:battery-level"}
Number K_Battery "Kueche Batterie [%d %%]" <Battery> {channel="zwave:device:08fe2912:node9:battery-level"}
String Heating_Mode "Global Heating Mode [%s]"
Switch Heating_UpdateHeaters "Send Target Temperatures to Heaters"
Group Heating_PresetNormal_Group
Number WZ_Heating_PresetTempNormal "Wohnzimmer Heating Preset (Normal Mode) [%.1f °C]" (Heating_PresetNormal_Group)
Number BZ_Heating_PresetTempNormal "Badezimmer Heating Preset (Normal Mode) [%.1f °C]" (Heating_PresetNormal_Group)
Number K_Heating_PresetTempNormal "Kueche Heating Preset (Normal Mode) [%.1f °C]" (Heating_PresetNormal_Group)
Rules Definition
val String filename = "heating_mode.rules"
// vordefinierte Temperaturen
val Number tempHigh = 23.0
val Number tempComfort = 21.0
val Number tempMid = 19.0
val Number tempLower = 17.0
val Number tempChill = 15.0
val Number tempAway = 15.0
val Number tempAwayLonger = 13.0
val Number tempOff = 4.5
// Heizmodi für die ganze Wohnung:
// NORMAL: Betriebsmodus für die normale Arbeitswoche
// HOMEOFFICE: Folgt Normal
// PARTY: Konstante Beheizung, automatischer Wechsel zu NORMAL in der Nacht (nach der Party oder dem besonderen Tag)
// SICKDAY: Wärmere Beheizung für den laufenden Tag (Krank zuhause)
// WEEKEND_TRIP: leicht abgesenkte Temperatur über das Wochenende, automatischer Wechsel zu NORMAL am nächsten Montag morgen
// AWAY: Unterwegs/längere Zeit abwesend, abgesenkte Temperatur für einen undefinierten Zeitraum
// OFF_SUMMER: alle Heizkörper sind aus (Sommerbetrieb)
// CALENDAR: einzelne Kalender Termine überschreiben das aktuelle Zeitprogramm
// AUTO_DEVICE: Wechselt Gerät in automatik Modus, keine automatische Beeinflussung
// MANU_DEVICE: Wechselt Gerät in manuellen Modus, keine automatische Beeinflussung
rule "Initialize uninitialized virtual Items"
when
System started
then
createTimer(now.plusSeconds(180)) [ |
logInfo(filename, "Executing 'System started' rule for Heating")
if (Heating_Mode.state == NULL) Heating_Mode.postUpdate("NORMAL")
Heating_PresetNormal_Group.members.filter[item | item.state == NULL].forEach[item | item.postUpdate(19.0)]
]
end
rule "Heizmodus umschalten und Stellglieder setzen"
when
Item Heating_Mode received update or
Item Heating_UpdateHeater received command ON
then
Heating_UpdateHeaters.postUpdate(OFF)
logInfo(filename, "Heating Mode: " + Heating_Mode.state)
switch Heating_Mode.state {
case "NORMAL": {
WZ_Heating_TargetTemp.sendCommand(WZ_Heating_PresetTempNormal.state as Number)
BZ_Heating_TargetTemp.sendCommand(BZ_Heating_PresetTempNormal.state as Number)
K_Heating_TargetTemp.sendCommand(K_Heating_PresetTempNormal.state as Number)
}
case "PARTY": {
WZ_Heating_TargetTemp.sendCommand(21.0)
BZ_Heating_TargetTemp.sendCommand(15.0)
K_Heating_TargetTemp.sendCommand(19.0)
}
case "SICKDAY": {
WZ_Heating_TargetTemp.sendCommand(23.0)
BZ_Heating_TargetTemp.sendCommand(19.0)
K_Heating_TargetTemp.sendCommand(23.0)
}
case "WEEKEND_TRIP": {
WZ_Heating_TargetTemp.sendCommand(15.0)
BZ_Heating_TargetTemp.sendCommand(15.0)
K_Heating_TargetTemp.sendCommand(15.0)
}
case "AWAY": {
WZ_Heating_TargetTemp.sendCommand(13.0)
BZ_Heating_TargetTemp.sendCommand(13.0)
K_Heating_TargetTemp.sendCommand(13.0)
}
case "OFF_SUMMER": {
WZ_Heating_TargetTemp.sendCommand(8.0)
BZ_Heating_TargetTemp.sendCommand(8.0)
K_Heating_TargetTemp.sendCommand(8.0)
}
default : { logError(filename, "Heating Mode unknown: " + Heating_Mode.state) }
}
end
// ========================
// mode resets
rule "End PARTY and SICKDAY mode at 23:00 in the night"
when
Time cron "0 0 23 ? * * *"
then
if (Heating_Mode.state == "PARTY" || Heating_Mode.state == "SICKDAY") {
Heating_Mode.postUpdate("NORMAL")
}
end
rule "End WEEKEND_TRIP mode at 22:00 on Sunday"
when
Time cron "0 0 22 ? * SUN *"
then
if (Heating_Mode.state == "WEEKEND_TRIP") {
Heating_Mode.postUpdate("NORMAL")
}
end
// ========================
// NORMAL schedule
rule "17:00"
when
Time cron "0 0 17 ? * * *"
then
WZ_Heating_PresetTempNormal.postUpdate(21.0)
BZ_Heating_PresetTempNormal.postUpdate(17.0)
K_Heating_PresetTempNormal.postUpdate(20.0)
Heating_UpdateHeaters.sendCommand(ON)
end
rule "20:30"
when
Time cron "0 30 20 ? * * *"
then
WZ_Heating_PresetTempNormal.postUpdate(22.0)
BZ_Heating_PresetTempNormal.postUpdate(19.0)
K_Heating_PresetTempNormal.postUpdate(20.0)
Heating_UpdateHeaters.sendCommand(ON)
end
rule "22:30"
when
Time cron "0 30 22 ? * * *"
then
WZ_Heating_PresetTempNormal.postUpdate(17.0)
BZ_Heating_PresetTempNormal.postUpdate(17.0)
K_Heating_PresetTempNormal.postUpdate(17.0)
Heating_UpdateHeaters.sendCommand(ON)
end
rule "7:30, weekend"
when
Time cron "0 30 7 ? * SAT-SUN *"
then
WZ_Heating_PresetTempNormal.postUpdate(21.0)
BZ_Heating_PresetTempNormal.postUpdate(22.0)
K_Heating_PresetTempNormal.postUpdate(21.5)
Heating_UpdateHeaters.sendCommand(ON)
end
rule "9:30, weekend"
when
Time cron "0 30 9 ? * SAT-SUN *"
then
BZ_Heating_PresetTempNormal.postUpdate(17.0)
K_Heating_PresetTempNormal.postUpdate(20.0)
Heating_UpdateHeaters.sendCommand(ON)
end
rule "5:30, weekday, Kueche"
when
Time cron "0 30 5 ? * MON-FRI *"
then
K_Heating_PresetTempNormal.postUpdate(21.5)
Heating_UpdateHeaters.sendCommand(ON)
end
rule "6:30, weekday, Kueche"
when
Time cron "0 30 6 ? * MON-FRI *"
then
K_Heating_PresetTempNormal.postUpdate(17.0)
Heating_UpdateHeaters.sendCommand(ON)
end
rule "6:00, weekday, Bad"
when
Time cron "0 00 6 ? * MON-FRI *"
then
BZ_Heating_PresetTempNormal.postUpdate(23.0)
Heating_UpdateHeaters.sendCommand(ON)
end
rule "7:00, weekday, Bad"
when
Time cron "0 00 7 ? * MON-FRI *"
then
BZ_Heating_PresetTempNormal.postUpdate(17.0)
Heating_UpdateHeaters.sendCommand(ON)
end
Events.log e.g.
2019-03-11 05:30:00.034 [ome.event.ItemCommandEvent] - Item 'Heating_UpdateHeaters' received command ON
2019-03-11 05:30:00.037 [vent.ItemStateChangedEvent] - K_Heating_PresetTempNormal changed from 17.0 to 21.5
2019-03-11 06:00:00.020 [ome.event.ItemCommandEvent] - Item 'Heating_UpdateHeaters' received command ON
2019-03-11 06:00:00.022 [vent.ItemStateChangedEvent] - BZ_Heating_PresetTempNormal changed from 17.0 to 23.0
2019-03-11 06:30:00.014 [ome.event.ItemCommandEvent] - Item 'Heating_UpdateHeaters' received command ON
2019-03-11 06:30:00.020 [vent.ItemStateChangedEvent] - K_Heating_PresetTempNormal changed from 21.5 to 17.0
2019-03-11 07:00:00.009 [ome.event.ItemCommandEvent] - Item 'Heating_UpdateHeaters' received command ON
2019-03-11 07:00:00.010 [vent.ItemStateChangedEvent] - BZ_Heating_PresetTempNormal changed from 23.0 to 17.0