Just a tiny recap since I am not sure all of my responses registered:
webCoRE only schedules one wakeup per piston. (The nearest one)
I think this is because your only trigger is inside the loop, instead of outside it. I have never worked on a loop with a trigger inside. (only conditions)
In my opinion, using an integer (or time) variable is the way to go
Then your trigger needs to be at the top. (outside the loop) Just be aware that depending on your wording, the new trigger may cancel and start a new loop from square one, OR it may run a second loop asynchronously.
You are correct.
I think maybe I should also clarify one more peculiar behavior.
If you have a top level (non-indented) line that says:
Time happens at {timerTmp}
That time/schedule will not be seen or set until the piston is running.
In other words, to let a new variable time be seen by webCoRE, and scheduled for a wakeup, the piston has to run first, then see the new variable, then finish the code, and then set the wakeup to the new time.
To get around this, I sometimes cheat a bit and throw in a line like this.
every day at 8:00 AM
do
end every
(Yes, that block is completely empty)
This simple command simply forces the piston to schedule a wakeup based on the current variable.