I use timer in one of my rules. I wish to display its value in the HABPanel.
The tricky point is this shall be in a readable format : 00:20:00, 00:19:59 … 00:01:21…
I can not display the timer directly because timers are rather for internal usage.
Is there any chance to see time elypsed in the format above?
var Timer motionDelayTimer = null
var RuleFlag = null
val int timeoutMinutes = 20
rule "Office Motion Sensor ON"
when
Item Office_Multisensor_6_Motion_Alarm changed from OFF to ON
then
if (RuleOfficeLight.state == ON){
RuleFlag = true
if(motionDelayTimer === null || motionDelayTimer.hasTerminated) {
motionDelayTimer = null
Office_FIBARO_Double_Switch.sendCommand(ON)
Office_FIBARO_Dimmer.sendCommand(2)
logInfo("Motion Office", "Movement recognised -> Light ON")
}
else {
logInfo("Motion Office", "Movement recognised -> Timer stop.")
motionDelayTimer.cancel
motionDelayTimer = null
}
}
else{
logInfo("Motion Office", "Rule deactivated")
}
end
rule "Office Motion Sensor OFF"
when
Item Office_Multisensor_6_Motion_Alarm changed from ON to OFF
then
if(RuleFlag == true) {
logInfo("Motion Office", "No more movement -> Timer start.")
RuleFlag = null
motionDelayTimer = createTimer(now.plusMinutes(timeoutMinutes), [ |
motionDelayTimer.cancel
motionDelayTimer = null
Office_FIBARO_Double_Switch.sendCommand(OFF)
logInfo("Motion Office", "Timer elapsed -> Light OFF")
])
}
else{
logInfo("Motion Office", "Rule deactivated already")
}
end
somehow yes. If the counter approach 00:01sec I can react and extend it. But the main purpose is just to visualise defined timer. I have it fixed now for 20min but the user will be able to change it.
So the timer shall really go down from the value given by the user. Assume 2h max.
Sometimes I receive this warning. Is it because the Item is updated every second?
2023-03-28 15:45:01.925 [WARN ] [d4j.internal.RRD4jPersistenceService] - Failed to open rrd4j database 'timerOfficeLight' to store data (java.lang.IllegalStateException: request interrupted for file:///var/lib/openhab/persistence/rrd4j/timerOfficeLight.rrd)
If I want to display the countdown in HABPanel I can not format it to the wished format
I have no idea what timerOfficeLight is and how it relates to anything else. This is the first time I’ve seen it - you haven’t mentioned it above I think.
Unfortunately I have zero knowledge about HABPanel. I have never used it. Have you tried reading the documentation? That’s what I would do before scouring the forums.
timerOfficeLight is an Number:Time Item
I changed your Timeout item and rename it to timerOfficeLight
In the item language it would be like that:
Number:Time timerOfficeLight "Timer countdown"
In the item configuration the pattern for the State Description is %tT this gives me a nice format.
Unfortunately I do not know how to format it into javascript recognised by the HABPanel widgets. Neither %tT nor HH:mm:SS work
2023-03-29 08:49:48.461 [WARN ] [ore.internal.scheduler.SchedulerImpl] - Scheduled job '<unknown>' failed and stopped
java.lang.NullPointerException: cannot invoke method public boolean org.openhab.core.model.script.actions.Timer.cancel() on null
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1177) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeOperation(XbaseInterpreter.java:1167) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._invokeFeature(XbaseInterpreter.java:1153) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.invokeFeature(XbaseInterpreter.java:1098) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.invokeFeature(ScriptInterpreter.java:151) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:878) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:243) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:488) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:267) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter._doEvaluate(XbaseInterpreter.java:475) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.doEvaluate(XbaseInterpreter.java:251) ~[?:?]
at org.openhab.core.model.script.interpreter.ScriptInterpreter.doEvaluate(ScriptInterpreter.java:226) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.internalEvaluate(XbaseInterpreter.java:227) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.XbaseInterpreter.evaluate(XbaseInterpreter.java:213) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.ClosureInvocationHandler.doInvoke(ClosureInvocationHandler.java:47) ~[?:?]
at org.eclipse.xtext.xbase.interpreter.impl.AbstractClosureInvocationHandler.invoke(AbstractClosureInvocationHandler.java:30) ~[?:?]
at com.sun.proxy.$Proxy424.apply(Unknown Source) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$12(SchedulerImpl.java:191) ~[?:?]
at org.openhab.core.internal.scheduler.SchedulerImpl.lambda$1(SchedulerImpl.java:88) ~[?:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) [?:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]