Hey all,
Wanted to share a project I’ve been working on for anyone else with an AstralPool Halo Chlorinator (controlled via the Halo Chlor GO app). Since Fabtronics doesn’t offer a public API, I built a tool that gets the data out anyway using UI automation, and pushes it into Home Assistant over MQTT.
GitLab: Aaron Keith / Halo_Chlor_GO_Data_Extractor · GitLab
How it works
Since there’s no supported API, the tool drives the actual Halo Chlor GO Android app using Appium and reads whatever’s on screen — same as a human would. It runs unattended on a spare/old Android phone connected to a home server or NUC, walks through the Home, Lights, and Settings screens on a schedule, and publishes what it finds to an MQTT broker.
Because it’s parsing based on content-desc rather than fixed screen positions, it’s reasonably resilient to the app reshuffling its UI — though obviously any bigger app update could still break selectors.
What you get in HA
- Pump mode (Off/Auto/On) and speed (Low/Medium/High)
- pH and ORP readings + their setpoints
- Cell output and filter pump runtime stats
- Device info (model, firmware, etc.)
- Lights status
Setup basics
- Old Android phone with the Halo Chlor GO app, plugged in via USB to a PC/NUC
- Appium + Python 3 (appium-python-client, selenium, Pillow, python-dotenv)
- MQTT broker
- Config is just a
.envfile with your device name and chlorinator name and MQTT Broker settings
Heads up
This isn’t using any private/internal API — it’s purely reading what’s visibly shown in the official app, so it’s not affiliated with or endorsed by Fabtronics/Halo Chlor GO in any way. It’s GPL-3.0 licensed, so feel free to dig in, fork it, or send improvements. Since it depends on the app’s UI, future app updates may require selector tweaks on my end (or yours, PRs welcome).