I've been running fixed-timer irrigation for years and kept overwatering in rainy weeks and underwatering during heatwaves. So I built NeverDry — a Home Assistant integration that replaces fixed timers with a real soil water balance.
How it works
Instead of "water for 10 minutes every Tuesday", NeverDry tracks a per-zone soil water deficit in millimetres using a simplified FAO-56 model:
Deficit(t) = Deficit(t-1) + ET × Kc × Δt − rain
ET is estimated from outdoor temperature (Hargreaves formula)
Kc is the crop coefficient — different for lawn, vegetables, fruit trees, herbs, succulents, etc., and varies by season
Rain is subtracted automatically from your existing rain sensor
When the deficit exceeds your threshold, NeverDry opens the valve for exactly the time needed to refill the deficit — no more, no less.
Key features
10 plant families with seasonal Kc (auto-flipped for southern hemisphere)
Per-zone deficit tracking — each zone dries out at its own rate
Supports Zigbee valves (ZHA/Z2M), any HA switch entity, or monitoring-only mode (notification when watering is needed, no valve required)
Manual valve detection — if you open the valve physically or from the Zigbee app, NeverDry tracks the session and updates the deficit
Multi-layer safety: software watchdog + hardware interlock (programs the on-device timer via Zigbee entity or MQTT) + delivery timeout — three independent layers
UI config flow, zero YAML, zero external dependencies
Emergency stop service
Install via HACS (custom repository for now — default submission pending review):
You have 3 ways to start irrigation, scheduled it starts and delivery the needed water, or at threshold when over the mm set it starts (odd times) and 3 manually. Hope it helps
Fixed timers is indeed my way of doing stuff, took into account the rain from last 24h so i never watered on days not needed.
I got myself a moisture sensor and did not use it yet for irrigation , would this be a good addition to your logic or is deficit specifilally different approach and moisture measurement of no use?
It depends on the moisture sensor reliability. I don't trust these sensors, they measure just around the sensors, this is the main reason I calculated the evapotranspiration based on temperature, because it is zone-wise and not only the 1 square meter around the sensor. By the way, I noted the future integration of a "professional" sensor in the add-on.
Both are solid projects with the same goal — replacing fixed timers with weather-aware irrigation!
Smart Irrigation is more mature, has a large community, and uses full Penman-Monteith ET via PyETO — great if you already have a weather station with wind speed and solar radiation. It also pairs well with Irrigation Unlimited for scheduling.
NeverDry is designed for the typical home gardener who has a temperature and rain sensor but not a full weather station. ET is estimated from temperature only, valve control is built in natively with multi-layer safety (no automations needed), and each zone gets its own seasonal crop coefficient based on plant family. Future versions will add wind and radiation support and other ET models as optional inputs when available.
On the soil model side: Smart Irrigation uses Brooks-Corey hydraulic conductivity parameters to simulate drainage — scientifically solid, but do you know your soil's hydraulic conductivity? For a home garden, NeverDry keeps it to two intuitive parameters (ET sensitivity and max deficit) that you can tune from observation.
Different tools for different users — if you're comfortable with agronomy parameters and have the sensors, Smart Irrigation shines. If you want something that just works from day one, NeverDry is the simpler path.
Is there any way that we could use imperial units as well?
HA insists on changing all of my temperature sensors to F units. I even created a specific sensor to read C but HA changes it to F to match my chosen units. the only way I can get an entity for temp in C is to leave out the device class and unit of measurement. But then your integration doesn't recognize it as a valid temperature sensor.
Hi @finity, great timing — this is fixed in v0.10.1 (releasing today).
NeverDry now reads the unit_of_measurement attribute of your temperature sensor and auto-converts °F → °C before the ET formula. No template sensor needed, no workaround. If your HA system is set to imperial, it just works.
If you want to fine-tune your drip irrigation setup, NeverDry Planner ( NeverDry – Planner ) calculates the irrigated area and the Kc value for each zone — ready to copy directly into NeverDry.
Also released today: v0.10.2 — includes a delivery mode guard (if the sensor entity linked to a zone is removed, NeverDry auto-downgrades the delivery mode instead of failing silently).
Thanks to everyone who tried it, starred it, and asked questions here — that engagement definitely helped get the submission reviewed faster.
Small update — NeverDry now ships with its own dashboard card
The most common question here was "how do I see all my zones at a glance?", so v0.10.7 adds the NeverDry Zone Card — a Lovelace card bundled with the integration that shows every zone in one place:
Current water deficit and status chips per zone
Next watering and estimated duration
Flow rate, now displayed in L/h (gal/h in imperial)
It's registered automatically — no manual resource setup, no YAML. After updating, just add the "NeverDry Zone Card" from the dashboard card picker (hard-refresh your browser once so HA loads the new resource).
Also in v0.10.7:
Full SI / imperial unit support across the config flow and runtime
Per-zone valve stop, with correct handling when a valve is closed externally or by hardware
More accurate water accounting and rain-event de-duplication
Hello, actually not. I'm working on the abstraction of the valve to be used as a device valve rather than a switch. Probably once implemented, it will be easier to do what you asked.
Hello, I have a SONOFF SWV-ZFE irrigation smart valve with flow sensor. By the way the real time volume sensor is not very in real time, it seems it updates only after use. Which mode should I use?
P.S. I don’t have a rain sensor, so I created a virtual one via the meteo integration, is it possible to by-pass it and rely only on the humidity soil sensor?
The SONOFF SWV-ZFE is to new. No Standard ZHA Support so far. You need to put a custom quirks in place. But still some issues here. A new firmware is announced in the ewelink forum. See here: SWV-ZFU/SWV-ZFE-SONOFF Help Center