I am trying to create a rule that switches on the lights in the kitchen once it detects motion only at night. After 5 minutes of no motion the light gets turned back off. New motion resets that timer. I am using openhab 2.
My rule already switches on the lights successfully but I get an error when the timer code runs that should switch off the light.
Rule:
var Timer offTimer = null
var Integer offDelay = 5
rule "Switch on kitchen lights when detecting motion at night"
when
Item molganKueche received update OPEN
then
if(nightTime.state == ON) { // is night
logDebug("Motion", "Turning on lights in kitchen")
sendCommand(LichtKuecheUntenOn, ON)
if (offTimer == null) {
logDebug("Motion", "Creating new timer")
offTimer = createTimer(now.plusMinutes(offDelay)) [|
logDebug("Motion", "Turning lights in kitchen back off")
offTimer.cancel()
offTimer = null
sendCommand(molganKueche, OFF)
sendCommand(LichtKuecheUntenOn, OFF)
]
} else {
offTimer.reschedule(now.plusMinutes(offDelay))
}
}
end
Where molganKueche is the motion sensor, LichtKuecheUntenOn is the light to turn on/off and nightTime is a switch that get turned on at night.
I get this error:
19:02:56.380 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.2017-08-14T19:02:17.501+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
logDebug(<XStringLiteralImpl>,<XStringLiteralImpl>)
<null>.offTimer = <XNullLiteralImplCustom>
sendCommand(<XFeatureCallImplCustom>,<XFeatureCallImplCustom>)
sendCommand(<XFeatureCallImplCustom>,<XFeatureCallImplCustom>)
} ] threw an unhandled Exception:
java.lang.NullPointerException: Cannot assign value to field: KitchenRules.offTimer on null instance
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._assignValueTo(XbaseInterpreter.java:1249)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter._assignValueTo(ScriptInterpreter.java:188)[130:org.eclipse.smarthome.model.script:0.9.0.b5]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.assignValueTo(XbaseInterpreter.java:1220)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:1212)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:215)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:446)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:189)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at com.sun.proxy.$Proxy118.apply(Unknown Source)[:]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:44)[130:org.eclipse.smarthome.model.script:0.9.0.b5]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)[105:org.eclipse.smarthome.core.scheduler:0.9.0.b5]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)[105:org.eclipse.smarthome.core.scheduler:0.9.0.b5]
19:02:56.407 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.2017-08-14T19:02:17.501+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
logDebug(<XStringLiteralImpl>,<XStringLiteralImpl>)
<null>.offTimer = <XNullLiteralImplCustom>
sendCommand(<XFeatureCallImplCustom>,<XFeatureCallImplCustom>)
sendCommand(<XFeatureCallImplCustom>,<XFeatureCallImplCustom>)
} ] threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NullPointerException: Cannot assign value to field: KitchenRules.offTimer on null instance]
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)[105:org.eclipse.smarthome.core.scheduler:0.9.0.b5]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)[105:org.eclipse.smarthome.core.scheduler:0.9.0.b5]
Caused by: java.lang.NullPointerException: Cannot assign value to field: KitchenRules.offTimer on null instance
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._assignValueTo(XbaseInterpreter.java:1249)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter._assignValueTo(ScriptInterpreter.java:188)[130:org.eclipse.smarthome.model.script:0.9.0.b5]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.assignValueTo(XbaseInterpreter.java:1220)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:1212)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:215)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:446)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:227)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:203)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:189)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29)[146:org.eclipse.xtext.xbase:2.9.2.v20160428-1452]
at com.sun.proxy.$Proxy118.apply(Unknown Source)[:]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:44)[130:org.eclipse.smarthome.model.script:0.9.0.b5]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)[105:org.eclipse.smarthome.core.scheduler:0.9.0.b5]
... 1 more
Why is that? I also do not see any of my debug statements in the openhab log? What do I have to change to see them?
Thanks for any help!