If I want to use the timer datatype to run a command every X seconds, how do I do that?
The reason I don’t want to use cron is because it has to start on an activity.
rule "start cycle"
Item cycle_start_PB received update
waitTimer = createTimer(now.plusSeconds(5))[|
waitTimer = createTimer(now.plusSeconds(5)) //this line does not work
I’d like the timer to restart after it runs. So I should here “five seconds”…“five seconds”…“five seconds”… forever, until I explicitely null out the timer somehow.
I know I can use cron with some if statements to kind of prevent the execution…
rule "repeat every 5 seconds kind of"
Time cron "0 0/5 * * * ?"
if ( put flags here )...
But it doesn’t work well for some specific things I’m trying to do.
Instead of creating a new timer, try rescheduling it.
waitTimer.reschedule (now.plusSeconds (5))
You may need to make sure I got the function name right. I’m going from memory and it may be something like rescheduleTimer.
The problem is the createTimer inside the timer creates a timer that doesn’t do anything but to create a timer that does the same thing puts you into a situation where you get stuck in an infinite repetition. Kind of like facing two mirrors at each other.
Or have two timers that trigger each other
you kick off the timers by switching switch 1 on
switch 1 triggers a rule that starts timer 1 which, after 5 seconds, turns switch 1 off and switch 2 on
switch 2 triggers a rule that starts timer 2 which, after 5 seconds, turn switch 1 off and switch 2 on
that will merrily keep going forever