sfeakes / AquapureD

Control SWG without control panel. (Hayward Aquarite, Jandy Aquapure, Zodiac TRi)
Other
18 stars 3 forks source link

Initial Testing #1

Open Kranzy opened 6 years ago

Kranzy commented 6 years ago

Hi sfeakes,

Thought I would post here to keep our discussions about AquapureD separate from AqualinkD.

My RS485 converter showed up last night. This is the one I got: https://www.amazon.com.au/gp/product/B0721BB8PQ/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

Would you might giving a bit of direction about whats involved in introducing power on the RS485? Will I need to supply power into the Tri Chlor or just the 2 data pins?

Im assuming just setting up rasbian on the pi?

I have a Pi model B (from memory) laying around not doing anything that I'll be using. Ill be running ethernet to the shed (backs onto house) and will be looking at integrating it with home assistant once its all up and running.

ChutneyMary commented 4 years ago

Thanks for the feedback.

That’s helpful info regarding the 12v. I’ve completely scoured the web looking for info on this chlorinator model. There’s nothing regarding safe voltages, so I’ll have to cross fingers & toes...and it's still in warranty (rehearses conversation with Mr Zodiac - " I don't know why it stopped??? Poor documentation and the lack of an API???)

I've got a 12volt supply in close proximity. Will hopefully give it a test in the next few days.

Regarding iAqualink and Home Assistant - that looks like a hopeful path if nothing comes of the direct RS485 link. I looked at the code, but I don't have a programming clue. If anyone does have a clue - here is a link to the iAqualink library -

https://github.com/flz/iaqualink-py

In an ideal world, this library would then feed to a MQTT broker to provide a generic interface for anything.

On Tue, 4 Feb 2020 at 9:37 am, Kranzy notifications@github.com wrote:

Hi @ChutneyMary https://github.com/ChutneyMary hopefully we can sort it out prior to trying every variation.

For my particular case I didnt get any response from the chlorinator until I had 12v on the RS bus.

I ended up jumping power internally from the 15v available on the board to the RS485 bus and then just had the data lines running from the usb to rs485 device and the chlorinator.

Have a look through any documentation you can prior to putting higher voltages through your board. I found some for my SWG that indicated 10v was required. On the first connection I can tell you I was a bit nervous about damaging the board. I do not want you to take my advice and damage the board without having a look at what documentation might be around.

Also if you are running iAqualink then you might be able to use integrations with Home Assistant to acheive this. Although my preference is to have everything running locally.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/sfeakes/AquapureD/issues/1?email_source=notifications&email_token=AH3MQTDIJ7RP2TRWARWFYJTRBDBEJA5CNFSM4F7GNUD2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKWA6UI#issuecomment-581701457, or unsubscribe https://github.com/notifications/unsubscribe-auth/AH3MQTG3Y4EBIEH2BM2LNPLRBDBEJANCNFSM4F7GNUDQ .

ChutneyMary commented 4 years ago

I've tried +12V on the RS485 bus. I still don't see changes from the previous attempt with +5V. No response from anything.

I've now experimented with something else by a selection in the Chlorinator menu -

There are options for single speed pump or Zodiac Variable Speed Pump (ie. RS485). The previous selection was single speed pump and I've changed this to Zodiac VS.

I can now see the following on the RS485 bus -

