Fixed schedules water in the rain, starve your lawn in a heatwave, and say nothing when a valve sticks open. This doesn’t: it weighs soil moisture, the forecast and how long each zone has waited — then tells you its decision in one plain sentence. And it never, ever leaves a valve open.
German voice-over — everything else speaks for itself.
Set a watering time once. Everything else runs on its own, and you can read along at every step.
Soil-moisture sensors (optional), your weather integration’s forecast, and measured rain from the last 24 hours. Whatever is missing, the system works around — it just says so.
Every 30 minutes each zone gets a score from 0–100: dry soil, hot forecast and long-unwatered zones push it up; rain — fallen or expected — vetoes it. The score becomes tonight’s minutes, and the reasoning becomes one plain sentence on your dashboard.
At your chosen time the zones run in order (or in parallel where the plumbing allows). Potted plants get small top-up doses during the day instead. Five safety layers watch every single valve.
This is the actual formula the integration runs — not a mock-up. Drag the sliders and watch the decision change.
Each zone has a status sensor with the decision in plain words — “Score 72 → 16 min” or “rain veto”. No black box, no guessing why the lawn stayed dry. A hub sensor adds the whole day in one line: forecast, rain, every zone’s soil, computed-at time.
Rain that fell — or is about to — skips the run. Heatwaves and long-unwatered zones raise it. Moist soil above your threshold stops it outright. Optionally, thirst is rated by real evapotranspiration (ET₀, Hargreaves) from sun angle + forecast — no extra sensors.
Potted plants dry out in hours, not days. Pot zones get small daytime doses that hold soil in a target band, with a midday-sun lock and a daily dose limit.
Add, edit and remove zones in the UI — each with its own valves, sensors, limits and thresholds. Two valves can share one zone and run back to back.
With a flow sensor per zone you get liters per session, day and month — and a monthly cost figure from your water tariff.
Skip today, vacation mode, boost mode, per-zone pause. Every threshold and weight is a dial in the UI — sensible defaults, no YAML required.
No proprietary controller, no hub to buy. If Home Assistant can switch it, this can water with it.
| You have | What’s needed |
|---|---|
| Irrigation valves | Any valve that appears as a switch — Zigbee, Wi-Fi, Z-Wave, relay boards. (valve./light. entities: one-line wrapper recipe in the FAQ.) |
| Weather | Any weather integration with a forecast — Met.no (built-in), AccuWeather, DWD, … That’s the only hard requirement. |
| Soil-moisture sensors | Optional. Any %-sensor, any brand, several per zone. Without them the score uses weather and thirst-days alone. |
| Rain gauge, solar radiation, flow meter | Optional. A rain sensor sharpens the rain veto, radiation enables the midday-sun lock for pots, a flow meter unlocks liters & costs. |
A dryness report with your coffee, a plan notification before the run, the run itself at your chosen time — and pot top-ups in between.
Wireless valves fail in creative ways. Every layer below exists because of a real incident in the garden this was built in.
Every close is retried until the valve actually reports “off” — a radio hiccup at the wrong moment can’t leave water running.
When a run ends — normally, cancelled or crashed — one final close goes to all valves. If one still reports open, your phone knows.
Opened a valve from the dashboard and got distracted? It closes itself after your standard duration. A hard watchdog force-closes anything open longer than the emergency limit — no matter who opened it.
Home Assistant restarted mid-watering? Orphaned valves are found as soon as the radio network is back — and closed immediately.
One button cancels everything and closes every valve with retries. A valve that can’t confirm counts as open — you get told, not reassured.
This started as one household’s automation: two lawn zones, a berry drip line and a tomato pot, running through full seasons. The defaults are the values that ended up working there — and the safety layers exist because valves really did hang, radios really did drop out, and Home Assistant really did restart mid-watering. It was then rebuilt for anyone’s hardware, in the open, under MIT.