Created
November 26, 2018 21:11
-
-
Save psychoticbeef/0fc2f721689b075bba5e58798b85a9d9 to your computer and use it in GitHub Desktop.
my heating rules
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
val Number tempShower = 23.0 | |
val Number tempComfortBath = 22.0 | |
val Number tempComfort = 21.5 | |
val Number tempMid = 19.0 | |
val Number tempSleep = 18.5 | |
val Number tempLower = 17.0 | |
val Number tempChill = 15.0 | |
val Number tempAway = 15.0 | |
val Number tempAwayLonger = 13.0 | |
val Number tempOff = 10 | |
// TODO: fix startup, fix switching to schedule (does not properly set away mode temperatures) | |
// everything but 'normal', since 'normal' is schedule-based | |
rule "presence fuer b1" | |
when | |
Item Heating_Mode_B1 received update | |
then | |
switch Heating_Mode_B1.state { | |
case "NORMAL": { | |
Bedroom1_present.postUpdate(Bedroom1_present_TT.state) | |
} | |
case "PRESENT": { | |
Bedroom1_present.postUpdate(ON) | |
} | |
case "AWAY": { | |
Bedroom1_present.postUpdate(OFF) | |
} | |
case "AWAY_LONG": { | |
Bedroom1_present.postUpdate(OFF) | |
} | |
default: { | |
} | |
} | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "presence fuer b2" | |
when | |
Item Heating_Mode_B2 received update | |
then | |
switch Heating_Mode_B2.state { | |
case "NORMAL": { | |
Bedroom2_present.postUpdate(Bedroom2_present_TT.state) | |
} | |
case "PRESENT": { | |
Bedroom2_present.postUpdate(ON) | |
} | |
case "AWAY": { | |
Bedroom2_present.postUpdate(OFF) | |
} | |
case "AWAY_LONG": { | |
Bedroom2_present.postUpdate(OFF) | |
} | |
default: { | |
} | |
} | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "commit heating changes" | |
when | |
Item Heating_Commit received command ON | |
then | |
Heating_Commit.postUpdate(OFF) | |
logInfo("heizung-modules.rules", "test") | |
if (Heating_Mode_B1.state == "NORMAL") { | |
logInfo("heizung-modules.rules", "b1_normal") | |
Bedroom1_present.postUpdate(Bedroom1_present_TT.state) | |
} | |
if (Heating_Mode_B2.state == "NORMAL") { | |
logInfo("heizung-modules.rules", "b2_normal") | |
Bedroom2_present.postUpdate(Bedroom2_present_TT.state) | |
} | |
var b1_present = false | |
if (Bedroom1_present.state == ON) { | |
logInfo("heizung-modules.rules", "setting b1 present!") | |
b1_present = true | |
} | |
var b2_present = false | |
if (Bedroom2_present.state == ON) { | |
logInfo("heizung-modules.rules", "setting b2 present!") | |
b2_present = true | |
} | |
var anyone_present = b1_present || b2_present | |
//var both_present = b1_present && b2_present | |
if (Heating_Mode_B1.state == "AWAY_LONG" && Heating_Mode_B2.state == "AWAY_LONG") { | |
logInfo("heizung-modules.rules", "both away long") | |
maxKitchenSetTemp.sendCommand(tempAway) | |
maxBathroomSetTemp.sendCommand(tempAway) | |
maxBedroom1SetTemp.sendCommand(tempAway) | |
maxBedroom2LSetTemp.sendCommand(tempAway) | |
return | |
} | |
if (Heating_Mode_General.state == "OFF") { | |
logInfo("heizung-modules.rules", "all off") | |
maxKitchenSetTemp.sendCommand(tempOff) | |
maxBathroomSetTemp.sendCommand(tempOff) | |
maxBedroom1SetTemp.sendCommand(tempOff) | |
maxBedroom2LSetTemp.sendCommand(tempOff) | |
return | |
} | |
if (Heating_Mode_General.state == "PARTY") { | |
logInfo("heizung-modules.rules", "party!") | |
maxKitchenSetTemp.sendCommand(tempComfort) | |
maxBathroomSetTemp.sendCommand(tempComfortBath) | |
maxBedroom1SetTemp.sendCommand(tempComfort) | |
maxBedroom2LSetTemp.sendCommand(tempComfort) | |
return | |
} | |
if (anyone_present) { | |
logInfo("heizung-modules.rules", "someone is here!") | |
maxKitchenSetTemp.sendCommand(Kitchen_Heat_Present_Temp.state as Number) | |
maxBathroomSetTemp.sendCommand(Bathroom_Heat_Present_Temp.state as Number) | |
} else { | |
logInfo("heizung-modules.rules", "noone is here!") | |
maxKitchenSetTemp.sendCommand(Kitchen_Heat_Away_Temp.state as Number) | |
maxBathroomSetTemp.sendCommand(Bathroom_Heat_Away_Temp.state as Number) | |
} | |
if (b1_present) { | |
logInfo("heizung-modules.rules", "b1 present!") | |
maxBedroom1SetTemp.sendCommand(Bedroom1_Heat_Present_Temp.state as Number) | |
} else { | |
logInfo("heizung-modules.rules", "b1 not present!") | |
maxBedroom1SetTemp.sendCommand(Bedroom1_Heat_Away_Temp.state as Number) | |
} | |
if (b2_present) { | |
logInfo("heizung-modules.rules", "b2 present!") | |
maxBedroom2LSetTemp.sendCommand(Bedroom2_Heat_Present_Temp.state as Number) | |
} else { | |
logInfo("heizung-modules.rules", "b2 not present!") | |
maxBedroom2LSetTemp.sendCommand(Bedroom2_Heat_Away_Temp.state as Number) | |
} | |
end | |
rule "Initialize uninitialized virtual Items" | |
when | |
System started | |
then | |
createTimer(now.plusSeconds(180)) [ | | |
if (Heating_Mode_B1.state == NULL) Heating_Mode_B1.postUpdate("NORMAL") | |
if (Heating_Mode_B2.state == NULL) Heating_Mode_B2.postUpdate("NORMAL") | |
] | |
end | |
rule "Bedroom2L master" | |
when | |
Item maxBedroom2LSetTemp received update | |
then | |
maxBedroom2RSetTemp.sendCommand(maxBedroom2LSetTemp.state as Number) | |
end | |
rule "settings bedroom2" | |
when | |
Item Heating_Mode_B2 received update | |
then | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "settings bedroom1" | |
when | |
Item Heating_Mode_B1 received update | |
then | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "settings general" | |
when | |
Item Heating_Mode_General received update | |
then | |
Heating_Commit.sendCommand(ON) | |
end | |
//rule "kek 9:00, weekend" | |
//when | |
// Time cron "0 32 0 ? * SAT-SUN *" | |
//then | |
// if (Heating_Mode_B1.state == "NORMAL") { | |
// Bedroom1_present.postUpdate(ON) | |
// Bedroom1_present_day.postUpdate(ON) | |
// } | |
// if (Heating_Mode_B2.state == "NORMAL") { | |
// Bedroom2_present.postUpdate(OFF) | |
// Bedroom2_present_day.postUpdate(OFF) | |
// } | |
// Kitchen_Heat_Present_Temp.postUpdate(tempSleep) | |
// Bathroom_Heat_Present_Temp.postUpdate(tempSleep) | |
// Bedroom1_Heat_Present_Temp.postUpdate(tempSleep) | |
// Bedroom2_Heat_Present_Temp.postUpdate(tempSleep) | |
// Kitchen_Heat_Away_Temp.postUpdate(tempLower) | |
// Bathroom_Heat_Away_Temp.postUpdate(tempLower) | |
// Bedroom1_Heat_Away_Temp.postUpdate(tempLower) | |
// Bedroom2_Heat_Away_Temp.postUpdate(tempLower) | |
// | |
// Heating_Commit.sendCommand(ON) | |
//end | |
rule "battery empty notification" | |
when | |
Member of Batteries changed | |
then | |
sendPushoverMessage(pushoverBuilder("Batterie leer: " + Batteries.members.filter(s | s.state == ON).last)) | |
end | |
rule "9:00, weekend" | |
when | |
Time cron "0 0 9 ? * SAT-SUN *" | |
then | |
Bedroom1_present_TT.postUpdate(ON) | |
Bedroom1_present_day_TT.postUpdate(ON) | |
Bedroom2_present_TT.postUpdate(OFF) | |
Bedroom2_present_day_TT.postUpdate(OFF) | |
Kitchen_Heat_Present_Temp.postUpdate(tempComfort) | |
Bathroom_Heat_Present_Temp.postUpdate(tempComfortBath) | |
Bedroom1_Heat_Present_Temp.postUpdate(tempComfort) | |
Bedroom2_Heat_Present_Temp.postUpdate(tempComfort) | |
Kitchen_Heat_Away_Temp.postUpdate(tempLower) | |
Bathroom_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom1_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom2_Heat_Away_Temp.postUpdate(tempLower) | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "6:00, monday, bathroom" | |
when | |
Time cron "0 0 6 ? * MON *" | |
then | |
Bedroom1_present.postUpdate(ON) | |
Bedroom1_present_day.postUpdate(ON) | |
Bedroom2_present.postUpdate(OFF) | |
Bedroom2_present_day.postUpdate(OFF) | |
Bathroom_Heat_Present_Temp.postUpdate(tempShower) | |
Bathroom_Heat_Away_Temp.postUpdate(tempLower) | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "5:00 tue-fri bathroom" | |
when | |
Time cron "0 0 5 ? * TUE-FRI *" | |
then | |
Bedroom1_present_TT.postUpdate(ON) | |
Bedroom1_present_day_TT.postUpdate(ON) | |
Bedroom2_present_TT.postUpdate(ON) | |
Bedroom2_present_day_TT.postUpdate(ON) | |
Bathroom_Heat_Present_Temp.postUpdate(tempShower) | |
Bathroom_Heat_Away_Temp.postUpdate(tempLower) | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "8:00, weekday, bathroom" | |
when | |
Time cron "0 0 8 ? * MON-FRI *" | |
then | |
Bedroom1_present_TT.postUpdate(OFF) | |
Bedroom1_present_day_TT.postUpdate(ON) | |
Bedroom2_present_TT.postUpdate(OFF) | |
Bedroom2_present_day_TT.postUpdate(ON) | |
Kitchen_Heat_Present_Temp.postUpdate(tempComfort) | |
Bathroom_Heat_Present_Temp.postUpdate(tempComfort) | |
Bedroom1_Heat_Present_Temp.postUpdate(tempComfort) | |
Bedroom2_Heat_Present_Temp.postUpdate(tempComfort) | |
Kitchen_Heat_Away_Temp.postUpdate(tempLower) | |
Bathroom_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom1_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom2_Heat_Away_Temp.postUpdate(tempLower) | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "17:00, weekday" | |
when | |
Time cron "0 0 17 ? * MON-THU *" | |
then | |
Bedroom1_present_TT.postUpdate(ON) | |
Bedroom1_present_day_TT.postUpdate(ON) | |
Bedroom2_present_TT.postUpdate(ON) | |
Bedroom2_present_day_TT.postUpdate(ON) | |
Kitchen_Heat_Present_Temp.postUpdate(tempComfort) | |
Bathroom_Heat_Present_Temp.postUpdate(tempComfortBath) | |
Bedroom1_Heat_Present_Temp.postUpdate(tempComfort) | |
Bedroom2_Heat_Present_Temp.postUpdate(tempComfort) | |
Kitchen_Heat_Away_Temp.postUpdate(tempLower) | |
Bathroom_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom1_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom2_Heat_Away_Temp.postUpdate(tempLower) | |
Heating_Commit.sendCommand(ON) | |
end | |
rule "22:00, weekday" | |
when | |
Time cron "0 0 22 ? * MON-THU *" | |
then | |
Bedroom1_present_TT.postUpdate(ON) | |
Bedroom1_present_day_TT.postUpdate(ON) | |
Bedroom2_present_TT.postUpdate(ON) | |
Bedroom2_present_day_TT.postUpdate(ON) | |
Kitchen_Heat_Present_Temp.postUpdate(tempSleep) | |
Bathroom_Heat_Present_Temp.postUpdate(tempSleep) | |
Bedroom1_Heat_Present_Temp.postUpdate(tempSleep) | |
Bedroom2_Heat_Present_Temp.postUpdate(tempSleep) | |
Kitchen_Heat_Away_Temp.postUpdate(tempLower) | |
Bathroom_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom1_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom2_Heat_Away_Temp.postUpdate(tempLower) | |
Heating_Commit.sendCommand(ON) | |
end | |
// weekends | |
rule "22:00, weekend, bedroom2 mode" | |
when | |
Time cron "0 0 22 ? * FRI-SUN *" | |
then | |
Bedroom1_present_TT.postUpdate(ON) | |
Bedroom1_present_day_TT.postUpdate(ON) | |
Bedroom2_present_TT.postUpdate(OFF) | |
Bedroom2_present_day_TT.postUpdate(OFF) | |
Kitchen_Heat_Present_Temp.postUpdate(tempSleep) | |
Bathroom_Heat_Present_Temp.postUpdate(tempSleep) | |
Bedroom1_Heat_Present_Temp.postUpdate(tempSleep) | |
Bedroom2_Heat_Present_Temp.postUpdate(tempSleep) | |
Kitchen_Heat_Away_Temp.postUpdate(tempLower) | |
Bathroom_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom1_Heat_Away_Temp.postUpdate(tempLower) | |
Bedroom2_Heat_Away_Temp.postUpdate(tempLower) | |
Heating_Commit.sendCommand(ON) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment