I'm sort of doing but also seeking to do something similar. Disclosure: Im a professional developer.
Ive automated the opening and closing of a pair of shades by using the Rule Machine. I have two hub/global variables. One to turn off the whole process (if i know tomorrow is stormy, i dont need the shades open and i dont want then rising to follow the evening progressive lowering). The other is to store the target shade level during progressive lowering.
I didnt want the shades to open all the way immediately, so the "Sunrise" rule is just a chain of delayed position commands given to the two shades: 50%, then 75%, then fully open. The one variable prevents this from engaging if set to false.
The "Sunset" rule is MUCH more involved. Similarly, if the first variable is false this doesnt run. The other, as mentioned, stores the "next" target shade level; 85%, 65%, 45%, 25%, closed. I have an offset before sunset, and a chain of delayed actions that evaluate (per shade) if the shade is above the current target and if so lower to the target position, then set the next target. So after 85% is done, the variable is set to 65% and the same logic is performed, so on and so forth. Unfortunately, i didnt take enough time to see if i could generalize the logic into a function and repeat, instead i had to rebuild the "inner action" over and over in the action. The reason i check each shade is in case it got overcast and i lowered one or both shades below any of the target positions, the shade wont be raised to the target position and instead is lowered when/if applicable given the next target position.
This works extremely well. I have a similar "Sunrise" for bedroom shades, where instead of a sunrise offset trigger i have a global variable store the time to start the opening sequence. I expose the tome variable as a device on the room's dashboard, so when set the alarm on my phone i set a trailing time for my "window alarm."
Ive just discovered the Mirror App, and am working to ad-hoc control the two shades i mentioned through a virtual switch level device.