`RS485 : <-- 1002 50 14 01 77 1003

RS485 : --> RS485 : <-- 1002 50 00 62 1003 RS485 : --> RS485 : <-- 1002 50 14 01 77 1003 RS485 : --> RS485 : <-- 1002 50 00 62 1003 RS485 : --> RS485 : <-- 1002 50 14 01 77 1003 RS485 : --> RS485 : <-- 1002 50 00 62 1003 RS485 : --> RS485 : <-- 1002 50 14 01 77 1003 RS485 : --> RS485 : <-- 1002 50 00 62 1003 RS485 : --> 1002 78 00 8a 1003 RS485 : <-- 1002 50 14 01 77 1003 RS485 : --> 1002 78 00 8a 1003 RS485 : <-- 1002 50 00 62 1003 RS485 : --> RS485 : <-- 1002 50 14 01 77 1003 RS485 : --> RS485 : <-- 1002 50 00 62 1003 RS485 : --> RS485 : <-- 1002 50 14 01 77 1003 RS485 : --> RS485 : <-- 1002 50 00 62 1003 RS485 : --> RS485 : <-- 1002 50 14 01 77 1003 RS485 : --> RS485 : <-- 1002 50 00 62 1003 RS485 : --> `

This message on the bus -

`RS485 : --> 1002 78 00 8a 1003'

occurs exactly every 20 seconds. I suspect this is the chlorinator pinging the (non-existent) pump to see whether it's there?

I should also note I'm testing using two scripts -

  1. AquapureD
  2. @DutchForce75 - pyZodiacTri

Only pyZodiacTri script is showing the 20 second reply message noted above. The AquapureD script shows repeating -

`Debug: SWG resend last message Error: Too many no-reply from SWG, calling connection dead'

  1. I think I've got the system set up correctly (electrically) to read the bus (based on the 20 second recurring message).

  2. I'm not sure what I'm doing wrong that AquapureD can't see the 20 second responses.

  3. Any guidance on what I should do next?

ChutneyMary commented 4 years ago

Just a follow-up to previous testing -

The voltage required to get the RS485 bus to work is confirmed at 12VDC for my eXO Pro iQ chlorinator. The responses seen on the bus with the Chlorinator set for a Zodiac Variable Speed Pump disappear if 5VDC is used.

I think the lack of a setting within the chlorinator menu for an external controller means I might be out of luck for integration. It's probably been removed for the iAqualink system.

Moving on to the iAqualink / Home Assistant option...

timelery commented 4 years ago

Just a follow-up to previous testing -

The voltage required to get the RS485 bus to work is confirmed at 12VDC for my eXO Pro iQ chlorinator. The responses seen on the bus with the Chlorinator set for a Zodiac Variable Speed Pump disappear if 5VDC is used.

I think the lack of a setting within the chlorinator menu for an external controller means I might be out of luck for integration. It's probably been removed for the iAqualink system.

Moving on to the iAqualink / Home Assistant option...

This same 12VDC voltage works on the Jandy Jxi heaters as well.

art0 commented 4 years ago

It also looks like there are an extra 2 bits between the ppm and status on the Tri protocol.

Jandy
|0x10|0x02|0x00|0x16|0x28|0x00|0x00|0x00|0x50|0x10|0x03|
    start | ID |CMD |PPM |STAT|<-null-> | end

<your two returns>
|0x10|0x02|0x00|0x16|0x03|0x03|0x02|0x00|0x49|0x41|0x47|0x4a|0x4b|0x10|0x03
|0x10|0x02|0x00|0x16|0x03|0x03|0x22|0x00|0x49|0x32|0x49|0x1e|0x32|0x10|0x03
    start | ID |CMD | x1 | x2 | x3 |STAT|<---- ph/orp  ---->| end

x1 1000 is PPM on Jandy protocol, but that doesn;t look right Looks like it might be X3, or a combination, something like X2 1000 + x3 * 100 For setting % below 10, the Jandy protocol uses 2 bits, so PPM might be similar for zri units, ie using a high and low bit

Back to pool-ing here:

I have adapted @DutchForce75 script to send 0xB0 messages to the Zodiac, and I am able to collect PH and ORP values from the unit. When the SWG unit is OFF, the values do not seem to get updated. I can read the values by the hidden menu and they differ from the ones reported via Aqualink protocol. Will be nice to know if that is the case in other units.

Salt

I still have not been able to figure out if Salt information is sent by Aqualink protocol.

start | ID |CMD | x1 | x2 | x3 |STAT|<---- ph/orp ---->| end

