OpenHab 2, Snapshot 2.5 on a PI3+, z wave devices!
I want to create a rule: when bedroom light is turned on between 21:00 and 23:00, for the next 15 minutes (timer) pause before turning off the whole house lights.
I have this:
rule “Going_to_Bed”
when
Time cron “0 0/15 21-23 * * ?”
then
if (Light_FF_Bed_Wall.state == ON)
{
Light_FF_Bath_Vanity.sendCommand(OFF)
Light_FF_Dining_Wall.sendCommand(OFF)
Light_FF_Kitchen_Sink.sendCommand(OFF)
Light_LR_West_Master.sendCommand(OFF)
Light_FF_Bed_Wall.sendCommand(OFF)
}
else{}
end
But the above checks that status every 15 minutes not really creating a timer. The expiring binding is set for seconds, is there a problem calculating it out to 15 minutes? Or is there a more proper way?
rule “Going_to_Bed”
when
Item Light_FF_Bed_Wall changed to ON
then
if (now.getHourOfDay() >= 21 && now.getHourOfDay() < 23) {
createTimer(now.plusMinutes(15), [ |
Light_FF_Bath_Vanity.sendCommand(OFF)
Light_FF_Dining_Wall.sendCommand(OFF)
Light_FF_Kitchen_Sink.sendCommand(OFF)
Light_LR_West_Master.sendCommand(OFF)
Light_FF_Bed_Wall.sendCommand(OFF)
])
}
end
How that works.
As you said yourself, you want to detect if the bedroom light is turned ON so that’s the rule trigger
Then we check if the hour of the day is >= 21 or < 23
Then we create a timer that will run in 15 minutes time containing the commands to turn the lights OFF
Thanks Vincent but I still haven’t successfully created a working “delay” timer. I have spent soooo many hours reading, copy & pasting, adding and subtracting characters, nothing is working.
Simply put = When a light switch is detected ‘switching off’, between a certain time of day, turn off another light, then wait 10 seconds to turn off other lights. See this code:
// Home.Rules
var Timer timer = null
rule “Going_to_Bed”
when
Time cron “0 0/1 21-23 * * ?”
then
if (Light_Bed_Wall.state == ON)
{
Light_Porch_Light.sendCommand(OFF)
Light_Deck_Light.sendCommand(OFF)
Light_East_Door.sendCommand(OFF)
timer = createTimer(now.plusSeconds(10)) [ |
Light_West_Door.sendCommand(OFF)
Light_Bed_Wall.sendCommand(OFF)
]
}
else{}
end
All the functions after the timer do not work…
Please help b4 I Lose more hair
Your rule trigger is wrong. You say it yourself “When a light is detected switching off”. That’s your trigger. Then in the rule you check for the hour of day then you do your commands. Your commands bit is correct.
rule “Going_to_Bed”
when
Item Light_Bed_Wall changed to OFF
then
if (now.getHourOfDay() >= 21 && now.getHourOfDay() < 23) {
Light_Porch_Light.sendCommand(OFF)
Light_Deck_Light.sendCommand(OFF)
Light_East_Door.sendCommand(OFF)
createTimer(now.plusSeconds(10), [ |
Light_West_Door.sendCommand(OFF)
Light_Bed_Wall.sendCommand(OFF)
])
}
end
Thank you for your quick response, sad to say I copied and pasted your code (exactly) and changed the time 21 to 13 since it’s 3:30PM here AND it does not work! I am nearly bald!!!
In that case add some logging and check what does and what doesn’t work in your logs:
rule “Going_to_Bed”
when
Light_Bed_Wall changed to OFF
then
logInfo("Test", "Light bed wall changed to off")
if (now.getHourOfDay() >= 21 && now.getHourOfDay() < 23) {
logInfo("Test", "Light bed wall: time between 21 and 23")
Light_Porch_Light.sendCommand(OFF)
Light_Deck_Light.sendCommand(OFF)
Light_East_Door.sendCommand(OFF)
logInfo("Test", "Light bed wall: setting timer")
createTimer(now.plusSeconds(10), [ |
logInfo("Test", "Light bed wall: timer expired")
Light_West_Door.sendCommand(OFF)
Light_Bed_Wall.sendCommand(OFF)
])
}
end
Rolf, As soon as I load your version of the rule using visual studio without running it I get the following
2019-02-17 22:16:51.252 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model ‘home.rules’ has errors, therefore ignoring it: [4,6]: no viable alternative at input ‘“’