I want to implement reusable timers within a function. The function should return after timer is ended not before. Any idea?
my code with as lot of debug, sorry:
var HashMap<String, Timer> RandomTimers = newHashMap()
val Functions$Function2<GenericItem, HashMap<String, Timer>, String> randomTimerLambdaTest= [ s, RandomTimers |
logInfo("TIMERCHECK", "lambda before timer: " + s.name)
RandomTimers.put(s.name, createTimer(now.plusSeconds(120))
[|
logInfo("TIMERCHECK", "lambda TimerEnded: " + s.name)
RandomTimers.put(s.name, null)
])
logInfo("TIMERCHECK", "lambda after timer:" + s.name)
s.state.toString + " logged"
]
rule "Time random swRandomTimer02 start"
when
Item swRandomTimer02 changed to ON
then
var String result=randomTimerLambdaTest.apply(swRandomTimer02, RandomTimers)
logInfo("TIMERCHECK", "randomTimerLambdaResult: " + result)
swRandomTimer02.postUpdate(OFF)
end
and the log:
2018-02-05 16:34:32.032 [INFO ] [se.smarthome.model.script.TIMERCHECK] - lambda before timer: swRandomTimer02
2018-02-05 16:34:32.046 [INFO ] [se.smarthome.model.script.TIMERCHECK] - lambda after timer:swRandomTimer02
2018-02-05 16:34:32.046 [INFO ] [se.smarthome.model.script.TIMERCHECK] - randomTimerLambdaResult: ON return form lambda
2018-02-05 16:36:32.047 [INFO ] [se.smarthome.model.script.TIMERCHECK] - lambda TimerEnded: swRandomTimer02
I can see, that the function returns right after creating timer. Is there a way to return only if timer is ended?