Handling dimming for ISY scenes and devices

My only concern with a 2 program approach is, is there any race conditions between the program in step 2 and step 3?

If the scene is adjusted, do we know that the program in step 2 will trigger before step 3? How would it handle local dimming, wait a second, then dim some more.

These types of scenarios are what makes me feel the ISY as a program platform is severely limited, and the Insteon protocol.

There will be a bit of a race between the two when controlled locally by one of the switches, since the direct Insteon commands will be trying to update the other devices in the scene; hence the 2 sec delay. That 2 sec delay is variable in my headā€¦ A balance between getting out of the way of the direct Insteon commands and how long youā€™re willing to accept as a delay in updating switches that are usually across the room.

That being said, so far I havenā€™t seen any negative impacts. Every time program 1 updates the variable, program 2 is re-fired and the 2 sec timer resets. So if Iā€™m dimming from the ā€˜slaveā€™ device, it always has 2 seconds for the master to update (should be near instant since itā€™s a direct insteon command), the isy to see the change, update the state var, and look back at the slave to see if it matches (it should, since it initiated the whole thing).

I agree there are some severe limitations in ISY Automation and Insteon scenes. So far this workaround is working, for me. I donā€™t know how multiple slave dimmers would keep up. And Iā€™m definitely open to better ideasā€¦

This is the part that interests me and then, in my head, wondered if ISY would do that. I might have to play around a bit. The reset/cancel is exactly what I would like to happen.

I might do some searching over on their forums to refresh/update my understanding of program triggering.

This is the principle I use for a lot of my ISY programs (HVAC timeouts, motion timeouts, ā€˜groupā€™ keypad linc buttonsā€“e.g. turn on if any light in the group is on):

ISY re-evaluates the conditional (the ā€œIFā€) of the program, and if it has changed during the Wait period, the ā€œThenā€ code wonā€™t continue executing from the line of code following the Wait.

When the conditional changes during Wait, the program reevaluates and restarts.