Integrating GeoDrops to Rachio via Home Assistant

Building off my earlier post about integrating GeoDrops into Home Assistant, I wanted to include my current Home Assistant automation that detects when GeoDrops moisture levels have changed, then sync those new moisture levels to Rachio through the official Home Assistant Rachio integration.

Here’s the gist with the Home Assistant Automation (instructions below): HomeAssistant GeoDrops -> Rachio Moisture Sync Script · GitHub

N.B. - while this integration works well and I can confirm that Rachio zone moisture levels are updating correctly, I may still be wrong about how the mapping between GeoDrops data and Rachio’s zone moisture is done. I based most of my work through interpreting Lawrence’s latest post about moisture normalization.

Lastly, I plan to let Rachio’s Flex Daily watering schema leverage the updated moisture data (vs. ET estimate) to plan when to actually water, but this spring has been wet enough that it hasn’t fired yet. You could potentially simplify and set a threshold (e.g. when dominant moisture equals defined percentage, run a watering schedule via Rachio) if you want to try that instead.

GeoDrops → Rachio Moisture Sync

Home Assistant Automation | v1.0.0

Syncs GeoDrops dominant real moisture sensor readings directly to Rachio zone moisture percent (rachio.set_zone_moisture_percent), enabling GeoDrops-calibrated soil data to drive Rachio’s irrigation scheduling without manual overrides.


How It Works

GeoDrops’ Learn Soil Profile + Learn Max Moisture AI calibration normalizes each sensor’s output so that:

  • 100% ≈ Field Capacity (FC)

  • 0% ≈ Permanent Wilting Point (PWP) / dry

This calibrated scale maps directly onto Rachio’s 0–100 API scale, so no intermediate VWC conversion is needed. The automation watches for state changes on your GeoDrops dominant moisture sensors and pushes the value straight to the corresponding Rachio zone(s).

:warning: Calibration required. If GeoDrops Learn Soil Profile / Learn Max Moisture are not active and complete for your devices, readings will not be properly normalized and this automation will produce incorrect results. Validate against at least one known wet event and one dry event before relying on it for irrigation scheduling.


Requirements

  • Home Assistant (tested on 2026.x)

  • GeoDrops sensors publishing to HA via MQTT — see geodrops_sync.py

  • Rachio integration configured in HA

  • rachio.set_zone_moisture_percent service available (confirmed in Developer Tools → Services)

  • GeoDrops Learn Soil Profile and Learn Max Moisture completed for all devices


Installation

1. Download the automation

Download geodrops_rachio_moisture_sync.yaml from this Gist.

2. Add to your HA config

If using automations.yaml:
Strip the comment block header (lines starting with # before alias:) and paste the YAML content into your automations file.

If using packages:
Place the file in your packages directory and ensure homeassistant.packages is configured in configuration.yaml.

3. Edit the configuration section

At the bottom of the file, update the zone_config block with your own entity IDs:

variables:
  zone_config:
    switch.your_rachio_zone:               # Rachio zone entity ID
      dominant_sensor: sensor.your_geodrops_dominant_moisture_sensor
      fc: 18    # Field capacity % (reference only)
      pwp: 8    # Permanent wilting point % (reference only)

Also update the triggers list to match the sensor entities referenced in zone_config.

4. Reload automations

Developer Tools → YAML → Reload Automations

5. Verify

Check the HA Logbook for entries named GeoDrops → Rachio. Each entry shows the sensor reading, the value pushed to Rachio, and the FC/PWP reference values used for that zone.


Zone Configuration Reference

Field Description
dominant_sensor HA entity ID of the GeoDrops sensor driving this zone (sensor.*)
fc Field capacity % for your soil — stored as a reference audit trail in logbook, not used in the calculation when GeoDrops calibration is active
pwp Permanent wilting point % — same as above

Sensor fan-out is supported. One GeoDrops sensor can drive multiple Rachio zones (e.g., a single front slope sensor driving front slope, front yard, and front stairs zones). Each Rachio zone can only have one sensor.


Behavioral Notes

Change detection: Updates are suppressed when the integer-truncated value is unchanged from the previous reading (e.g., 17.1 → 17.8 will not trigger an update since both truncate to 17). This reduces Rachio API chatter. Adjust the third condition to use | round instead of | int for finer granularity at the cost of more API calls.

Queue behavior: The automation runs in queued mode with max: 15. During a sensor reconnection burst (e.g., MQTT broker restart), up to 15 runs may queue per sensor. Change detection limits redundant API calls but does not prevent all of them.

5-second debounce: A short delay after trigger fires allows sensor state to stabilize before the value is read and pushed.

Startup / first publish: The change-detection condition safely handles the case where no previous state exists (HA startup, first MQTT publish), allowing the initial value through to Rachio.


Troubleshooting

No logbook entries appearing
→ Check that the sensor entity IDs in the triggers list match exactly what HA is publishing (Settings → Developer Tools → States, search for your sensor name).

Rachio not updating
→ Confirm rachio.set_zone_moisture_percent is available in Developer Tools → Services. Some Rachio plans or older integration versions may not expose this service.

Values seem wrong (too wet / too dry)
→ GeoDrops calibration may not be complete. Check the GeoDrops app for Learn Soil Profile status. Also verify your FC/PWP reference values are reasonable for your soil type by checking against NRCS Web Soil Survey for your property.

All zones showing same moisture level
→ Multiple zones sharing one sensor is intentional for adjacent zones. If this is unexpected, check that each zone’s dominant_sensor points to the correct entity.


Related

  • geodrops_sync.py — Python script that pulls GeoDrops data from BigQuery and publishes to HA via MQTT

Changelog

1.0.0 — 2026-06-01

  • Initial release

  • Direct dominant moisture % → Rachio API mapping (GeoDrops-calibrated, no VWC intermediate)

  • Multi-zone fan-out: one sensor can drive multiple Rachio zones

  • Hardened from_state null safety for startup / first-publish edge case

  • Change detection suppresses sub-integer-level Rachio API updates

  • Queued mode (max 15) with 25 stored traces for debugging


License

MIT

I can’t wait to try it out! Thank you for your work.

Heads up; the Python script link is getting a 404 (https://gist.github.com/ajbaldwin/geodrops_sync)

Whoops! Claude wrote the summary without having the actual Gist addresses. Added them in - thanks for the heads up!