This looks interesting. Is the code available?
Jeff
This looks interesting. Is the code available?
Jeff
Not yet, no… still finishing it up, and it is combined with all my other sensors/switchs. Let me see what I can do
Team, I have a Kvyeilry GLX-PCB-RITE Main Circuit Board & GLX-PCB-DSP Display Board Compatible with Hayward Goldline Aqua Rite Salt Chlorine Generators – Replacement for T-15, T-9, T-5, T-3 Salt Cells - Blue Amazon.com: Kvyeilry GLX-PCB-RITE Main Circuit Board & GLX-PCB-DSP Display Board Compatible with Hayward Goldline Aqua Rite Salt Chlorine Generators – Replacement for T-15, T-9, T-5, T-3 Salt Cells - Blue : Patio, Lawn & Garden. However I cannot see any data coming out of the RS485 pins. Is this a limitation of the board since it is NOT an OEM board.
Any advice or help would be great.
Thanks
Garry
Any updates on releasing some code?
Is there any way you can share a copy of the IOT Service installation? I've been trying to download this for some time now, and came across this post and saw you had backed one up. It's no longer available online. Thanks!
I was able to download it, but I'll put a copy on GitHub - J4yDubsHome/aqualogic: A python library to interface with a Hayward/Goldline AquaLogic/ProLogic pool controller. · GitHub
Edit: Too big for GitHub. Try this link: Download IOTService3.1.3.zip | LimeWire
Sorry, was away on vacation, and then went down the rabbit hole of turning into a full esphome component. Have not put it into GitHub yet, but do now have two months of running on it and have added the full menu support.
It's been years since I've used GitHub, so I need to get back into it or just DM me.
Sorry this took so long,
Paul
Turn-key ESPHome Solution for Hayward (and beyond) with Plug-and-Play Packages
Hi everyone,
I want to share a project I've been working on to move away from local scripts/hacks and toward a stable, central solution for pool automation. I’ve developed a platform-agnostic ESPHome component coupled with a plug-and-play package library.
For Hayward systems, should be very close to turn-key right now. Moving from a USB-serial Python setup to this native ESPHome approach drastically improved command delivery reliability for me—I haven't had a single missed button press since switching. The component precisely sends the command at a good time, so it doesn't need to repeat commands either.
The project is split into two parts:
rs485_frame): A general, protocol-agnostic RS485 frame handler for ESPHome. It deals with the low-level bus timing and framing. It’s currently in review (ESPHome PR #16758 / Docs PR #6719).Why this approach?
(@prockeo , this may be similar to your component which looks like it would also have relay controls. Reach out if you want to collaborate.)
Just wanted to share a ESPHome component that I've been running for few years now and had finally had some time to polish and share.
This is ESPHome component that is meant to talk directly to the pool automation controller. I've built a board with ESP32 + RS485 module + 12v->3.3v voltage converter and it all sits in my outside panel where pool controller is.
The component supports 2 types of button presses, toggle which uses retries and looks at specific sensor flags to ensure that action is completed (HEATER_AUTO, LIGHTS) and send which just fires event once but without guarantees (MENU/LEFT/RIGHT)
I do not run HA, but have been using this with OpenHab thru MQTT.
This probably does not handle every single system out there as I was focusing on my own use case and also shout out to Sean Wilson for the original python library that I tried to get working few years back but wanted something more integrated, most of the protocol is taken/based from his code.
This looks great but I don't see an option to set P4 vs P8. Do you know what model you are using?
I am using PS4 controller, and its connected to the same header on the board as Hayward VS900 pump.
I think most of the features should work by default, there is detailed logging available to help identify and add additional features.
10:58:38 [D] [aqualogicproto:384] Key Released: Key=0 Packet: 00 8c 01 00 00 00 00 00 00 00 00 00
10:58:39 [D] [aqualogicproto:278] Display Update Line1(Pool Temp 79_F) Line2()
10:58:41 [D] [aqualogicproto:393] Unknown Frame: 04 07
10:58:41 [D] [aqualogicproto:393] Unknown Frame: 00 04 02
10:58:41 [D] [aqualogicproto:393] Unknown Frame: 04 a0
10:58:41 [D] [aqualogicproto:393] Unknown Frame: 00 04 30 33 30 30 20
10:58:41 [D] [aqualogicproto:278] Display Update Line1(Pool Temp 80_F) Line2()
10:58:41 [D] [aqualogicproto:393] Unknown Frame: 04 ae
10:58:41 [D] [aqualogicproto:393] Unknown Frame: 00 04 77 6c
10:58:41 [D] [aqualogicproto:278] Display Update Line1(Pool Temp 79_F) Line2()
10:58:43 [D] [aqualogicproto:278] Display Update Line1(Pool Temp 80_F) Line2()
10:58:44 [D] [aqualogicproto:278] Display Update Line1(Air Temp 81_F) Line2()
10:58:50 [D] [aqualogicproto:278] Display Update Line1(Pool Chlorinator) Line2(25%)
10:58:56 [D] [aqualogicproto:278] Display Update Line1(Salt Level) Line2(2200 PPM)
10:58:57 [D] [aqualogicproto:373] Key Event: Key1=0 Key2=0 Packet: 00 8c 01 00 00 00 00 00 00 00 00 00
10:58:58 [D] [aqualogicproto:384] Key Released: Key=0 Packet: 00 8c 01 00 00 00 00 00 00 00 00 00
10:59:02 [D] [aqualogicproto:278] Display Update Line1(Gas Heater) Line2(Auto Control)
10:59:08 [D] [aqualogicproto:278] Display Update Line1(Filter Pump Speed) Line2(65% Gas Heater)
10:59:11 [D] [aqualogicproto:393] Unknown Frame: 04 07
10:59:11 [D] [aqualogicproto:393] Unknown Frame: 00 04 02
10:59:11 [D] [aqualogicproto:393] Unknown Frame: 04 a0
10:59:11 [D] [aqualogicproto:393] Unknown Frame: 00 04 30 33 30 30 20
10:59:11 [D] [aqualogicproto:393] Unknown Frame: 04 ae
10:59:11 [D] [aqualogicproto:393] Unknown Frame: 00 04 77 6c
10:59:14 [D] [aqualogicproto:278] Display Update Line1(Friday) Line2(10:59A)
@AndreiR ,It seems you're needing retries and possibly seeing "without guarantees" problems. There's a precise timing window in which to send commands, and the buffering/delays of the IO, USB, etc makes this hard with the python library. The ESPHome-based solutions should be able to avoid retry and failed sends almost entirely: I do not believe I've ever had a failed send and never retry. I'd love it if you took a look at my ESPHome implementation to see if it works for your system, but am not sure of the details of how you tie to MQTT. Or you can try to see how I managed the timing of sending messages after the keep-alive.
@blulite , I believe my implementation should work as well. It's written in a way that we should be able to customize it to your system without changing the ESPHome component - but instead all in your device yaml.
@b3nj1 : Absolutely agree, that is one of the reason that I've re-written everything in C++ and have it run right next to the pool controller. During development I've debugged signals with oscilloscope and have confirmed that my code usually responds with queued command in less than 10ms after keep alive packet. You still need retries, because you are not guaranteed to be the only party on the line. My pump periodically sends status updates and I've seen times that both pump and my module send commands/responses at the same time - leading to retry, and the more devices you have sharing the bus, the more of these will happen.
That's interesting. I also have a VSP pump, and again, as far as I can tell, I don't have collisions. My ESPHome component has a sniffer mode where it collects stats. My VSP reports out at 28-33ms after the keep alive frame, so it's always avoided. It's 0C01 here, and 'd-ref' is to the time from last keep-alive. In theory, you can flash my sniffer mode and see what you get. I'd actually really appreciate it ![]()
FWIW, my ESP is about 20 feet of cable from my controller (will improve that soon).
[20:56:10.952][I][rs485_frame.stats:210]: RS485 sniffer stats over 30002 ms (sorted by count):
[20:56:10.953][I][rs485_frame.stats:215]: type cnt d-ref(min/med/max) d-same(min/med/max) payloads
[20:56:10.953][I][rs485_frame.stats:242]: 0101 301 - - - 59 100 134 1 unique
[20:56:10.953][I][rs485_frame.stats:242]: 0C01 15 28 31 33 1996 2000 2020 1 unique
[20:56:10.953][I][rs485_frame.stats:242]: 000C 15 37 37 38 1999 2000 2016 1 unique
[20:56:10.953][I][rs485_frame.stats:242]: 040A 15 81 82 86 1995 2000 2017 1 unique
[20:56:10.953][I][rs485_frame.stats:242]: 0102 15 90 90 95 1995 2000 2016 1 unique
[20:56:10.953][I][rs485_frame.stats:242]: 0103 15 119 119 120 1999 2000 2017 1 unique
[20:56:10.953][I][rs485_frame.stats:242]: 0004 3 34 35 36 98 103 103 3 unique
[20:56:10.953][I][rs485_frame.stats:242]: 0407 1 33 33 33 - - - 1 unique
[20:56:10.953][I][rs485_frame.stats:242]: 04A0 1 32 32 32 - - - 1 unique
[20:56:10.953][I][rs485_frame.stats:242]: 04AE 1 28 28 28 - - - 1 unique
[20:56:10.953][I][rs485_frame.stats:275]: 0101 payloads:
[20:56:10.953][I][rs485_frame.stats:286]: 301 @ 01 01 00 14 |....|
[20:56:10.953][I][rs485_frame.stats:275]: 0C01 payloads:
[20:56:10.953][I][rs485_frame.stats:286]: 15 @ 0C 01 00 00 00 1F |......|
[20:56:10.953][I][rs485_frame.stats:275]: 000C payloads:
[20:56:10.953][I][rs485_frame.stats:286]: 15 @ 00 0C 00 00 00 00 00 00 1E |.........|
[20:56:10.954][I][rs485_frame.stats:275]: 040A payloads:
[20:56:10.954][I][rs485_frame.stats:286]: 15 @ 04 0A 83 00 02 08 00 00 00 00 00 00 00 03 20 20 20 20 20 20 53 65 74 74 69 6E 67 73 20 20 20 20 |.............. Settings |
[20:56:10.954][I][rs485_frame.stats:275]: 0102 payloads:
[20:56:10.954][I][rs485_frame.stats:286]: 15 @ 01 02 08 00 00 00 00 00 00 00 00 1D |............|
[20:56:10.954][I][rs485_frame.stats:275]: 0103 payloads:
[20:56:10.954][I][rs485_frame.stats:286]: 15 @ 01 03 20 20 20 20 20 20 53 65 74 74 69 6E 67 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4D 65 |.. Settings Me|
[20:56:10.954][I][rs485_frame.stats:275]: 0004 payloads:
[20:56:10.954][I][rs485_frame.stats:286]: 1 @ 00 04 02 00 18 |.....|
[20:56:10.954][I][rs485_frame.stats:286]: 1 @ 00 04 30 33 30 30 20 00 F9 |..0300 .y|
[20:56:10.954][I][rs485_frame.stats:286]: 1 @ 00 04 CC 6D 01 4F |..Lm.O|
[20:56:10.954][I][rs485_frame.stats:275]: 0407 payloads:
[20:56:10.954][I][rs485_frame.stats:286]: 1 @ 04 07 00 1D |....|
[20:56:10.954][I][rs485_frame.stats:275]: 04A0 payloads:
[20:56:10.954][I][rs485_frame.stats:286]: 1 @ 04 A0 00 B6 |. .6|
[20:56:10.956][I][rs485_frame.stats:275]: 04AE payloads:
[20:56:10.956][I][rs485_frame.stats:286]: 1 @ 04 AE 00 C4 |...D|
Is there any way you can share a copy of the IOT Service installation? I've been trying to download this for some time now, and came across this post and saw you had backed one up. It's no longer available online. Thanks!
Hi all. I have an Aquaconnect (Home Connect) remote system and it works great but I would like to add this functionality to my HA. I purchased a USR-TCP-485 module from Amazon. Hooked it up and I can see the status of the pool which is great however I cannot get any of the switches to work. When I click on the Switch to turn the filter off, the state remains ON. I have a Prologic 4 board so not sure if the Omnilogic HA integration allows me to change the state of the switches. Any guidance would be greatly appreciated. Attached are the items I have along with a screenshot of the RS485 web interface - it shows its connected to HA (10.0.1.10). I would like to be able to control the pool, not just view current status. Thanks.
Does anyone have the old firmware for the EW11? The new version doesn’t support scripting or setting the gap down to 2.
Try this link to download the IOT Service.
Surprising to hear that they would remove scripting. That was was of the key supported features they listed. I looked around, but it doesn’t look like I’ve ever updated the firmware.
Apparently it is a change after 1.44. But finding an old version is becoming a problem. I have emailed support to see if they can send one. Timings aren’t good enough to trigger the Aqua Plus. But return status is perfect.