I have 2 gen three Rachio controllers and I love them!!
Scripts that I have developed over several years. Daily rain amount immediately (polling every 5 seconds), for past 3 days, past 7 days and past 14 days. Average rolling weekly temperature which then determines a multiplier used for watering - I find that my very sandy soil with clay at various depths - the multiplier works well especially when the hot summer months can severely dry out the soil, but also during the colder months with less watering.
The multiplier is adjusted based on the average weekly temperature and rain amounts, and gets re-calculated every night. The multiplier is used, for example, if the average temperature for previous 7 days is less than 45 degrees with zero rain for previous 7 days, the multiplier may be .5. If between 45 to 55, multiplier is 1. If average temperature is above 85 degrees with zero rain previous 3 days the multiplier is 6. The multiplier is adjusted during nightly processing. This also means that seasons are not needed as the rolling temperature average takes that into account. Thresholds are easily adjusted in the script. Of course the numbers could be adjuster for numerals instead of decimals if needed.
If rain begins to fall over a threshold amount which varies by different circuits, the irrigation is stopped and an email and text is sent stating which circuit is stopped. Following circuits are not started that day. Rain threshold can be variables that can be adjusted on the fly on the UI (either web or IOS).
My soil is sand over clay. Some circuits have about 4 feet of sand while others have less sand. That makes a generalized schedule difficult for the different seasons. I lost many fruit trees due to soil drying out when the trees were young (6’).