hi all, im looking for a little help with a light timer rule. im getting an error in the logs and im not sure what’s causing it.
2018-12-16 13:50:02.077 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Motion Timer in the Kitchen': cannot invoke method public abstract boolean org.eclipse.smarthome.model.script.actions.Timer.reschedule(org.joda.time.base.AbstractInstant) on null
my rule file is as follows
var Timer KitchenLightsTimer = null
val int timeoutMinutesMorning = 60 // choose an appropriate value
val int timeoutMinutesDay = 60 // choose an appropriate value
val int timeoutMinutesAfternoon = 60 // choose an appropriate value
val int timeoutMinutesEvening = 60 // choose an appropriate value
val int timeoutMinutesNight = 60 // choose an appropriate value
val int timeoutMinutesBed = 5 // choose an appropriate value
rule "Kitchen_Motion_Timer ON"
when
Item Lounge_Motion received update ON
then
Kitchen_Motion_Timer.sendCommand(ON)
end
rule "Kitchen_Motion_Timer OFF"
when
Item Kitchen_Motion_Timer received update OFF
then
sendCommand(Kitchen_Light, "0")
sendCommand(Kitchen_PendantLightLeft, "82,55,0")
sendCommand(Kitchen_PendantLightCenter, "82,55,0")
sendCommand(Kitchen_PendantLightRight, "82,55,0")
postUpdate(All_Lights, OFF)
end
rule "Motion Timer in the Kitchen"
when
Item Kitchen_Motion_Timer received update ON
then
if((KitchenLightsTimer == null) && (vTimeOfDay.state == "MORNING")) {
KitchenLightsTimer = createTimer(now.plusMinutes(timeoutMinutesMorning ), [|
Kitchen_Motion_Timer.sendCommand(OFF)
KitchenLightsTimer = null
])
}
else {
KitchenLightsTimer.reschedule(now.plusMinutes(timeoutMinutesMorning ))
sendNotification(“***********, "Kitchen Light Timer Has Been Reset!!")
}
if(KitchenLightsTimer == null) {
KitchenLightsTimer = createTimer(now.plusMinutes(timeoutMinutesDay ), [|
Kitchen_Motion_Timer.sendCommand(OFF)
KitchenLightsTimer = null
])
}
else {
KitchenLightsTimer.reschedule(now.plusMinutes(timeoutMinutesDay ))
sendNotification(“*********”, "Kitchen Light Timer Has Been Reset!!")
}
if(KitchenLightsTimer == null) {
KitchenLightsTimer = createTimer(now.plusMinutes(timeoutMinutesAfternoon ), [|
Kitchen_Motion_Timer.sendCommand(OFF)
KitchenLightsTimer = null
])
}
else {
KitchenLightsTimer.reschedule(now.plusMinutes(timeoutMinutesAfternoon ))
sendNotification(“***********”, "Kitchen Light Timer Has Been Reset!!")
}
if(KitchenLightsTimer == null) {
KitchenLightsTimer = createTimer(now.plusMinutes(timeoutMinutesEvening ), [|
Kitchen_Motion_Timer.sendCommand(OFF)
KitchenLightsTimer = null
])
}
else {
KitchenLightsTimer.reschedule(now.plusMinutes(timeoutMinutesEvening ))
sendNotification(“************”, "Kitchen Light Timer Has Been Reset!!")
}
if(KitchenLightsTimer == null) {
KitchenLightsTimer = createTimer(now.plusMinutes(timeoutMinutesNight ), [|
Kitchen_Motion_Timer.sendCommand(OFF)
KitchenLightsTimer = null
])
}
else {
KitchenLightsTimer.reschedule(now.plusMinutes(timeoutMinutesNight ))
sendNotification(“**********”, "Kitchen Light Timer Has Been Reset!!")
}
if(KitchenLightsTimer == null) {
KitchenLightsTimer = createTimer(now.plusMinutes(timeoutMinutesBed ), [|
Kitchen_Motion_Timer.sendCommand(OFF)
KitchenLightsTimer = null
])
}
else {
KitchenLightsTimer.reschedule(now.plusMinutes(timeoutMinutesBed ))
sendNotification(“**********”, "Kitchen Light Timer Has Been Reset!!")
}
end
rule "Motion Sensor Kitchen Lights"
when
Item Kitchen_Motion_Timer changed to ON
then
if ((All_Lights.state == OFF) && (Someones_Home.state == ON) && (Kitchen_Motion_Timer.state == "MORNING"))
{
sendCommand(Kitchen_Light, "100")
sendCommand(Kitchen_PendantLightLeft, "82,55,100")
sendCommand(Kitchen_PendantLightCenter, "82,55,100")
sendCommand(Kitchen_PendantLightRight, "82,55,100")
postUpdate(All_Lights, ON)
}
if ((All_Lights.state == OFF) && (Someones_Home.state == ON) && (vTimeOfDay.state == "DAY"))
{
sendCommand(Kitchen_Light, "100")
sendCommand(Kitchen_PendantLightLeft, "82,55,100")
sendCommand(Kitchen_PendantLightCenter, "82,55,100")
sendCommand(Kitchen_PendantLightRight, "82,55,100")
postUpdate(All_Lights, ON)
}
if ((All_Lights.state == OFF) && (Someones_Home.state == ON) && (vTimeOfDay.state == "AFTERNOON"))
{
sendCommand(Kitchen_Light, "100")
sendCommand(Kitchen_PendantLightLeft, "82,55,100")
sendCommand(Kitchen_PendantLightCenter, "82,55,100")
sendCommand(Kitchen_PendantLightRight, "82,55,100")
postUpdate(All_Lights, ON)
}
if ((All_Lights.state == OFF) && (Someones_Home.state == ON) && (vTimeOfDay.state == "EVENING"))
{
sendCommand(Kitchen_Light, "100")
sendCommand(Kitchen_PendantLightLeft, "82,55,100")
sendCommand(Kitchen_PendantLightCenter, "82,55,100")
sendCommand(Kitchen_PendantLightRight, "82,55,100")
postUpdate(All_Lights, ON)
}
if ((All_Lights.state == OFF) && (Someones_Home.state == ON) && (vTimeOfDay.state == "NIGHT"))
{
sendCommand(Kitchen_Light, "100")
sendCommand(Kitchen_PendantLightLeft, "82,55,100")
sendCommand(Kitchen_PendantLightCenter, "82,55,100")
sendCommand(Kitchen_PendantLightRight, "82,55,100")
postUpdate(All_Lights, ON)
}
if ((All_Lights.state == OFF) && (Someones_Home.state == ON) && (vTimeOfDay.state == "BED"))
{
sendCommand(Kitchen_PendantLightCenter, "82,55,5")
postUpdate(All_Lights, ON)
}
end
any ideas or help would be appreciated, this is my most complicated rule to date!