Skip to content

Rachio

Cloud-connected irrigation controls coordinated with local relay outputs, equipment monitoring and Home Assistant routines.

Installation
Built into Home Assistant
Connection
Rachio cloud and controller updates
In this setup
Generation 3 irrigation controller

Documentation checked .

What it is

The Rachio integration connects Home Assistant to supported Rachio irrigation equipment through the Rachio service. It exposes supported control switches and status inputs. Sprinkler controllers use incoming updates that require a reachable Home Assistant callback, while smart hose timers use polling. The controller and Home Assistant's extra automations remain separate parts of the system.

My Setup

Connecting Irrigation to the Rest of My Home Assistant Build

I use a Rachio Generation 3 irrigation controller and bring its controls and reported states into Home Assistant. Rachio remains the controller. Home Assistant adds coordination with relay outputs, water-system monitoring, notifications and scripts.

This is useful because the watering system involves more than a start button. My configuration connects a requested watering operation to other equipment and gives me context when the reported operation and equipment behavior do not agree.

A cloud-connected controller with Home Assistant coordination

My integration uses Rachio account credentials in the form of an API key and has a cloudhook configured for incoming updates. Commands and state reporting therefore involve Rachio's service. The controller being on my home network does not make this integration a direct local control connection.

Rachio controller ↔ Rachio cloud ↔ Home Assistant → coordinated equipment and notifications

The built-in integration exposes switches for supported controller functions and zones, alongside status inputs. My automations use those Rachio entities as both command targets and information sources. The controller's own scheduling and Home Assistant's additional scripts remain separate layers.

The official documentation distinguishes sprinkler-controller updates from smart hose timers, which use polling. My setup described here is the Generation 3 controller path. Features listed for a hose-timer calendar should not be assumed to be part of this installation.

The connections around my irrigation controller

Scroll the table horizontally to compare all four columns.

Rachio connections in my build
ConnectionInformationHow I use itLimit or dependency
Rachio integrationController and zone states, plus watering commands.Bring irrigation into Home Assistant routines.Rachio cloud access and the controller update path.
ZHA relay outputsOn/off outputs mirroring selected Rachio zones.Drive the valves for zones with no valve on the controller.The Home Assistant automation and Zigbee connection.
Pentek monitoringPressure, power, frequency and operating information.Add equipment context to irrigation notifications.A separate monitoring integration, not Rachio telemetry.
Templates and countersDerived running state and conditional counts.Summarize activity when configured conditions match.A derived observation does not directly measure water volume.
Weather and scriptsWeather conditions and bounded watering requests.Apply additional checks before a scripted run.The script and its inputs must be available and current.

Coordinating Rachio states with ZHA relay outputs

Some of my Rachio zones have no valve on the controller. Home Assistant watches those zone switches and mirrors them onto a Zigbee relay that drives the valves, so Rachio's schedules still apply to them. The relays appear as light entities, so the entity domain does not by itself tell me what equipment an output operates.

The automation includes a follow-up state check and notification path. That helps distinguish requesting an output change from observing the expected reported state afterward. It is still a software observation, not a measurement of the downstream valve, pump or water flow.

Reconciliation after startup and between changes

A separate routine checks the Rachio-to-relay relationship at Home Assistant startup and periodically. It compares known on/off states and requests the matching relay state. This gives the build a way to reconcile a mismatch beyond reacting only to the original zone transition.

Reconciliation depends on the states Home Assistant has received. It cannot independently establish what the controller is physically doing during a cloud interruption. A stale source state and an unavailable relay need different investigation, even if both appear as a missed output change.

A separate failsafe closes any relay channel left open too long. The mirror, reconciliation and failsafe all run in Home Assistant, so the controller's run limit does not reach those valves on its own.

The ZHA guide covers the relay side. Home Assistant joins the two integrations; there is no direct Rachio-to-Zigbee binding in this workflow.

Adding water-system context to irrigation activity

Commands and conditions

My configuration contains a script that requests a sequence of zones through Rachio's multi-zone scheduling action. A surrounding automation checks controller-related states and weather context before calling a script. Other routines can request watering to stop and issue notifications.

These are configured control paths, not a claim that every planned run completed. Rachio accepting a request, the integration receiving an update and the intended irrigation equipment operating are separate stages.

Independent pump information

My Pentek IntelliDrive integration contributes pressure, power and operating-state information to irrigation-related notifications. Another routine compares power-related observations during watering. This adds a second source of context when a zone reports active but the expected equipment behavior is unclear.

Those measurements come from the pump-monitoring integration. They are not values produced by Rachio. Calculations based on power are estimates with assumptions; I do not present them as readings from a dedicated flow meter or as verified water savings.

Derived running state

A template running indication also feeds a counter when irrigation and relay conditions match. It is useful as a summary of qualifying state transitions. It does not count gallons, prove delivery to a particular outlet or establish that every physical start was observed.

Separate the controller limit from the automation limit

The Home Assistant integration needs access to Rachio's cloud, and sprinkler-controller updates require a reachable callback path. A functioning local Zigbee network cannot compensate for missing Rachio state updates. Likewise, a healthy Rachio connection does not establish that the additional relay path is healthy.

The official setup guide recommends setting a maximum zone run duration for script-driven operation. A controller-enforced duration provides a boundary when a later script action does not run. For my relay-backed zones, that boundary reaches the valve only through the Home Assistant mirror.

API limits and delayed updates are reasons to avoid treating repeated command requests as a repair strategy. The useful first check is whether the request, state update or downstream action failed. My public examples omit watering schedules, zone names and equipment identifiers while retaining those architectural distinctions.

Follow the request through to the physical result

I start with the Rachio side: whether the controller reports the expected operation and whether Home Assistant received a corresponding update. If the two disagree, I check the cloud connection and callback path before changing the relay automation.

Next comes the automation trace and relay state. I check that the expected branch ran, that the target remained available, and that the reported state matched the request. The reconciliation routine is another source of evidence, not proof that every mismatch has been corrected.

Finally I compare the independent monitoring information with the equipment itself. A pressure or power notification provides context; confirming the physical outcome still requires an appropriate observation of the irrigation equipment. This keeps the guide clear about what software can report and what it cannot verify.

What it can do

  • Zone and schedule controls

    Request supported watering operations through the integration's switches and actions.

  • Controller functions

    Expose supported controls such as standby and rain delay alongside zone controls.

  • State-driven coordination

    Use reported irrigation states in Home Assistant automations and notifications.

  • Equipment context

    Combine Rachio state with separate sensors and integrations without attributing their measurements to Rachio.

Install and connect

  • Supported Rachio equipment associated with a Rachio account and its API key.
  • Working access to the Rachio cloud service.
  • For sprinkler-controller updates, a supported internet-reachable callback path such as Home Assistant Cloud.
  1. Prepare the Rachio account

    Complete controller setup in Rachio and obtain the API key from the account settings described in the official guide.

  2. Add the integration

    Open Settings > Devices & services > Add integration and select Rachio. Supply the API key through the configuration flow.

  3. Verify state updates

    Confirm the supported callback path is working for a sprinkler controller. Check reported state before attaching downstream automation.

  4. Set operating limits

    Review maximum zone run duration in the integration options before script-driven watering. Verify additional relays and monitoring as separate paths.

Limits and caveats

Sources and next steps