I’ve just finished building my OpenSprinkler system, but my previous controller provided per-minute granularity and (I think) 2-digit range (00-99). For my specific use, 6-80 minutes in one-minute increments would suffice, so options 1 or 3 would work, 2 would not.
Regarding the recently-discussed issue of units on the per-station times, what about setting the units at the zone level as opposed to the program level? (from what I can tell, the previous discussion has been centered on including this information at the program level).
That way, users have the flexibility of selecting hours/minutes/seconds for each zone, but you can represent the actual durations in the programs themselves in a single byte (0-255 of the selected unit). Note that the “units” could certainly follow the options mentioned in the first post (and not necessarily just H/M/S).