Webcore and "wait..." understanding

Every other programming language I've used "wait" stops the function for the time specified THEN it moves onto the next operation. That isn't happening here. The time just keeps resetting and the following operation happens immediately. Also, the variable counter isn't happening the way I expect it to. Can I get some help please?

try changing the Task Cancellation Policy to Never for the "do" before the Speak command

No, that doesn't help the situation. Now it just doesn't go anywhere after that.

All my scripts with the wait function doesn't operate correctly once moved over here from ST.

If the piston is exactly the same as you had on ST and it worked, I don't see any reason why it wouldn't work on HE.
Did you re-write the piston or import from your ST instance?

Maybe try using a boolean variable.
In a separate piston - If the power is less the 1W, variable true. If not false.
This way the piston will only get evaluated when the variable changes not when the power level changes.