There is no way to stop this. If you are subscribed to Device’s switch, then each time that switch changes (to either on or off), the piston runs thru the entire piston, top to bottom.
A Momentary Button Tile does this internally, but still
triggers the piston twice
A Simulated Switch can also be automatically reset, but YOU get to decide when.
(This is my preferred method… I usually reset as the very last command sent)
For reference, here is a sample pic showing a Momentary Button Tile’s double
(with a semaphore delay in between)
(I only pressed the button once, but notice there’s only 0.077 sec between