# Rachio Binding
This binding integrates Rachio irrigation controllers and Smart Hose Timer resources through the Rachio Cloud APIs. Use the Rachio app for account setup, device pairing, and detailed schedule or program editing.
# Supported Things
The cloud Thing is a bridge for one Rachio account.
After it is online, the binding discovers the Rachio resources that belong to that account.
| Thing Type | Description |
|---|---|
cloud | Rachio Cloud Connector bridge. |
device | Rachio irrigation controller. |
zone | Irrigation zone for a controller. |
schedule | Fixed irrigation schedule rule. |
flex-schedule | Flex irrigation schedule rule. |
base-station | Smart Hose Timer Wi-Fi hub. |
valve | Smart Hose Timer valve. |
valve-program | Smart Hose Timer program with its own metadata and commands. |
Rachio exposes valve programs as separate resources, so the binding models each one as a valve-program Thing.
# Discovery
Discovery starts automatically when the cloud bridge is online.
You can also start a scan from the Inbox.
Discovery can create controller, zone, schedule, flex schedule, Smart Hose Timer base station, valve, and valve-program Things when those resources exist in the Rachio account.
Manual Things require the corresponding Rachio UUIDs, such as deviceId, zoneId, scheduleRuleId, baseStationId, valveId, and programId.
Discovery is recommended because it fills those IDs automatically.
# Configuration
# Cloud Connector
Create a Rachio API key in the Rachio Web App account settings, then add a Rachio Cloud Connector Thing. Discovery starts automatically after the bridge connects.
| Parameter | Description |
|---|---|
apikey | Rachio API key. |
pollingInterval | Poll interval in seconds. Use a moderate value such as 600 with irrigation controller webhooks. |
defaultRuntime | Runtime in seconds used when a zone or valve command does not provide one. |
eventHistoryLookbackHours | Hours of recent irrigation controller event history to read. Set to 0 to disable event-history polling. |
forecastUnits | Forecast units, METRIC or US. |
hoseSummaryLookbackDays | Days of recent Smart Hose Timer summary data to read. |
hoseSummaryLookaheadDays | Days of upcoming Smart Hose Timer summary data to read. |
callbackUrl | Public HTTPS URL that forwards legacy Rachio NotificationService POST requests to /rachio/webhook. |
callbackUsername | Optional legacy callback URL username. Leave empty unless the public endpoint supports URL userinfo callbacks. |
callbackPassword | Optional legacy callback URL password. Leave empty unless the public endpoint supports URL userinfo callbacks. |
clearAllCallbacks | Cleanup switch for stale Rachio callback registrations. Leave false for normal operation. |
autoConfigureWebhooks | Optional modern Rachio WebhookService registration for irrigation controllers. Defaults to false. |
autoConfigureHoseTimerWebhooks | Also register modern Smart Hose Timer valve and valve-program webhooks. Requires autoConfigureWebhooks=true. |
useCloudWebhook | Request the public webhook URL from openHAB Cloud Connector when modern registration is enabled. |
publicWebhookUrl | Manually supplied public HTTPS URL for modern Rachio WebhookService callbacks. |
Only Thing configuration is used. There is no add-on-wide fallback configuration.
# File-Based Example
Bridge rachio:cloud:home "Rachio Cloud" [
apikey="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
pollingInterval=600,
defaultRuntime=120,
eventHistoryLookbackHours=24,
forecastUnits="METRIC",
hoseSummaryLookbackDays=2,
hoseSummaryLookaheadDays=7,
callbackUrl="https://example.org/rachio/webhook",
clearAllCallbacks=false
] {
Thing device controller "Rachio Controller" [
deviceId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
]
Thing zone front-lawn "Front Lawn" [
zoneId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
]
Thing schedule morning "Morning Schedule" [
scheduleRuleId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
]
Thing flex-schedule flex "Flex Schedule" [
flexScheduleRuleId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
]
Thing base-station hose-hub "Hose Timer Hub" [
baseStationId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
]
Thing valve garden-hose "Garden Hose Valve" [
valveId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
baseStationId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
]
Thing valve-program morning-hose "Morning Hose Program" [
programId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
valveId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
baseStationId="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
]
}
# Webhooks
Webhook support is optional, and polling remains active for fallback and state reconciliation. Modern openHAB WebhookService and legacy Rachio NotificationService processing are mutually exclusive for irrigation events. Note: When changing between legacy and modern webhook modes, restart openHAB (or the binding) to ensure a clean webhook registration lifecycle and activate the new mode.
Modern WebhookService registration is off by default.
Set autoConfigureWebhooks=true and either:
- set
useCloudWebhook=trueto use a public URL from the openHAB Cloud Connector, or - set
publicWebhookUrlto a public HTTPS URL that forwards to/rachio/webhook.
The manual publicWebhookUrl must use HTTPS and must not contain URL userinfo credentials.
Modern events require a valid x-signature over the received request body.
Multiple Rachio bridges safely share the same local /rachio/webhook servlet path.
When modern mode is active, stale legacy callbacks may still arrive; they are acknowledged and ignored.
Otherwise, configuring callbackUrl keeps legacy NotificationService support available.
Legacy callbacks do not carry x-signature and are accepted only when their externalId and controller identity match a configured bridge and controller.
Processed irrigation events include schedule and zone-run status, rain sensor and delay changes, weather skips, and related controller status events. Events without dedicated channel updates trigger a state refresh.
Smart Hose Timer webhooks are also off by default.
Set autoConfigureHoseTimerWebhooks=true in addition to autoConfigureWebhooks=true to register modern webhooks for valves and valve programs.
These webhooks cover valve run start/end and valve-program rain-skip creation/cancellation.
Smart Lighting webhooks are not supported.
# Channels
All public Thing type IDs, channel IDs, and channel type IDs use lower-case-hyphen naming.
Most duration channels use Number:Time; plain numeric commands are interpreted as seconds unless noted otherwise.
# Controller Channels
| Channel Group | Channels |
|---|---|
| State | name, active, online, paused, pause-time, sleep-mode, rain-delay, rain-sensor-tripped |
| Commands | run, run-zones, runtime, stop |
| Active Run | active-zone-number, active-zone-name, active-zone-id, current-schedule-id, current-schedule-name, current-schedule-type, current-schedule-start-time, current-schedule-end-time, current-schedule-duration, current-schedule-running |
| Events | last-api-event-type, last-api-event-time, last-api-event-summary, last-skip-type, last-skip-schedule-id, last-skip-start-time, last-skip-reason, last-event, last-event-time, last-update |
| Forecast | forecast-summary, forecast-today-high, forecast-today-low, forecast-precipitation, forecast-precipitation-probability, forecast-wind, forecast-updated |
| Schedule Info | schedule-name, schedule-info, schedule-start, schedule-end |
active-zone-number is 0 when no zone is active; active-zone-name and active-zone-id remain NULL while idle.
run-zones is a comma-separated list of zone numbers for the next controller-level run command.
An empty value means all zones.
# Zone Channels
| Channel Group | Channels |
|---|---|
| State | name, number, enabled, last-watered-date, last-update, last-event, last-event-time |
| Commands | run, runtime, moisture-level, moisture-percent |
| Water Model | available-water, depth-of-water, saturated-depth-of-water, management-allowed-depletion, root-zone-depth, efficiency, yard-area-square-feet |
| Runtime Data | run-total, fixed-runtime, max-runtime, runtime-no-multiplier, schedule-data-modified |
| Image | image-url, image |
# Zone Channel Units
Zone water-depth and area channels retain the units returned by the Rachio API model:
| Channel | Unit |
|---|---|
available-water | in |
depth-of-water | in |
saturated-depth-of-water | in |
root-zone-depth | in |
yard-area-square-feet | ft² |
These are API-backed water-model values. The channel metadata supplies default unit hints, but file-based Items retain their own unit metadata and label patterns.
moisture-level and moisture-percent are command inputs for Rachio's setMoistureLevel and setMoisturePercent operations, not continuously readable sensors.
They may remain UNDEF until commanded and are not derived from available-water, depth-of-water, or saturated-depth-of-water.
# Schedule Channels
Fixed schedule and flex-schedule Things expose the same channel IDs:
| Channel | Description |
|---|---|
name | Schedule rule name. |
enabled | Whether the rule is enabled. |
type | Schedule rule type. |
start-time | Schedule start time when provided by Rachio. |
last-run | Last run time when provided by Rachio. |
next-run | Next run time when provided by Rachio. |
zones | Comma-separated Rachio zone IDs associated with the rule. |
seasonal-adjustment | Seasonal adjustment value; sending a number updates it. |
start | Send ON to start the rule. |
skip | Send ON to skip the rule. |
skip-forward-zone-run | Send ON to skip the currently running zone for the rule. |
last-update | Timestamp of the last schedule state update. |
# Smart Hose Timer Channels
| Thing Type | Channels |
|---|---|
base-station | name, online, last-update |
valve | name, online, run, runtime, default-runtime, state-matches, flow-detected, battery-level, serial-number, last-run-type, last-end-reason, next-planned-runtime, next-planned-run-duration, next-planned-run-program-id, next-planned-run-skipped, last-completed-runtime, last-completed-run-duration, last-run-status, skip-next-planned-run, cancel-next-planned-run-skip, last-update, last-event, last-event-time |
valve-program | name, enabled, program-type, valve-id, start-time, next-runtime, last-runtime, duration, days-of-week, interval-days, seasonal-adjustment, updated-at, next-program-run-skipped, skip-next-planned-run, cancel-next-planned-run-skip, last-rain-skip-planned-run-start-time, last-rain-skip-canceled-planned-run-start-time, last-update, last-event, last-event-time |
Smart Hose Timer skip commands need run or program identifiers from Rachio summary data. When Rachio has not supplied those identifiers, the command is ignored and logged at debug level.
# Item Examples
Switch Rachio_Controller_Stop "Stop Watering" {
channel="rachio:device:home:controller:stop"
}
String Rachio_Controller_RunZones "Run Zones" {
channel="rachio:device:home:controller:run-zones"
}
Number:Time Rachio_Controller_Runtime "Runtime [%d s]" {
channel="rachio:device:home:controller:runtime"
}
Switch Rachio_Zone_Run "Front Lawn" {
channel="rachio:zone:home:front-lawn:run"
}
Number:Time Rachio_Zone_Runtime "Front Lawn Runtime [%d s]" {
channel="rachio:zone:home:front-lawn:runtime"
}
Number:Length Rachio_Zone1_AvailableWater "Available water [%.2f in]" {
unit="in",
channel="rachio:zone:<bridgeId>:<controllerId>-1:available-water"
}
Number:Length Rachio_Zone1_DepthOfWater "Depth of water [%.2f in]" {
unit="in",
channel="rachio:zone:<bridgeId>:<controllerId>-1:depth-of-water"
}
Number:Area Rachio_Zone1_YardArea "Yard area [%.1f ft²]" {
unit="ft²",
channel="rachio:zone:<bridgeId>:<controllerId>-1:yard-area-square-feet"
}
Number:Length Rachio_Controller_ForecastPrecipitation "Forecast precipitation [%.1f mm]" {
unit="mm",
channel="rachio:device:<bridgeId>:<controllerId>:forecast-precipitation"
}
Switch Rachio_Schedule_Start "Start Morning Schedule" {
channel="rachio:schedule:home:morning:start"
}
Switch Rachio_Valve_Run "Garden Hose" {
channel="rachio:valve:home:garden-hose:run"
}
The forecast precipitation example is separate from zone water-depth telemetry and is intended for METRIC forecast mode.
Existing file-based Items that show SI base units may need explicit unit metadata or an updated label pattern as shown above.
# Notes and Limitations
- The binding depends on Rachio Cloud availability and API rate limits.
- Use the Rachio app for full schedule, program, account, and device management.
- Smart Hose Timer state can be asynchronous;
state-matchesmay remainOFFuntil the valve applies a change. - Zone images are proxied through openHAB because Rachio can return image URLs without the expected media type.