Skip to content

Instantly share code, notes, and snippets.

@psychoticbeef
Created November 26, 2018 21:11
Show Gist options
  • Save psychoticbeef/0fc2f721689b075bba5e58798b85a9d9 to your computer and use it in GitHub Desktop.
Save psychoticbeef/0fc2f721689b075bba5e58798b85a9d9 to your computer and use it in GitHub Desktop.
my heating rules
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