View on GitHub

Smart Irrigation

A maintained community fork of the Smart Irrigation Home Assistant integration — precise, evapotranspiration-based irrigation scheduling

My Zones

Main page: Configuration
Previous: Weather & Location
Next: When to Water

Specify one or more irrigation zones here. The integration calculates irrigation duration per zone, depending on size, throughput, state, module and sensor group. A zone can be:

When entering any values in the configuration of this integration, take notice of the labels provided so you enter values in the correct units.

Where zones live: dashboard vs. settings

Zones appear in two places:

Multi-zone support

For irrigation systems that have multiple zones which you want to run in series or independent you need to create multiple zones. The configuration should be done for each zone, including the area the zone covers and the corresponding settings.

Adding a zone

Zones are added and configured under Setup → My Zones. Click the + button and provide:

After clicking Add, the new zone appears in the list (and as a device with entities in Home Assistant), with its settings shown directly underneath so you can finish configuring it.

Actions on all automatic Zones

These bulk actions are split across the two surfaces:

Configuring a zone

Open Setup → My Zones. Each zone's settings are shown directly under its name (no need to expand anything), and you can change:

Watering mode {#watering-mode}

Each zone chooses how the integration actuates it:

Set the controller's water level to 100%. OpenSprinkler applies its own weather-based water level percentage to every run it is given. Smart Irrigation has already scaled the duration by its own calculation, so leaving the controller's adjustment on applies a weather correction twice and the zone is under-watered. Set the water level to 100%, or turn the controller's weather adjustment off. Master and pump control stays with the controller, which drives its own master station with its own on/off delays.

What counts as self-closing hardware? Anything that runs its own timer once told a duration — for example Zigbee2MQTT valves with a built-in countdown (Tuya countdown_l1, SONOFF cyclic_timed_irrigation), or a DIY / ESPHome controller that closes its own valve after a received runtime. The script is only an adapter so the integration can drive all of them the same way — it is not what closes the valve. A plain switch with no hardware timer is not self-closing; use Classic mode for that.

To make self-closing setup painless, three script blueprints ship with the integration and are copied into config/blueprints/script/smart_irrigation/ automatically on setup (existing files are never overwritten):

Blueprint For Duration unit
Tuya TS0601 dual water valve (Z2M) Tuya TS0601_water_switchcountdown_l1 + state_l1 (custom converters may use valve_l1) Minutes
SONOFF Smart Water Valve SWV (Z2M) SONOFF Zigbee Smart Water Valve (SWV) — cyclic_timed_irrigation Seconds
Self-closing valve (entity based) ZHA / non-MQTT valves with a hardware countdown number entity match the entity

Setup: create a script from the blueprint under Settings → Automations & Scenes → Blueprints (fill in your valve's MQTT topic or entities), then in the zone set Watering mode = Self-closing service and pick that script as the Run service. Each blueprint's script opens on duration > 0 and closes on duration = 0, so the same script also works as the Stop service.

Blueprints only cover common cases. Any script that accepts a duration field works — the device specifics live in the script, so the same mechanism drives Z2M, ZHA, ESPHome or anything else.

Linked entity {#linked-entity}

Optionally link a Home Assistant switch, valve or input_boolean (helper) entity to a zone (the Classic watering mode). When irrigation fires, the integration will:

  1. Call turn_on on the entity
  2. Wait for the calculated duration (in seconds)
  3. Call turn_off on the entity

This means no automation is needed to control your valve — the integration does it directly. The zone sequencing setting on the When to Water tab controls whether multiple linked zones run in parallel or one after another.

OpenSprinkler stations are the exception. In OpenSprinkler station mode this field holds the station's enabled switch, and the integration never calls turn_on on it — that switch rewrites the station's enabled flag in the controller's configuration and opens no valve. The run is sent as a station run instead, and the three steps above do not apply. A zone left in Classic mode with a station linked has its run refused rather than performed, so the station's configuration is never rewritten by accident.

Tip: Start typing switch., valve. or input_boolean. in the field and all matching entities in your HA instance will appear as autocomplete suggestions. Linking an input_boolean helper is handy when you drive the actual valve from your own automation but still want Smart Irrigation to start/stop it.

If you prefer to keep using automations, simply leave this field empty and listen for the smart_irrigation_start_irrigation_all_zones event, which fires whenever an irrigate schedule runs.

Soil-moisture veto

Two optional per-zone fields let a soil-moisture sensor skip a zone that is already wet enough — without touching the ET calculation.

On an automatic (scheduled) run, if the sensor reads strictly above the threshold, HASI skips that zone and resets its bucket to 0 (re-anchoring the water balance to field capacity). Manual Irrigate Now runs always water. If the sensor is unavailable or non-numeric, the zone waters normally (fail-open) — a dead sensor never silently stops irrigation.

Each skip is recorded in the zone's run history ("Recent runs", persisted across restarts) as a skipped entry, and also fires the smart_irrigation_zone_skipped event for your own logging.

Why reset the bucket instead of carrying the deficit? The bucket is a signed water balance (negative = deficit). A measured-wet zone is at field capacity, i.e. no deficit — so the balance is re-anchored to 0. Carrying an old modeled deficit that the measurement contradicts would make the controller over-water to "catch up" once the veto lifts. This matches FAO-56 (root-zone depletion is bounded at 0 at field capacity), the Extension "checkbook" scheduling method (overwrite the book with the field measurement), and every model-based commercial controller (Rachio, RainMachine, Spruce all re-anchor toward field capacity on a wet signal).

Available actions per zone

On the Zones dashboard, each zone card shows an at-a-glance verdict, a one-line status (bucket and when it was last checked), and the everyday action buttons:

The remaining per-zone tools live under Setup → My Zones:

Weather records, the forecast and the 12-month seasonal outlook are no longer shown per zone — they apply to your whole location, so they now live once on the Weather & Location tab.

Main page: Configuration
Previous: Weather & Location
Next: When to Water