Bring your complete AutoPilot PoolSync infrastructure into Home Assistant. Whether operating a standalone PoolSync controller or one integrated directly into an AquaCal heat pump, this integration local-polls and controls your full equipment stack: chlorination, water chemistry, heating, circulation pumps, motorized valves, and group scenes.
- 100% Local Control: Direct IP communication via local push-button authorization. No cloud outages, no external dependencies.
- Multiple PoolSync Controllers: Add more than one PoolSync controller as separate config entries — ideal for homes with separate pool/spa installs.
- Comprehensive Equipment Coverage: Controls ChlorSync, ChemSync (pH/ORP), heat pumps, variable-speed pumps, valves, and group scenes.
- Multi-Device Architecture: Full native support for setups with multiple units of the same equipment type (e.g., dual ChlorSync chlorinators, multiple heat pumps, or stacked ChemSync controllers).
- Human-Readable Diagnostics: Decodes raw board fault codes, firmware data, temperatures, and Wi-Fi link quality.
| Requirement | Details |
|---|---|
| Home Assistant | Core 2025.1.0 or newer |
| Network | Local network access to the PoolSync IP address |
| Hardware Support | Standalone PoolSync Controller OR PoolSync integrated into Heat Pump |
| Ecosystem Units | ChlorSync, ChemSync, Heat Pumps, Variable-Speed Pumps, Valves, Group Scenes |
- Open HACS in Home Assistant → Integrations.
- Click the top-right menu icon → Custom repositories.
- Add
https://github.com/ccpk1/AP_PoolSyncas an Integration. - Search for PoolSync Custom, click Install, and restart Home Assistant.
- In Home Assistant, go to Settings → Devices & Services → Add Integration.
- Search for PoolSync Custom and enter the local IP address of your PoolSync device.
- When prompted, press the physical Auth or Service button on your PoolSync controller.
HA Setup Prompt
|
Physical Hardware Auth Button
|
- Wait for Home Assistant to complete pairing and generate config entries for all detected hardware.
If linking fails, the flow offers a retry path. If repeated attempts fail, restart the PoolSync device and try again.
Retry
|
The integration dynamically generates discrete devices and entities based on what your PoolSync installation reports. When multiple devices of the same type are present (e.g. two ChlorSync units or two heat pumps), each gets its own device and a full set of entities.
- Sensors: Wi-Fi RSSI & Signal Status, Board Temperature, System Date/Time, Firmware/Hardware Revisions, Display Brightness.
- Diagnostic Counters: Wi-Fi disconnects, AWS disconnects, power-ups, system restarts, and offline-device counts.
- Group On/Off Switches: Individual switches (
switch.group_*) forPOOL,WATERFALL,FILTRATION,AMBIANCE, andCLEANER— turn a group on or off directly. Each exposesduration(your preference),controller_duration(the device's configured value), andends_at(when the group stops). - Group Schedule Switches: Separate schedule toggles (
switch.group_*_schedule) that enable or disable each group's programmed schedule (itsschedMode), exposing a decodedschedulesattribute with up to 4 slots (days and times). - Group Duration: Custom duration sliders (
number.group_*_duration) to set persistent run-time defaults or apply immediate extensions. Exposescontroller_durationso you can always see the device's actual value. - Group Info Sensor:
sensor.group_infoshows which groups are active, with per-group config, equipment, and timing (duration and end time) attributes.
- Control: Output percentage slider (
number). - Sensors: Water Temperature, Salt Level (PPM), Cell Flow Rate, Boost Time Remaining, Output Setting.
- Diagnostics: Cell forward/reverse current, cell output & rail voltage, cell serial number, firmware/hardware versions, temperature compensation output, driver model/firmware/hardware, pool cover control, pool gallons, polarity change time, ORP input control.
- Fault Sensor: The fault binary sensor exposes both the raw
fault_codeand decodedactive_faults(human-readable names like "High Salt", "Clean Cell"). - Actions: One-click button to clear cell life warnings.
⚠️ The clear-cell-life action is not yet confirmed. It is implemented from the reverse-engineered API, but whether it actually executes depends on the target device supporting it. If you use it and it isn't working properly, please open a GitHub issue — and if you're willing to work with me to finalize it (including capturing the correct command syntax), that would be a huge help.
- Control: System Mode selector, pH Setpoint, ORP Setpoint, Max Daily Feed adjustments.
- Sensors: Live pH, Live ORP, Acid Consumption, Tank Level Alert, Board Temperature.
- Diagnostics: Firmware, hardware, and model details.
- Fault Sensor: The fault binary sensor exposes both the raw
fault_codeand decodedactive_faults(e.g. "pH Below Min", "Flow Sensor"). - Actions: Prime Pump and Chemical Boost action buttons.
⚠️ ChemSync write controls are not yet confirmed. The pH/ORP setpoint and max daily feed writes are implemented from the reverse-engineered API but have not been validated against a live ChemSync device. If you have a ChemSync and these controls aren't working properly, please open a GitHub issue — and if you're willing to work with me to finalize them (including capturing the correct command syntax), that would be a huge help.
- Control: Full Home Assistant
climateentity for target water temperature, HVAC modes, and preset selection. Exposes current temperature, target temperature, HVAC action, and min/max temperature. - Sensors: Water Temperature, Air Temperature, Pool/Spa Setpoint tracking, Active Target Temperature, Fault Code.
- Diagnostics: Board Temperature, Outlet Water Temperature, Defrost Sensor 1 & 2, Top Fault Code & Count.
- Binary Sensors: Compressor state, Fan state, Water Flow status, Online/Fault flags, Remote Control.
- Fault Sensor: The fault binary sensor exposes both the raw
fault_codeand decodedactive_faults(e.g. "Low Pressure", "High Pressure").
- Mode Select:
Auto(follows active group),Manual(user RPM),Off. - Speed Control: Live RPM sensor and manual RPM adjustment slider.
- Valves & Status: Live valve position reporting (e.g., POOL vs. FOUNTAIN) and pump priming binary sensor.
Available via Developer Tools → Actions / Services:
Triggers a group scene with an optional custom duration string.
action: poolsync_custom.set_group_state
data:
group: "WATERFALL"
state: "on"
duration: "1h 30m"Directly controls variable-speed pump modes and target RPM.
action: poolsync_custom.set_pump_mode
data:
mode: "manual"
rpm: 2200Change how long a group runs by default when you turn it on. Set the group's duration number (number.group_*_duration) to your preferred minutes. The value is persisted across restarts and used the next time you turn the group on.
Set the pump to manual at a specific RPM, then return it to automatic (following the active group):
action: poolsync_custom.set_pump_mode
data:
mode: "manual"
rpm: 2000action: poolsync_custom.set_pump_mode
data:
mode: "auto"Turn on the group's schedule switch (switch.group_*_schedule) to let the group follow its programmed schedule. This does not turn the group on immediately — it only enables the schedule.
The heat-pump climate entity supports normal Home Assistant climate automations (turn on/off, set target temperature, set preset mode). For example, heat the pool to 84°F when the outdoor temperature drops:
automation:
- alias: "Heat pool when cool"
trigger:
- platform: numeric_state
entity_id: sensor.outdoor_temperature
below: 60
action:
- action: climate.set_temperature
target:
entity_id: climate.poolsync_water_thermostat
data:
temperature: 84Some diagnostic entities are disabled by default to keep the default dashboard cleaner.
After setup, you can adjust the polling interval:
- Go to Settings → Devices & Services.
- Open the PoolSync integration card.
- Select Configure.
- Set Update interval in seconds and submit.
The minimum supported interval is 10 seconds.
To remove the integration:
- Go to Settings → Devices & Services.
- Open the PoolSync integration.
- Select the menu for the config entry.
- Choose Delete.
This removes the Home Assistant config entry and its entities. It does not change configuration on the physical PoolSync device.
- Linking Issues: If pairing times out, reboot the physical PoolSync controller and retry the HA configuration flow immediately after startup.
- Intermittent Unavailability: Check Wi-Fi RSSI on the controller device page. Outdoor pool equipment often suffers from marginal Wi-Fi signals; weak links cause TCP connection resets.
- Debugging: Export Diagnostic JSON directly from the PoolSync Device page in HA when filing GitHub issues. I've made efforts to redact private information (such as hardware serial numbers, tokens, and passwords) in the exported diagnostic file, but you should always review it and double-check before submitting if you have any concerns. If you spot anything that should be redacted, please open an issue and I'll make sure it's covered in a future update.
⭐ Star the Repo: If this integration powers your pool, clicking the Star button on GitHub is the best free way to support development and help others discover the project.
☕ Sponsor Development: Maintaining local API reverse-engineering and complex hardware state machines takes significant time and hardware investment. If this integration saves you time and money, consider sponsoring:
- Community thread: PoolSync Pool / Heat Pump Integration
- GitHub issues: ccpk1/AP_PoolSync/issues
- GitHub discussions: ccpk1/AP_PoolSync/discussions
When reporting a problem, include diagnostics, relevant logs, the PoolSync firmware or hardware details if known, and what equipment is attached.
Special thanks to @socbrian for the initial reverse-engineering work on the PoolSync local linking protocol.
🤖 AI-Assisted Engineering: In today's landscape, leveraging AI tooling is one of the only ways a solo maintainer can build, test, and support a complex multi-device integration at this scale. However, this code is not "vibe coded." Human oversight dictates the architecture, every commit is manually audited, and code is validated against Home Assistant Gold standards with continuous integration test coverage.
This integration is an independent open-source project and is not affiliated with or endorsed by AutoPilot Pool Systems or AquaCal.





