Home Assistant integration for GeoDrops soil moisture sensors, backed by GeoDrops' public BigQuery table (they have no official HA integration or REST API — BigQuery is what they point developers to).
Each configured sensor becomes its own HA Device with entities for moisture, moisture index, soil temperature, battery, data age, and more. The per-depth moisture/temperature breakdown and a handful of diagnostic entities are disabled by default and can be turned on per-device if wanted.
Every device gets a Needs Water binary sensor, and the integration adds one hub-level GeoDrops → Irrigation Needed binary sensor that ORs those votes together.
A spot votes "needs water" when:
- its GeoDrops moisture index (0–5, calibrated overall dryness — fleet averages: 1 ≈ 65% moisture, 3 ≈ 79%, 5 ≈ 95%) has dropped to or below the needs-water threshold (default index ≤ 1),
- and it has not yet recovered to the watered-enough threshold (default index ≥ 3) — the gap is hysteresis so a spot hovering on the line doesn't chatter the sprinklers,
- and the reading is trustworthy (calibrated,
qcn≥ 1, not mid-recalibration or faulted), - and it isn't currently raining there.
The
DW_M_LOW*nextActionflag is not used for this — across the fleet it fires even on soil at index 4 (~88% moisture); it's a per-depth "one layer reads low" note, not a root-zone dryness signal. The depths it names are still shown on the Low Moisture Depths sensor for context.
Both thresholds are set in the integration's options (Settings → Devices & services → GeoDrops → Configure), on the same screen as the device serials.
Irrigation Needed exposes attributes for automations/debugging: dry_serials, dry_but_raining_serials, not_reporting_serials, evaluated_serials, dry_index_threshold, wet_index_threshold.
Wire it to OpenSprinkler yourself, e.g. an automation that starts a program/zone when binary_sensor.geodrops_irrigation_needed turns on (and, if you like, stops it when it turns off). This keeps GeoDrops and OpenSprinkler decoupled.
GeoDrops readings update roughly every 3-6 hours on their end, so this integration polls BigQuery every 20 minutes but won't see new values more often than the sensors actually report.
Before installing, you need:
- A Google Cloud project with the BigQuery API enabled
- A service account (scoped to BigQuery Job User + BigQuery Data Viewer) with a downloaded JSON key, placed somewhere Home Assistant can read it (e.g.
/config/geodrops-service-account.json) - The serial number(s) (
mfgSn) of your GeoDrops device(s)
There are two main ways to install this custom component within your Home Assistant instance:
-
Using HACS (see https://hacs.xyz/ for installation instructions if you do not already have it installed):
- From within Home Assistant, click on the link to HACS
- Click the three-dot menu (⋮) in the top right corner and select Custom repositories
- Enter the URL for this repository in the section that says Add custom repository URL and select Integration in the Category dropdown list
- Click the ADD button
- Close the Custom repositories window
- Search for GeoDrops in HACS and select it from the results (HACS uses a single unified search/filter list rather than separate category tabs)
- Click to download/install it, and proceed with any on-screen instructions
- Restart your Home Assistant instance and then proceed to the Configuration section below.
-
Manual Installation:
- Download or clone this repository
- Copy the contents of the folder custom_components/geodrops into the same file structure on your Home Assistant instance
- An easy way to do this is using the Samba add-on, but feel free to do so however you want
- Restart your Home Assistant instance and then proceed to the Configuration section below.
While the manual installation above seems like less steps, it's important to note that you will not be able to see updates to this custom component unless you are subscribed to the watch list. You will then have to repeat each step in the process. By using HACS, you'll be able to see that an update is available and easily update the custom component.
There is a config flow for this integration. After installing the custom component:
- Go to Settings → Devices & services
- Click + Add integration (bottom right) to set up a new integration
- Search for GeoDrops and click on it
- Enter the path to your service account JSON key and your device serial number(s), comma-separated
- You will be guided through the rest of the setup process via the config flow