Would you consider doing a cloud-based HA integration using the fluidra cloud API? Can you sniff what interactions the app is having with the cloud? Not my area of expertise.
I’ve got the same Halo Chlor, just installed. I might plug the ethernet cable into my laptop and see what comes past. But likely this is going to be a very different beast than what @pbutterworth has done with the BLE protocol.
And if it’s SSL encrypted, might have to dust off my sslstrip configs and see if it will accept a self-signed certificate.
I did a bit of digging on this earlier in the year before life got busy. Haven’t completely given up, but happy to share in case someone else has more time to dig in.
The TCP protocol is available in the decomilation. The file AstralPoolService.BusinessObjects.Chlorinator.ChlorinatorDevice3.cs seems to be where this communication takes place. The first comms seems to be a Async Sync of data via the “PerformVomitAsync” function. I believe the “vomit” comes from the fact that it spits out all it’s current settings/states.
Apart from that, I believe the BLE comms should be feasible - and it seems to be similar to the Viron protocol, but with a different initiation service. There’s a slightly different SecretKey used (7313584761b264bc69863c8ab6484907), but the AccessCode is a bit of a mystery to me. In the Viron it seems that this is available through the console, but it’s not exposed through the Halo screens. I’m sure this is a lot simpler than I’m thinking, but I did a lot of searching through the code and couldn’t decipher where I could get the AccessCode from in the Halo sense.
First off, big thanks to @pbutterworth for his fantastic work on this project.
After the initial setup, I ran into some connectivity issues, even with my BT proxy right there next to the equipment. I’ve made a few small tweaks to the code which, at least for me, have significantly improved stability. I’m keeping an eye on these changes to see how they hold up, but things are looking good so far. Assuming this stability continues, I’ll submit a Pull Request.
I did manage to get it to work eventually. A full reinstall, a different external bluetooth adapter and a few reboots of HA. Although I have bluetooth devices integrated to HA further away, i guess the ChlorinatorGo signal is weak.
Great news @xarmoda! It’s only been 9 months getting it to work . I’m glad you got some kind of pay-off for all your efforts.
Yeah, by all accounts the BT radio in the chlorinators is pretty feeble. I have a BT proxy sitting right on top of the chlorinator!
Had a brand new V25 installed yesterday with the viron pump. Seems to be working okay except we don’t have any sensors installed. Switching from Auto/Manual seems to be hit or miss currently have a test Pi right next to the V25.
Is there a place for generic sensors or do you just have to cough up the $300 - $500?
This integration has no built-in retry mechanism. When reading the data from the chlorinator, it doesn’t really matter too much since if one round gets missed, it’ll have another go 20 seconds later.
However, when sending a command (e.g. Auto/Manual/Off), if the attempt fails (which is likely when the signal is poor), then it will just silently fail - and you have to wait for the next scheduled update to see if it worked or not.
For automations, I use this retry service to improve reliability.
It would be an excellent improvement to this integration to have some sort of retry process built in to the API - hint hint anyone reading this
I just want to thank you for this - i’ve confirmed with the Apple iOS app “BLE Scanner” that my service UUID is a match for the programmed one, but my little Intel NUC just cannot reach the bluetooth of the chlorinator from it’s position. So i’ve ordered my first ESP32 devices to use a bluetooth proxy.
Additionally, i’ve found my Astral Viron XT320 pump is bluetooth, but only to match up to the Astral Halo control module… but it seems to have the Local Name of POOL00 but has the same service_uuid.
Well yes, POOL00 i think is my Pump (Astral Viron P320 XT). However I haven’t worked out how to pair to that yet - but it has the same Service UUID as the EQ25… so go figure.
Now Is there any way to get the actual ORP readings out of these things? I’d love to be able to track the ORP readings.
Alas, I can’t find that anywhere in the protocol. Would be very nice to have. There is statistics about highest and lowest ORP, although it’s not clear how to reset the statistics. If I could figure out how to reset the statistics, then that could be done regularly so that the high and low kind of indicate the current ORP.
Again thanks so much for everything you’ve done here.
Do you happen to have documented how you went from the start of this project to the completed piece at all? maybe in a blog format or similar? I feel it would be a good read.
So I’ve got a long range Bluetooth dongle plugged into my RPi running HASSIOS and it’s picking up just about all Bluetooth devices in the vicinity. Leading me to the curious situation whereby I have the integration enabled, but almost as quickly as I’ve configured it it is becoming unavailable. I have not managed to get any values returned from any of the sensors either.
Look at the diagnostics from your bluetooth adapter, and see what RSSI it is getting from the chlorinator. Better than -70dB is good. Mine’s perched right on top of the Viron and gets -55dB.
If the RSSI is looking good, then perhaps turn on the debug logging for the AstraPool integration and see what it’s spitting out.
I’ve got debugging on for both and let it run for a little while see what’s up. This is the same problem I had last time. Although this dongle is certainly Better than the built-in one.