Notice the values recorded so far:

The "1" is definitely "No Flow"

132 03030200 54383 03030201 4412 03032200 11 03033200

03 03 02 03 03 22 03 03 32

Seems X3 is increasing.

sbhc68 commented 4 years ago

Hi art0,

Good news.

If you want I can test on my Zodiac Tri (Just tell me where the modifications are and the protocol to use).

art0 commented 4 years ago

Here it is an interesting graph. I have setup the SWG with ACL=2 that is 550mV ORP. I am polling the values using Aqualink protocol and i turn on the water flow from 12 - 14 PM. You can see several interesting things: a) When there is "No flow", the ORP reported is the "one you set" not the one that is read. b) Once the flow starts, you can see that the ORP goes "down", against the logic that adding more chlore brings the ORP up! After a few hours, it seems the chlor made the job and ORP is a bit higher.

An image for the SWG-geeks attached.

image

DutchForce75 commented 4 years ago

That's actually different from what I've been seeing, Are you sure this pattern continues?

IMG_0302

DutchForce75 commented 4 years ago

O wait, that's only with the 0xB0 ID instead of the 0x50?

art0 commented 4 years ago

Yes, i am using 0XB0 (Aqualink) as I want to get the ORP/PH. With 0x50 Jandy this was not possible right?

hollapm commented 4 years ago

Can you run AqualinkD and AquapureD at the same time (connected thru the same system?). It doesn't appear Aqualink has all the functionality (PH, ORB) that aquapure does.

hollapm commented 4 years ago

I tried running it with AuqalinkD and am getting this error: sudo ~/software/AquapureD/release/aquapured -d -c ~/software/AquapureD/release/aquapured.conf AquaPure Daemon 0.7 Error: Open file failed '/tmp/aquapure.cache' Notice: Starting WEB Server on port 80 Error: Failed to create listener Error: Can not start mqtt on port

I then turned off aqualinkd and started mosquitto and received the below.

AquaPure Daemon 0.7 Error: Open file failed '/tmp/aquapure.cache' Notice: Starting WEB Server on port 80 Notice: Starting MQTT client to localhost:1883 Warning:BAD PACKET Jandy Received Unknown '0xe1'| HEX: 0x10|0x02|0x00|0xe1|0xdf|0xfb|0xfd|0xfb|0x7e|0xcd|0x30|0x75|0x10|0x03| Warning:Serial read bad Jandy checksum, ignoring Error: Too many no-reply from SWG, calling connection dead Error: Too many no-reply from SWG, calling connection dead Error: Too many no-reply from SWG, calling connection dead Error: Too many no-reply from SWG, calling connection dead Warning:BAD PACKET Jandy Received Unknown '0x72'| HEX: 0x10|0x02|0x33|0x72|0x08|0x01|0x02|0x03|0x04|0x05|0x06|0x07|0x20|0x00|0x01|0x00|0x00|0x07|0x43|0x6c|0x65|0x61|0x6e|0x65|0x72|0x00|0x01|0x00|0x00|0x09|0x57|0x61|0x74|0x65|0x72|0x66|0x61|0x6c|0x6c|0x00|0x01|0x00|0x00|0x09|0x53|0x70|0x69|0x6c|0x6c|0x6f|0x76|0x65|0x72|0x00|0x07|0x02|0x05|0x0a|0x50|0x6f|0x6f|0x6c|0x20|0x4c| Warning:Serial packet too large

so questions, is it possible to run both?
or ultimately can I add orp and ph to aqualinkd??

and with the above comment, is it possible to pull this from the jandy (aquapure) or do you have to run the Zodiac Tri?

brentk7 commented 3 years ago

