Hello all,
I have created a semi-universal timer rule for my wlan sockets and I am not sure if the assignment of the tGeneral variable is correct, it feels wrong because there are always warnings in the logfile. (after start of the timer, before expiration, exact time unknown)
The goal is to time some items with this rule independently of each other, so switch on a certain time.
Maybe you have a tip for me how I can eliminate the following warnings. Otherwise it works already.
Items:
//WLAN/FUNKSTECKDOSEN
Number Steckdose_S20_Timer "S20_Timer"
Number Steckdose_Obi_Timer "Obi_Timer"
Switch Steckdose_S20 "S20 Wlan Steckdose" <poweroutlet> {channel="mqtt:topic:tasmota:s20:PowerSwitch"}
Switch Steckdose_Obi "Obi Wlan Steckdose" <poweroutlet> {channel="mqtt:topic:tasmota:obi:PowerSwitch"}
Sitemap:
Selection item=Steckdose_Obi_Timer icon="time" mappings=[0="Aus",1="1min.",5="5min.",10="10min.",15="15min.",30="30min.",45="45min.",60="60min.",90="90min.",120="120min."]
Selection item=Steckdose_S20_Timer icon="time" mappings=[0="Aus",1="1min.",5="5min.",10="10min.",15="15min.",30="30min.",45="45min.",60="60min.",90="90min.",120="120min."]
Rule:
// Steckdosen WLAN / FUNK
import org.eclipse.smarthome.model.script.ScriptServiceUtil
var Timer tS20 = null
var Timer tObi = null
var Timer tGeneral = null
rule "General Timer"
when
Item Steckdose_Obi_Timer received command or
Item Steckdose_S20_Timer received command
then
var String TargetItemName = triggeringItem.name.toString.replace("_Timer","")
var String TargetItemSelectName = triggeringItem.name.toString
val TargetItem = ScriptServiceUtil.getItemRegistry?.getItem(TargetItemName)
val TargetItemSelect = ScriptServiceUtil.getItemRegistry?.getItem(TargetItemSelectName)
switch(TargetItemSelectName) {
case "Steckdose_S20_Timer" : { tGeneral = tS20
logInfo("Steckdosen", "Timer = Obi")
}
case "Steckdose_Obi_Timer" : { tGeneral = tObi
logInfo("Steckdosen", "Timer = Obi")
}
default : {
tGeneral = null
logInfo("Steckdosen", "Timer = Null")
return;
}
}
//mappings=[0="Aus",10="10min.",15="15min.",30="30min.",45="45min.",60="60min.",90="90min.",120="120min."]
logInfo("Steckdosen", ":. " +triggeringItem.name.toString +" erhielt Kommando " +receivedCommand.toString)
logInfo("Steckdosen", "Ziel Item: " + TargetItemName)
if (tGeneral!== null) {
tGeneral.cancel
tGeneral = null
}
if (receivedCommand == 0) {
logInfo("Steckdosen", "=> Szene Aus")
sendCommand(TargetItem,OFF)
}
else{
logInfo("Steckdosen", "=> Setze Timer auf " + receivedCommand.toString + " Minuten")
TargetItem.sendCommand(ON)
tGeneral = createTimer(now.plusMinutes((receivedCommand as DecimalType).intValue)) [|
sendCommand(TargetItemSelect,0)
]
}
end
... 1 more
at org.quartz.core.JobRunShell.run(JobRunShell.java:202) ~[?:?]
at org.eclipse.smarthome.model.script.internal.actions.TimerExecutionJob.execute(TimerExecutionJob.java:48) ~[?:?]
at com.sun.proxy.$Proxy404.apply(Unknown Source) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:29) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:46) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:201) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:239) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:458) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:235) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:954) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:991) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1081) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1135) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluateArgumentExpressions(XbaseInterpreter.java:1205) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:215) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:235) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:954) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:991) ~[?:?]
at org.eclipse.smarthome.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:140) ~[?:?]
at org.eclipse.smarthome.model.script.engine.ScriptError.<init>(ScriptError.java:65) ~[?:?]
Caused by: java.lang.NullPointerException
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) [bundleFile:?]
at org.quartz.core.JobRunShell.run(JobRunShell.java:213) [bundleFile:?]
org.quartz.SchedulerException: Job threw an unhandled exception.
} ] threw an exception.
sendCommand(<XFeatureCallImplCustom>,<XNumberLiteralImpl>)
2022-07-13 12:04:33.795 [ERROR] [org.quartz.core.ErrorLogger ] - Job (DEFAULT.Timer 419 2022-07-13T12:04:33.784+02:00: Proxy for org.eclipse.xtext.xbase.lib.Procedures$Procedure0: [ | {
Thanks