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.