I'm trying to get this working with a Zodiac Tri with pH in order to be able to read the pH. If I set the Controller to "JANDY REV L/M" and set SWG_DEVICE_ID = 0x50 in aquapured.conf, theneverything works as expected (log). When I set the Controller to "AQUALINK Tri" and SWG_DEVICE_ID = 0xB0 - I get this in the logs and the web server shows disconnected. Should this functionality work as I 'm assuming? I see there has been almost no discussion regarding this since @sfeakes posted that he had added the functionality to set the SWG id in the config.

jorythompson commented 2 years ago

This is a great thread find! I am trying to control my chlorinator with a Raspberry Pi as well.
I am using serial.Serial. Do you know what the following settings might be (I have indicated what my current settings are next to each one and Default where I have left it alone):

port – "COM3" (Device name or None.)
baudrate – 9600  (Baud rate such as 9600 or 115200 etc.)
bytesize – Default (Number of data bits. Possible values: FIVEBITS, SIXBITS, SEVENBITS, EIGHTBITS)
parity – Default (Enable parity checking. Possible values: PARITY_NONE, PARITY_EVEN, PARITY_ODD PARITY_MARK, PARITY_SPACE)
stopbits –  Default (Number of stop bits. Possible values: STOPBITS_ONE, STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO)
timeout – 0.25 (Set a read timeout value in seconds.)
xonxoff –  Default (Enable software flow control.
rtscts – Default (Enable hardware (RTS/CTS) flow control.)
dsrdtr –  Default (Enable hardware (DSR/DTR) flow control.)
write_timeout –  Default (Set a write timeout value in seconds.)
inter_byte_timeout  –  Default (Inter-character timeout, None to disable (default).)

I have not connected power to the two pins next to the RS485 connector on the chlorinator yet. When I send the Request Status packet, I don't receive anything back. I have tried swapping the A and B connectors and it makes no difference. I am now going to try to connect a wall-wart 12v power supply to the two pins and see if I make any headway.

Update: I added 12v power but am still not getting any response from my status request: Sending packet 0x10(16) 0x02(02) 0x00(00) 0x00(00) 0x00(00) 0x12(18) 0x10(16) 0x03(03)

I have tried with a destination address of 80 (that I found here) but it is still not responding Sending packet 0x10(16) 0x02(02) 0x50(80) 0x00(00) 0x00(00) 0x62(98) 0x10(16) 0x03(03)

FWIW, I do see the data go out with my oscilloscope.

wayner9 commented 1 year ago

Can anyone provide a link to how you get started connecting to the RS-485 port of a Aqualink? I am interested in connecting to the board to read the temperature, salinity level and flow status. I would then use this information to control my heater from other code, flipping relays on devices like Sonoff switches, etc.

I have a serial to USB TTL adapter. Is this what is needed to make that interface? What is the pinout connection diagram?

I could do this with a Raspberry Pi or a PC running Linux, likely Ubuntu running under windows WSL, assuming that this would work ok with the serial port.

habbich commented 7 months ago

Any updates? Got a Zodiac eXo Pro IQ with PH/redox module, Zodiac VS Flo pro pump that can be controled by the solinator (via RS485). I don't want to do cloud polling in my HomeAssistant. Would like to control it all locally. The solinator has a temp sensor with which I would control the Aquark Mr. Silence heat pump also connected via RS485.

andreondra commented 4 months ago

Hi guys,

at first, thank you very much for your amazing work and research! It really helped me to modernize my Zodiac and connect it to the rest of my IoT system :).

First some bad news, during my research, I found out that setting pH and ACL/ORP may not be possible at all. If you search for the Zodiac AquaLink unit, which (I suppose) is the original unit to be used with the more advanced "Aqualink Tri" protocol, you find in the propagation materials, datasheets etc. that this unit supports only monitoring of these values. Nowhere in the manuals and photos of the device's menus is a mention of setting these values. I also tried probing various other addresses with no avail.

And for good news, I created a MQTT-based Home Assistant integration. It is in the testing state right now, but pH/ACL reading and output setting works. If anybody is interested, you can find the project here: https://github.com/andreondra/homeassistant-zodiac-tri-expert.