Thanks for your detailed reply.
“I am not sure if there is one correct way to implement the rain delay. The issue with your proposal is: what happens with the other programs which should run normally and that fall after the rain delay period? If we keep pushing them back and queuing them, you can quickly get into the situation where there is simply not enough time to catch up with so many queued programs. For example, let’s say a program is supposed to run every day, and there is a rain delay that happened on Monday and Tuesday. If you queue those programs to run on Wednesday (i.e. after rain delay ends), what about programs which would normally run on Wednesday?”
I am only addressing programs that run on intervals, not on fixed weekdays. I agree that weekday programs should not be rescheduled in response to rain delays.
In the case of interval programs, there always will be days on which all the programs run. For example, if a program has a 2-day interval and another program has a 3-day interval, both programs will run on the same day every 6 days. Therefore, someone who wants to prevent programs from running on the same day must use weekday programs, not intervals. Hence, your concern about too many programs on a single day is irrelevant to interval programs.
“Besides, stop watering during rain delay is partly to avoid wasting water, since the rain will irrigate the lawn anyways. So delaying those programs after the rain delay ends seems to over-water the lawn still.”
I guess I did not explain clearly. I certainly do not want to water the next day after rain! I want to start counting down the watering interval from the day after a rain. So if the last day of rain is Sunday, the first watering day should be Wednesday if the program interval is 3 days.
“Using one of the weather adjustment method can partly address this issue: instead of doing manual rain delay, let the weather adjustment method to figure out the watering percentage automatically. …”
Watering percentage will not work for me. I am not watering lawn. I am watering a variety of plants, including roses. When it is not raining, it is beneficial to allow the roots to dry out. Watering small amounts frequently should be avoided.
Even if you disagree with my rationale for handling a manual rain delay, a solution would be to delete from the firmware the code that constrains the “Starting In” day to be modulo the interval, i.e., the remainder. Hopefully this would merely require deleting the modulo step rather than adding code.
I see no benefit in imposing an unnecessary constraint on the user even if you’re unconvinced by my use case.