How it works
The below image shows a graphical representation of what this integration does.

- Snow and rain fall on the ground add moisture. Together, this makes up the
precipitation. - Sunshine, temperature, wind speed, place on earth and other factors influence the amount of moisture lost from the ground(
evapotranspiration). - The difference between
precipitationandevapotranspirationis thedeltaornett precipitation: negative values mean more moisture is lost than gets added by rain/snow, while positive values mean more moisture is added by rain/snow than what evaporates. - At some point in the day (configurable) the
nett precipitationis added/substracted from thebucket,which starts as empty. The bucket is calculated using this formula:old_bucket + nett precipitation. - If the bucket > 0, the
drainage rateis taken into the account (if set) and subtracted from the bucket value. The actual drainage rate is determined dynamically by the fraction the bucket is of the maximum bucket value, following hydraulic conductivity method of Brooks and Corey, Eq. 4-6 - If the
bucketfalls below the zone's minimum deficit to irrigate (a per-zone setting, a 10 mm deficit by default —-10on metric installs,-0.39on imperial ones), irrigation is required. Set it to0if you want any deficit at all to trigger watering — that's the behaviour the simplified example below assumes. - Irrigation should be run for the calculated duration, which is
sensor.smart_irrigation_[zone_name](0 ifbucket >= 0). Afterwards thebucketmust be reset so the integration knows irrigation happened. If you give a zone a linked switch/valve entity, the integration runs the valve for the calculated duration and resets the bucket for you — no automation needed. If you prefer to control the valve yourself, build an automation that reads the duration and calls thereset_bucketservice when done. See Valve control & automations for both options.
Weekly behavior example
To understand how precipitation, nett precipitation, the bucket and irrigation interact, see let's look at an example behavior in a week.
With this you should be able to do a sanity check against your confiruation and make sure everything is working together.
The scenario is as follows: we will look at several days, including the precipitation and evapotranspiration for those days and the effects on the bucket and whether ot not irrigation should be triggered. Note that the values here are not representative of any real-life situation and the example below only uses one zone to keep things simple.
Initialization
Initially, the bucket is 0, so the duration for irrigation is set to 0s.
Variables used
P: PrecipitationEt: EvapotranspiationD: nett Precipitation or Delta (=P-Et)B: BucketBu: Bucket after calculation has happened (=B+D)Du: Duration for irrigation in seconds
Scenario
| Day | P |
Et |
D |
B |
Bu |
Du |
Notes |
|---|---|---|---|---|---|---|---|
| 1 | 0.5 |
0.1 |
0.4 |
0 |
0.4 |
0 |
P > Et so bucket increased from 0 to 0.4. Since Bu > 0 no irrigation is required |
| 2 | 0 |
0.6 |
-0.6 |
0.40 |
-0.2 |
180 |
P < Et, so bucket decreased from 0.4 to -0.2. Since Bu < 0` irrigation is required and bucket is reset afterwards |
| 3 | 1 |
0.2 |
0.8 |
0 (reset) |
0.8 |
0 |
No irrigation required |
| 4 | 0.2 |
0.4 |
-0.2 |
0.8 |
0.6 |
0 |
No irrigation required even though P < Et and bucket was decreased from 0.8 to 0.6 |
| 5 | 0 |
1.5 |
-1.5 |
0.6 |
-0.9 |
600 |
Since Bu < 0 irrigation is required and bucket is reset afterwards |
| 6 | 0 |
0.4 |
-0.4 |
0 (reset) |
-0.4 |
300 |
Since Bu < 0 irrigation is required and bucket is reset afterwards |
| 7 | 0.5 |
0.2 |
0.3 |
0 (reset) |
0.3 |
0 |
No irrigation required |
Live status estimate
The bucket above is recalculated once a day, at the configured calculation time, so the stored value can be hours old. For a more current picture, the dashboard also shows a read-only live estimate of each zone's deficit since the last calculation.
Where hourly solar-radiation data is available (for example from Open-Meteo) it accumulates evapotranspiration using the dedicated hourly FAO-56 Penman-Monteith equation — not the daily equation run more often, which would be physically incorrect. With other providers it falls back to a lighter approximation based on the day's temperature range, distributed across the day by sun position.
This estimate is display-only: it does not change the stored bucket, does not trigger irrigation, and is anchored to the last calculation so it never double-counts the evapotranspiration the daily calculation has already applied.
When to irrigate
You should irrigate when the integration tells you to, but keep in mind that for grass, experts say you should water deeply but infrequently to avoid overwatering and encourage deep rooting. A good pattern is to schedule irrigation early enough to finish before sunrise, and only when there's a meaningful deficit (e.g. duration > 0 or bucket < -25 mm (~1")). You can do this with a recurring schedule or your own automation — adjust to your specific needs. See Valve control & automations for examples.