View on GitHub

Irrigation Plus

Evapotranspiration-based irrigation scheduling for Home Assistant — a maintained community fork of Smart Irrigation, renamed to Irrigation Plus

Schedules

Main page: Configuration
Previous: When to Water
Next: Module configuration

Recurring schedules let you irrigate your zones automatically on a repeating cadence — no Home Assistant automations needed. They live at the bottom of the Setup → When to Water tab.

Weather updates and duration calculations run on their own automatic times set in When to Water — schedules here are about when to actually water.

Creating a schedule

Click Add Schedule to open the schedule dialog. Fill in the following fields:

Name

A descriptive name for the schedule, e.g. "Daily morning irrigation".

Recurrence

How often the schedule occurs. This is only about how often — where in the day the run lands is set by the Start and Finish rows below, so any recurrence can be combined with any time of day.

Recurrence Description
Daily Occurs every day
Weekly Occurs on selected days of the week
Monthly Occurs on a specific day of the month
Every N hours Occurs at a fixed interval (e.g. every 6 hours)

Days of week (weekly only)

Select one or more days of the week the schedule should fire. This works with a sun-based Start or Finish too, so "finish by sunrise, Mondays and Thursdays only" is a single schedule.

Day of month (monthly only)

The day of the month (1–31) the schedule should fire.

Interval (interval type only)

The number of hours between runs.

You can optionally set a Start time (HH:MM). With it, the interval is anchored to that clock time — it fires at the start time and every N hours after (e.g. start 07:00, every 12 hours → 07:00 and 19:00 each day), and the dashboard shows the real next run. Leave it empty to keep the legacy behaviour, where the interval simply runs every N hours counting from when Home Assistant last started (no fixed clock phase, and the dashboard can't show a next run).

Note: an interval-irrigate schedule waters the deficit the daily calculation produced. Because the calculation runs once a day, a second run a few hours later normally finds the bucket already satisfied and does little. To genuinely water more than once a day on intra-day demand, also enable the live-estimate option (see Experimental).

Start and Finish {#time-anchor}

A run's window is two independent ends: when watering may begin, and when it must be finished by. Every recurrence except interval shows both rows, and each takes the same set of options:

Option Meaning
No limit That end is unbounded
At a time A clock time (24-hour format)
At sunrise Sunrise, with an optional offset
At sunset Sunset, with an optional offset
At solar azimuth When the sun reaches a given compass angle (0–359°), with an optional offset

Offset shifts a sun-based bound by a number of minutes, negative for before and positive for after (e.g. -30 = half an hour before sunrise). Solar azimuth takes an angle in degrees instead.

At least one end must be set. A schedule with both rows on No limit describes no time at all and is rejected when you save it.

What the schedule does follows from which ends are bounded, and the dialog states it under each row as you build it:

Fitting is not a setting. It follows from having bounded both ends, because a window with a finish you are willing to overrun is just a later finish.

Which zones get deferred. Zones are ranked by how dry they are relative to their own minimum deficit to irrigate, so the driest zone is served first regardless of where it sits in your zone list, and a zone skipped one night leads the next run. The driest zone always runs even if it alone overruns the window — the deadline cuts it short rather than excluding it, so it can never be starved.

The run window dial

The When section draws your window on a 24-hour dial, with sunrise and sunset marked, so you can see whether the run fits inside it. Anything that will not fit is drawn as a separate arc past the window's edge.

The run length it shows is a typical one, not tonight's: each zone is priced as if it had just reached its own minimum deficit, capped by that zone's maximum duration. A schedule is a long-lived thing, so the dial describes what it usually reserves rather than a single night's weather, and it does not move when a bucket moves.

Interval schedules have no time of day and therefore no window, so both rows are hidden and the dial shows the occurrences around the clock instead. Where two occurrences collide, the dial says so: nothing overlaps and nothing queues, a zone that is still watering is simply skipped by the second occurrence and the rest of it proceeds.

How the run length is estimated per watering mode. Zones in Classic mode are combined according to the zone sequencing setting. Zones on Self-closing service valves are assumed to open together, because the hardware owns each close. OpenSprinkler station zones under Sequential and Rotating run one after another, because the integration dispatches them one at a time itself. Under Parallel the controller's own station groups decide, and the estimate reads them: stations sharing a group are priced as a chain, with the controller's station delay counted between them, and separate groups are priced as running alongside each other. Where the groups cannot be read — an OpenSprinkler integration older than v2.0.0, controller firmware below 2.2.0(1), or a controller that is offline when the estimate is made — the window reserves enough time for the longer case instead, so the finish time is never overshot. Batch / queue controller zones are counted as one after another, always: the whole irrigation is handed over as a single queue and a queue waters one valve at a time, so unlike the station case there is nothing to read off the hardware and nothing to hedge. The zone sequencing setting does not change that, including Rotating — a rotation would have to be sent to the controller as repeated queue entries, which is not something the integration does today. A pause is not allowed for either: nothing can predict when one will start or how long it will last, and reserving the pause bound against the possibility would make almost any window unfittable, so a paused run simply finishes past the requested time. The four watering modes are started together, so the run is as long as the longest of them rather than their total.

What a schedule does

When a schedule fires it irrigates: it controls all linked entities for the targeted zones that have a calculated duration > 0, and also fires the irrigation_plus_start_irrigation_all_zones event for any automation-based setups.

Zones

Choose All zones or select specific zones by name. Only zones with a linked entity and a calculated duration > 0 will actually open their valve.

Enabled

Toggle a schedule on or off without deleting it. Disabled schedules are not tracked.

Start date / End date (optional)

Limit the schedule to a date range. Leave empty for no restriction.

Managing schedules

Each existing schedule is shown as a card with a summary of its settings. Use the Edit button to modify it or Delete to remove it.

Tips

Main page: Configuration
Previous: When to Water
Next: Module configuration