I have that strange error:
...
2019-03-26 21:42:25.656 [INFO ] [arthome.model.script.KWI.debug.rules] - RT: 10
2019-03-26 21:42:25.658 [ERROR] [org.quartz.core.JobRunShell ] - Job DEFAULT.2019-03-26T21:42:25.656+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XFeatureCallImplCustom> += <XNumberLiteralImpl>
org.eclipse.xtext.xbase.impl.XSwitchExpressionImpl@465f14db
} ] threw an unhandled Exception:
java.lang.NullPointerException: cannot invoke method public abstract boolean org.eclipse.smarthome.model.script.actions.Timer.reschedule(org.joda.time.base.AbstractInstant) on null
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1071) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1061) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1047) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:772) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:484) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:256) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at com.sun.proxy.$Proxy192.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) [109:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [109:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
2019-03-26 21:42:25.673 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.2019-03-26T21:42:25.656+01:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
<XFeatureCallImplCustom> += <XNumberLiteralImpl>
org.eclipse.xtext.xbase.impl.XSwitchExpressionImpl@465f14db
} ] threw an exception.
org.quartz.SchedulerException: Job threw an unhandled exception.
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [109:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [109:org.eclipse.smarthome.core.scheduler:0.10.0.oh240]
Caused by: java.lang.NullPointerException: cannot invoke method public abstract boolean org.eclipse.smarthome.model.script.actions.Timer.reschedule(org.joda.time.base.AbstractInstant) on null
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1071) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1061) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1047) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:992) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:772) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:220) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:484) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:256) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:447) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:228) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:204) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:190) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at com.sun.proxy.$Proxy192.apply(Unknown Source) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:49) ~[?:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]
... 1 more
2019-03-26 21:42:27.655 [INFO ] [arthome.model.script.KWI.debug.rules] - RT: 6
...
As far I can see, it occure randomally somewhere between timer reschedule command and createtimer function.
This is fragment of RULEâs code:
//beginning of RULES file>
var Timer tRBW = null
var Number nRBW = 0
var Timer tSOBW = null
var Number nSOBW = 0
...
rule "Ruch bramy wjazdowej"
when
Item Stan_bramy_wjazdowej changed
then
logInfo("KWI.debug.rules","REGRUN: Ruch bramy wjazdowej")
if(Stan_bramy_wjazdowej.state == OFF && tRBW === null) {
//logInfo("rules.IB","START")
logInfo("KWI.debug.rules","RR: 1")
nRBW = 0
logInfo("KWI.debug.rules","RR: 2")
tRBW = createTimer(now, [|
logInfo("KWI.debug.rules","RR: 3")
nRBW += 1
logInfo("KWI.debug.rules","RR: 4")
//logInfo("rules.IB","nRBW = {}", nRBW)
switch (nRBW.intValue) {
case 1 : {
logInfo("KWI.debug.rules","RR: 5")
// Negacja wejĆcia Stan_bramy_wjazdowej na Stan_bramy_wjazdowej_N (na potrzeby korekty statusu GH)
Stan_bramy_wjazdowej_N.sendCommand(ON)
// Wirtualne dla bramy wjazdowej
Brama_wjazdowa_LOG.postUpdate(ON)
// Zapalanie oĆwietlenia drogi gdy jest ciemno
if(Czujnik_swiatla.state == OFF) {
logInfo("rules.IB","OĆwietlenie drogi zostaĆo wĆÄ
czone (na podstawie stanu czujnika ĆwiatĆa i stanu bramy wjazdowej).")
Oswietlenie_drogi.sendCommand(ON)
}
if(PARTITION_PW_Piwnica_ARMED.state == OFF) {
logInfo("rules.IB","Brama wjazdowa zostaĆa otwarta.")
InfoToRead.sendCommand("Brama wjazdowa zostaĆa otwarta.")
} else {
logInfo("rules.IB","Brama wjazdowa zostaĆa otwarta w trybie czuwania alarmu!")
InfoToRead.sendCommand("Brama wjazdowa zostaĆa otwarta w trybie czuwania alarmu!")
}
Read_Trigger.sendCommand(ON)
CCTV_CamFront_Pos5.sendCommand(ON)
logInfo("KWI.debug.rules","RR: 6")
tRBW.reschedule(now.plusSeconds(2))
logInfo("KWI.debug.rules","RR: 7")
}
case 2 : {
logInfo("KWI.debug.rules","RR: 8")
if(PARTITION_PW_Piwnica_ARMED.state == OFF) {
sendTelegramPhoto("Karol", "http://192.168.1.100/tmpfs/snap.jpg?usr=admin&pwd=xxxxx", "Brama wjazdowa zostaĆa otwarta. - ZdjÄcie nr 1 i..." )
sendTelegramPhoto("Ewelina", "http://192.168.1.100/tmpfs/snap.jpg?usr=admin&pwd=xxxxx", "Brama wjazdowa zostaĆa otwarta. - ZdjÄcie nr 1 i..." )
} else {
sendTelegramPhoto("Karol", "http://192.168.1.100/tmpfs/snap.jpg?usr=admin&pwd=xxxxx", "Brama wjazdowa zostaĆa otwarta w trybie czuwania alarmu. - ZdjÄcie nr 1 i..." )
sendTelegramPhoto("Ewelina", "http://192.168.1.100/tmpfs/snap.jpg?usr=admin&pwd=xxxxx", "Brama wjazdowa zostaĆa otwarta w trybie czuwania alarmu. - ZdjÄcie nr 1 i..." )
}
logInfo("KWI.debug.rules","RR: 9")
tRBW.reschedule(now.plusSeconds(2))
logInfo("KWI.debug.rules","RR: 10")
}
case 3 : {
logInfo("KWI.debug.rules","RR: 11")
CCTV_CamFront_Pos4.sendCommand(ON)
logInfo("KWI.debug.rules","RR: 12")
tRBW.reschedule(now.plusSeconds(3))
logInfo("KWI.debug.rules","RR: 13")
}
case 4 : {
logInfo("KWI.debug.rules","RR: 14")
sendTelegramPhoto("Karol", "http://192.168.1.100/tmpfs/snap.jpg?usr=admin&pwd=xxxxx", "...zdjÄcie nr 2." )
sendTelegramPhoto("Ewelina", "http://192.168.1.100/tmpfs/snap.jpg?usr=admin&pwd=xxxxx", "...zdjÄcie nr 2." )
logInfo("KWI.debug.rules","RR: 15")
tRBW.reschedule(now.plusSeconds(2))
logInfo("KWI.debug.rules","RR: 16")
}
case 5 : {
logInfo("KWI.debug.rules","RR: 17")
CCTV_CamFront_Pos5.sendCommand(ON)
logInfo("KWI.debug.rules","RR: 18")
tRBW.reschedule(now.plusSeconds(1))
logInfo("KWI.debug.rules","RR: 19")
}
default: {
logInfo("KWI.debug.rules","RR: 19")
tRBW = null
logInfo("KWI.debug.rules","RR: 20")
}
}
])
}
logInfo("KWI.debug.rules","RR: 21")
if(Stan_bramy_wjazdowej.state == ON) {
tRBW?.cancel
// Negacja wejĆcia Stan_bramy_wjazdowej na Stan_bramy_wjazdowej_N (na potrzeby korekty statusu GH)
Stan_bramy_wjazdowej_N.sendCommand(OFF)
// Wirtualne dla bramy wjazdowej
Brama_wjazdowa_LOG.postUpdate(OFF)
// WyĆÄ
czenie oĆwietlenia drogi
if(Oswietlenie_drogi.state == ON) {
logInfo("rules.IB","OĆwietlenie drogi zostaĆo wyĆÄ
czone (na podstawie stanu czujnika ĆwiatĆa i stanu bramy wjazdowej).")
Oswietlenie_drogi.sendCommand(OFF)
}
if(PARTITION_PW_Piwnica_ARMED.state == OFF) {
logInfo("rules.IB","Brama wjazdowa zostaĆa zamkniÄta.")
InfoToRead.sendCommand("Brama wjazdowa zostaĆa zamkniÄta.")
} else {
logInfo("rules.IB","Brama wjazdowa zostaĆa zamkniÄta w trybie czuwania alarmu!")
InfoToRead.sendCommand("Brama wjazdowa zostaĆa zamkniÄta w trybie czuwania alarmu!")
}
Read_Trigger.sendCommand(ON)
SendNotification_Triggr.sendCommand(ON)
logInfo("KWI.debug.rules","RR: 22")
}
end
rule "Brama wjazdowa - Command"
when
Item Brama_wjazdowa_LOG received command
then
logInfo("KWI.debug.rules","RS: 1")
logInfo("KWI.debug.rules","REGRUN: Brama wjazdowa - Command")
if(receivedCommand == ON) Brama_wjazdowa.sendCommand(ON)
if(receivedCommand == OFF) Brama_wjazdowa_LOG.sendCommand(ON)
logInfo("KWI.debug.rules","RS: 2")
end
rule "StraĆŒnik otwartej bramy wjazdowej - Otwarta"
when
Item Stan_bramy_wjazdowej changed to OFF
then
logInfo("KWI.debug.rules","RT: 1")
if(tSOBW === null) {
logInfo("KWI.debug.rules","RT: 2")
logInfo("KWI.debug.rules","REGRUN: StraĆŒnik otwartej bramy wjazdowej")
//logInfo("rules.IB","StraĆŒnik: Brama wjazdowa zostaĆa otwarta.")
logInfo("KWI.debug.rules","RT: 3")
nSOBW = 0
logInfo("KWI.debug.rules","RT: 4")
lBramaWjazdowaTOpened = now
logInfo("KWI.debug.rules","RT: 5")
tSOBW = createTimer(now.plusMinutes(1), [|
logInfo("KWI.debug.rules","RT: 6")
nSOBW += 1
logInfo("KWI.debug.rules","RT: 7")
switch (nSOBW.intValue) {
case 1 : {
logInfo("KWI.debug.rules","RT: 8")
// if(Stan_bramy_wjazdowej.state == ON) {
// logInfo("rules.IB","StraĆŒnik: Brama wjazdowa zostaĆa zamkniÄta.")
// tSOBW?.cancel
// tSOBW = null
// lBramaWjazdowaTOpened = null
// } else {
lBramaWjazdowaTPassed = Math::round(( now.millis - lBramaWjazdowaTOpened.millis ) / 60000).intValue
//logInfo("rules.IB","StraĆŒnik: Brama wjazdowa pozostaje otwarta od " + lBramaWjazdowaTPassed.intValue + " minut!")
logInfo("rules.IB","Brama wjazdowa pozostaje otwarta od " + lBramaWjazdowaTPassed.intValue + " minut!")
InfoToRead.sendCommand("Brama wjazdowa pozostaje otwarta od " + lBramaWjazdowaTPassed.intValue + " minut!")
Read_Trigger.sendCommand(ON)
//SendNotification_Triggr.sendCommand(ON)
CCTV_CamFront_Pos4.sendCommand(ON)
logInfo("KWI.debug.rules","RT: 9")
tSOBW.reschedule(now.plusSeconds(2))
logInfo("KWI.debug.rules","RT: 10")
// }
}
case 2 : {
logInfo("KWI.debug.rules","RT: 11")
sendTelegramPhoto("Karol", "http://192.168.1.100/tmpfs/snap.jpg?usr=admin&pwd=xxxxx", "Brama wjazdowa pozostaje otwarta od " + lBramaWjazdowaTPassed.intValue + " minut!" )
sendTelegramPhoto("Ewelina", "http://192.168.1.100/tmpfs/snap.jpg?usr=admin&pwd=xxxxx", "Brama wjazdowa pozostaje otwarta od " + lBramaWjazdowaTPassed.intValue + " minut!" )
logInfo("KWI.debug.rules","RT: 12")
tSOBW.reschedule(now.plusSeconds(2))
logInfo("KWI.debug.rules","RT: 13")
}
case 3 : {
logInfo("KWI.debug.rules","RT: 14")
CCTV_CamFront_Pos5.sendCommand(ON)
logInfo("KWI.debug.rules","RT: 15")
nSOBW = 0
logInfo("KWI.debug.rules","RT: 16")
tSOBW.reschedule(now.plusMinutes(1))
logInfo("KWI.debug.rules","RT: 17")
}
}
])
}
logInfo("KWI.debug.rules","RT: 18")
end
rule "StraĆŒnik otwartej bramy wjazdowej - ZamkniÄta"
when
Item Stan_bramy_wjazdowej changed to ON
then
logInfo("KWI.debug.rules","RU: 1")
logInfo("rules.IB","StraĆŒnik: Brama wjazdowa zostaĆa zamkniÄta.")
logInfo("KWI.debug.rules","RU: 2")
tSOBW?.cancel
logInfo("KWI.debug.rules","RU: 4")
lBramaWjazdowaTOpened = null
logInfo("KWI.debug.rules","RU: 3")
tSOBW = null
logInfo("KWI.debug.rules","RU: 5")
end
I know and I will merge some of those rules into one, but where is the real problem?!