A custom integration to connect your Zodiac iAqualink Exo pool system to Home Assistant, providing full control and monitoring of your pool’s features.
- 23 Sep 2025 - Added experimental climate entity for systems with the heat pump enabled, this is very much WIP, so please feedback!.
- 15 Sep 2025 – Added option to adjust API refresh rate to avoid “Too Many Requests” errors.
- 3 Sep 2025 – Added binary_sensors for each schedule plus actions to change schedules.
- In Home Assistant, go to HACS → Integrations.
- Search for Exo Pool and click Install.
- Restart Home Assistant.
- Go to Settings → Devices & Services → Add Integration, search for Exo Pool, and follow the prompts.
- Automatic Authentication – Secure login to the iAqualink API using your email and password.
- System Selection – Pick your Exo system from multiple pools/devices (filtered to
device_type: "exo"
). - Sensors – Temperature, pH, ORP, ORP Boost Time Remaining, Pump RPM, Error Code, Wi-Fi RSSI, Schedules.
- Binary Sensors – Filter Pump running, Chlorinator running, Error State, Authentication Status, Connected, and one per schedule.
- Switches – ORP Boost, Power State, Production, Aux 1, Aux 2, SWC Low.
- Numbers – pH Set Point and ORP Set Point (when supported).
- Services – Control and modify schedules (see below).
- Diagnostics & Dynamic Device Info – View hardware configuration and live status; serial number and software version update periodically.
- Configurable Refresh Rate – Default 30 s; increase if you see Too Many Requests errors (60 s recommended).
Each Exo schedule is exposed as a binary sensor:
- State:
on
when active. - Attributes:
schedule
,enabled
,start_time
,end_time
,type
(vsp
|swc
|aux
| other), andrpm
(VSP only). - Icons: VSP → pump/pump-off, SWC → water-plus/water-off, AUX → toggle, calendar fallback.
Create or update a schedule’s time range and optional VSP RPM.
service: exo_pool.set_schedule
target:
entity_id: binary_sensor.schedule_filter_pump_2
data:
start: "11:00"
end: "23:00"
rpm: 2000
You can also target the device and specify schedule: sch6
instead of the entity.
Disable a schedule by setting start and end to 00:00
.
service: exo_pool.disable_schedule
target:
entity_id: binary_sensor.schedule_salt_water_chlorinator_2
When creating an automation: Device → your Exo Pool device → Actions: Set schedule or Disable schedule. These map directly to the services above.
The core iAqualink integration never supported Exo devices (European Zodiac-branded chlorinators). See the long-running discussion: flz/iaqualink-py#16. After early Node-RED flows and REST template hacks, this dedicated integration was built to provide full native support.
- Restricted to Exo devices only; use the core iAqualink integration for other hardware.
- Commands (set points, Aux switches, etc.) can be slightly laggy; switches are optimistic with ~10 s refresh.
- Schedule keys, names and endpoints are determined by the device; disabling a schedule is modelled as
00:00–00:00
. - RPM is only relevant to VSP schedules.
Confirmed working with:
- Exo IQ LS (dual-link ORP & pH, Zodiac VSP pump).
Have success with other models? Please share!
- Bugs / Feature Requests: GitHub Issues
- Q&A / Discussion: GitHub Discussions