Halo Chlor GO (AstralPool Chlorinator) → Home Assistant via MQTT

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 .env file 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).

As an alternate, Python screen scrapers like Beautiful Soup and Selenium can be harnessed to give you an app you can install in HACS and integrate onto your HomeAssistant server without external Android devices or even MQTT. See the developer pages, as you have already done the hard work to disassemble the web page into data fields and know that intimately.

Thanks for the suggestion! Just to clarify — this isn’t web scraping, since there’s no website or web dashboard for Halo Chlor GO to scrape. It’s Android-only, no HTML/DOM involved, so Beautiful Soup and browser-based Selenium don’t really apply here.

That’s why I used Appium instead — it automates native mobile apps rather than web pages, letting me target UI elements via content-desc similarly to how you’d target elements with Selenium on a website, just at the OS/app level instead of the browser level.

If Fabtronics ever exposes a web portal or API, a lighter scraper would be the way to go. Until then, driving the actual app is the only reliable option I’ve found.

I note Appium has Selenium references. Just seems an inelegant way of having an added intermediatory hardware device to do the screen scraping for you, with all the safety risks in having a battery equipped device powered on all the time, especially if you leave it unattended at home.
Can you adapt your Appium to run on the HomeAssistant hardware platform instead?