Smooth Color Cycle On/Off (Hue, Scenes, RM4, End Point via Stream Deck)

Greetings all,

This is my first post. I'll give an introduction to me and what I'm doing with HE elsewhere (tl;dr - replacing an entire house full of X-10 left by previous owners), but for now, I've gotten stumped on what I think should be a pretty simple task.

For "what does he know" reference, I've already successfully created rules for Hue and Ecobee, and a couple of really ugly dashboards. I've purchased a Lutron Caseta Smart Bridge Pro 2 and installed it to HE, but haven't yet started adding switches or other devices to the house.

The last time I programmed anything, it was on a Commodore 64. I understand coding in principle, but normally prefer to stand on the shoulders of giants and follow instructions. :slightly_smiling_face:

The Goal
Using a local end point, triggered by an Elgato Stream Deck, have a Hue Group smoothly color cycle between six scenes with an approximate 10 minute fade between each one. Do this until I trigger that end point again, then set to the final scene.

What I've achieved so far

  • I've successfully created a variable ("StudioColorCycleLoop") that toggles between true/false with each press of the button on the Elgato Stream Deck. (Rule Machine)

  • I've successfully created the six scenes (Blue, Red, Orange, White, Green, Purple) and can trigger these with buttons on the Stream Deck via local end point addresses. (Groups and Scenes)

  • I've verified that I can do slow fades between any two of the color scenes using a timed trigger. During development of my rules, I'm using a 3 second fade with a 10 second wait, but I've also tried a 15 minute fade that worked nicely. (Groups and Scenes)

I have used these two discussions as references while trying to learn all of this:

What's not quite working

  • My WHILE loop seems to start correctly, but stalls. I get the first color change, but not anything after.

  • The END-IF seems to trigger correctly, because the lights turn white. The loop isn't stopping, though, because it will eventually go back to whatever the first scene in the loop section is.

  • Worse, the loop seems to get stuck in a weird way. I turned everything off, but found those lights on (at an in-between fade color) in the middle of the night. I turned them off again, but they were back on the next time I woke up. The only way I was able to stop the behavior was to reboot both the Hubitat and the Hue Bridge.

Here's my code

The "Trigger Variable" for the Stream Deck button:

Select Trigger Events
  Local end point

Select Actions to Run
   IF (Variable StudioColorCycleLoop(false) = false(T) THEN
      Set StudioColorCycleLoop to true
   ELSE
      Set StudioColorCycleLoop to false

Here's as far as I got with the WHILE loop rule. Note that the timing is the shortened test version, and each scene currently has a 3 second fade in its definition:

Select Trigger Events
   Variable reports StudioColorCycleLoop(false) *changed*

Select Actions to Run
   IF (StudioColorCycleLoop variable(false) = true(F) [FALSE] THEN
       Repeat 3 times every 0:00:30 (stopable)
          Activate Scenes: Studio Wash Blue
          Delay 0:00:10
          Activate scenes: Studio Wash Red
          Delay 0:00:10
        END-REP
   END-IF
   Stop Repeating Actions
   Activate Scenes: Studio Wash White

As mentioned above, what I'd like to have happen is that I hit the Stream Deck button, and the Studio Wash group cycles through each of the six scenes and loops until I hit that Stream Deck button again.

If there are better / more elegant / more appropriate ways to do the delays or the fades, please let me know. I'm currently putting the fade in the scene definition itself. I also tried setting scene changes (e.g., Red to Blue) where I specified that the fade happen over 600 seconds with an update every X seconds. I'm not sure what a reasonable value for X is, but I've been using 6.

I really thought I had it ready to go after I got the scenes to respond to a local end point trigger, but the IF-THEN/WHILE loop is... er... throwing me for a loop.

Any advice would be greatly appreciated!

Did I stump everyone? Do I need to provide more information or different information? Still haven't gotten this to work.