Integrating GeoDrops Soil Moisture Sensors with Home Assistant

Just published the scheduler at GitHub - ajbaldwin/ha-geodrops-rachio-irrigation-scheduler: GeoDrops + Rachio + Tempest nightly irrigation scheduler for Home Assistant (pyscript). Configure without editing Python. · GitHub

Installation instructions are here: ha-geodrops-rachio-irrigation-scheduler/README.md at main · ajbaldwin/ha-geodrops-rachio-irrigation-scheduler · GitHub

Configuration examples are included as well: ha-geodrops-rachio-irrigation-scheduler/examples at main · ajbaldwin/ha-geodrops-rachio-irrigation-scheduler · GitHub

Hope you enjoy!

Thank you. I have it all installed, but running in the background so I can observe it’s behavior for a few days before the cutover. Sincerely appreciate your efforts.

No worries - always open to feedback. There’s a lot of power under the hood (I’m particularly proud of the zone adjacency awareness!) that I hope helps.

Some of my own observational notes:

  1. You’re going to see more Rachio notifications during a run because, to Rachio, all of these API-started runs are consider manual “quick runs”. The scheduler batches groups together where it can (reducing notifications), but if you’re using soak/cycle functionality (I’m big on this), Rachio doesn’t expose that functionality via API, so you’re going to get a notification for each soak cycle start. Wish this wasn’t the case, but I decided the soak/cycle functionality was important enough for me to deal with grouped notifications (which are silenced for me at night anyways). I’m looking at using the PAUSE feature available via the API to do this in a less spammy way.

  2. Since we’re using GeoDrops data as ground truth and irrigation systems are (generally) designed with generous overlap zones to ensure complete lawn coverage, watch out for scenarios where watering one zone will hit the sensor of another zone and artificially inflating the moisture level for that zone. For about two weeks, the system watered my side yard faithfully and managed to convince my front yard sensor that the front yard was living its’ best life =)

Just released v.0.6.0, which leverages a new scheduler logic using the Rachio PAUSE feature that I mentioned above. I’ve run it for the last couple of nights and it works well. I’m enjoying only seeing two Rachio notifications when I wake up (run start and run complete).

Also added the ability to adjust the watering window stop by a time offset (e.g. stop watering at 60 minutes after sunrise), configurable on a per-drought level basis.

Specifics + diffs: Release v0.6.0 · ajbaldwin/ha-geodrops-rachio-irrigation-scheduler · GitHub

Thanks for this, the pile of notifications was a bit annoying :slightly_smiling_face:

1 Like

No problem, and I agree :slight_smile:

Released v0.7 as a resiliency improvement release: Release v0.7.0 · ajbaldwin/ha-geodrops-rachio-irrigation-scheduler · GitHub

Collapsed-schedule drop recovery

When Rachio drops the single night-long schedule mid-run, the scheduler now re-issues a fresh schedule for the remaining water (up to 2 retries) instead of aborting and losing the night. Adds a recoveries count in the run record, a persisted breadcrumb trail (start/pause/resume/drop-detected/recover/give-up/end) so a drop is diagnosable from the record alone, and a post-resume valve probe that detects a dropped resume quickly.

Restart-during-wait recovery

The nightly plans at 23:00 but waits hours for its pre-dawn watering window. An HA restart during that wait used to silently discard the run; it now re-arms on startup.

irrigation_reset action

New pyscript.irrigation_reset action (and “Irrigation: Reset” script/button) cancels a planned or in-progress run and resets the system to idle — unlike irrigation_stop, it interrupts the pre-dawn waiting phase immediately.

Released v0.8 as a feature improvement release since it’s overseeding season: Release v0.8.0 · ajbaldwin/ha-geodrops-rachio-irrigation-scheduler · GitHub

Per-zone exclude (on by default, no config needed to use it)
Pull any zone out of both the nightly plan and calibration probing with an input_boolean toggle — e.g. for an overseeded zone you’re watering separately on a lighter, more frequent schedule. Optional per zone via exclude_boolean in config.yaml; omit it and the zone behaves exactly as before.

Active Watering Calibration (Beta, off by default)
Each zone can now learn its own dosing span from its actual soil-moisture response — running small “probe” waterings, measuring the resulting rise, and converging on a points-per-minute efficacy — instead of trusting the Rachio-derived dosing estimate, which can be substantially off for a given yard’s soil and sensor placement.

This is new and still being validated, so it ships off by default. See the README section “Enabling Active Watering Calibration (Beta)” before turning it on — it covers what it does, how to watch it converge, how to exclude one zone from it, and how to fall back instantly if it’s not behaving as expected.