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 5 years ago

Kranzy commented 5 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.

tortfeaser commented 4 years ago

Cool. Just tried it. I see the new SWG/Boost and SWG/enabled '2' entries are there.

Log attached.

Start of this log should show 0% chlorine, pump off, no flow.

Then I set to 40%, should show 40%, no flow initially, then flow established.

Then I tried the new 'boost' function (this was reflected on the SWG screen), should show 101%, and the blue radio button on the web interface (is that /SWG/enabled?) continually switching between on and off (can't see why?).

Then I turned boost off and it reverted to 40%. aquapured (1).log

For me, the outstanding mysteries are the SWG/fullstatus values. I can see that when the 'low flow' light is on /fullstatus doesn't show '1', and when its off (ie I've set it off with SWG/Percent '0'), it doens't show '255', when the cell is cleaning itself it doesn't show '8' (finding a log with the right byte set could be a challenge). I think it recognises low salt. In this attached log I got a /fullstatus '254' occasionally?

tortfeaser commented 4 years ago

Weird observation, the SWG screen only shows values 10, 20, 30 etc, not 15, 25. It rounds down to the nearest 10.

tortfeaser commented 4 years ago

I see from that log that occassionally, just after the SWG is set to 40% /SWG will be 2 and /SWG/enabled will be 2 and /SWG/fullstatus will be either of 0 or 1. Which is weird, they're showing opposite things, generating salt and not generating salt. /SWG/enabled seems to need a third option, either off, on and generating salt, or on and not generating (ie no flow).

Sorry. I'll leave you alone now.

sfeakes commented 4 years ago

On the status, it's really to overcome different things. Here is a quick explanation. /SWG/fullstatus is the raw status from the SWG, 0 to 128. The 245 (off) or 255 (no connection) Both of those are made-up by me. /SWG/enabled. 0=off 2=on This mimic a control panel LED's. So as long as you have a connection to the SWG, this should always be 1 /SWG. 0=off or 2=on. These are calculated from the above two, any status not generating salt or a 0 percent will result in a 0, anything good and generating salt will be a 2. The reason the above are 2 and not 1 for the on status is due to HomeKit thermostat integration. 1 means heat, 2 means cool for HomeKit, and 2 gives a blue icon and 1 red icon, I figured blue would be better for SWG, that's all.

Few notes. The boost setting is set to 101 as that's what my control panel does, maybe that needs to be 100 on the Tri, since you seem to be getting some errors. BTW, all this does is set 100% generation indefinitely. I will add a 24hour timer to mimic how the control panel works later. The fullstatus numbers are just what I've worked out from my SWG unit, and the ones you should probably use. But it looks like your's have others I have not seen. you have a 0x03 that I have not seen before. All the status I know about are in the AqualinkD wiki under MQTT.

I'll spend some time going over your logs and post another update later in the week.

sfeakes commented 4 years ago

On your home assistant question. I don't use HASSIO so I can't test, but below is a link to something that someone else wrote and works for AqualinkD https://github.com/sfeakes/AqualinkD/blob/master/extras/HASSIO.Implementation.txt There is no SWG in there, but a SWG maps quite well to a thermostat in just about every automation hub I've played with. So I would take the freeze_protect stanza from the above link and modify that for home assistant. Here is a completely untested quick hack as a starting point.

#---- AQUAPURE THERMOSTATS (SWG) -------------

climate:

  - platform: mqtt
    name: Salt Water Generator
    modes:
      - "off"
      - "cool"
    send_if_off: true
    initial: 50
    power_command_topic: "aqualinkd/SWG/Percent/set"
    payload_on: "2"
    payload_off: "0"
    current_temperature_topic: "aqualinkd/SWG/Percent"
    min_temp: 34
    max_temp: 42
    mode_command_topic: "aqualinkd/SWG/Percent/set"
    mode_state_topic: "aqualinkd/SWG/enabled"
    mode_state_template: >-
      {% set values = { '0':'off', '2':'cool'} %}
      {{ values[value] if value in values.keys() else 'off' }}
    temperature_command_topic: "aqualinkd/SWG/Percent/set"
    temperature_state_topic: "aqualinkd/SWG/Percent"
    temperature_state_template: "{{ value_json }}"

Copy the above to your config.yaml in home assistant.

sfeakes commented 4 years ago

@tortfeaser I just went over you last set of logs. The reason the on/off button keeps changing (and also the MQTT state I hope) is because the Tri SWG doesn't respond as quickly as the SWG I've played with before, so after 15 blank / no reads from the SWG I call it dead and ping it again. I'll update the code with some better timings and wait longer, that will overcome that issue.

sfeakes commented 4 years ago

Just posted an update. There are some major changes in the code, getting ready for supporting other devices, nothing to the UI / MQTT except some fixes (hopefully).

tortfeaser commented 4 years ago

Great. I'll try it out and get back with a log if that's useful.

I can't see any problems.

aquapured (2).log

Kranzy commented 4 years ago

Finally!! Success!

So glad to get this working. For me 5v to the board wouldn't work. I had a 12v transformer lying around so I used that for testing and as soon as I did connection straight away. Decided to jump the 15v in the controller to the RS485 port and success. I can control it from the web server with no worries. I haven't setup anything for mqtt control but just a quick test it works without issues.

@sfeakes how can I donate to you for your efforts with this?

sfeakes commented 4 years ago

That’s great that it’s working for a few people now. We need to start documenting voltages / configuration/ hardware & versions etc for others. I’ll put a list together and get you guys to check it. @Kranzy please use the “buy me a coffee” button on my AqualinkD project, thanks in advance.

I’ve started to code this around a true pool controller, it stuck me that I have all the software and protocol knowledge in my other projects to make a complete pool controller. $100 in hardware and I can control JVAs all RS485 equipment, sensors for temperature and general pool equipment that would put a $1000 controller from Jandy or Pentair to shame. So if there is interested I may start to document how to do that, and modify the code to suit. So if any of you have other pool equipment you need to control, let me know.

I’ll also post some more updates to AquapreD over the next few days, there are a few things I need to fix.

Kranzy commented 4 years ago

So I currently have a blower pump that I would like to be able to control. Its currently controlled by a pneumatic button to turn on/off. Id be happy to swap that switch out to be able to control by gpio pins.

I have a 3-way valve to switch water flow from pool, spa or both that I would like to be able to buy an actuator to control automatically.

My pool lights are already being controlled via a Shelly RGBW2 so I won't need that integrated.

I want to look at adding another valve to go between the pump and the filter that I can run to waste so if the pool level is too high I can have the actuator turn to waste and run the pump until the level drops. This is to bypass having to manually control the selector on the the top of the filter to move it to waste. It would also mean I would need to be able to power the pump separate from the SWG as I dont want that on when using the straight to waste option.

Im assuming gpio's could be used to offer custom options of control.

tortfeaser commented 4 years ago

At present, I've cobbled together AquapureD with some other bits and pieces of python running the Raspberry Pi GPIO to control some relays and I2C sensors and an arduino to do ADC. A single tool controlling the GPIO and an RS485 link would be awesome. I can't see a need for more than some temp, lux, pH and ORP sensors (and valve actuator limit switches) and some relays to control lights, pumps and valve actuators.

sfeakes commented 4 years ago

Yup GPIO would be the way to control & read all equipment. I2c / 1wire would be used for sensors. I’ll start adding that to AquapureD.

Kranzy commented 4 years ago

On your home assistant question. I don't use HASSIO so I can't test, but below is a link to something that someone else wrote and works for AqualinkD https://github.com/sfeakes/AqualinkD/blob/master/extras/HASSIO.Implementation.txt There is no SWG in there, but a SWG maps quite well to a thermostat in just about every automation hub I've played with. So I would take the freeze_protect stanza from the above link and modify that for home assistant. Here is a completely untested quick hack as a starting point.

#---- AQUAPURE THERMOSTATS (SWG) -------------

climate:

  - platform: mqtt
    name: Salt Water Generator
    modes:
      - "off"
      - "cool"
    send_if_off: true
    initial: 50
    power_command_topic: "aqualinkd/SWG/Percent/set"
    payload_on: "2"
    payload_off: "0"
    current_temperature_topic: "aqualinkd/SWG/Percent"
    min_temp: 34
    max_temp: 42
    mode_command_topic: "aqualinkd/SWG/Percent/set"
    mode_state_topic: "aqualinkd/SWG/enabled"
    mode_state_template: >-
      {% set values = { '0':'off', '2':'cool'} %}
      {{ values[value] if value in values.keys() else 'off' }}
    temperature_command_topic: "aqualinkd/SWG/Percent/set"
    temperature_state_topic: "aqualinkd/SWG/Percent"
    temperature_state_template: "{{ value_json }}"

Copy the above to your config.yaml in home assistant.

I used this, changed min temp to 0, max temp to 100 and added in temp_step: 10 so that home assistant would always match the SWG display.

Although I think I’m going to change the temp from 10 to 100.

sfeakes commented 4 years ago

Posted an update. now supports reading and writing to GPIO, so can add relays and such. There is no limit settings, so no automatic valve support just yet. Really just relays. MQTT and Web UI will also display / support GPIO as well. Quite a lot of updates to how the SWG works as well, getting ready for Variable Speed Pump support over RS485, so should fully test the SWG. Look at the config for example on GPIO settings.

sbhc68 commented 4 years ago

Hello,

Is the MQTT part for Domoticz operational ? If so, how to set device ids ?

sfeakes commented 4 years ago

No, Domoticz is not supported. Domoticz virtual thermostats are really bad in how they work over MQTT. So bad that I actually took that out of AqualinkD. Since SWG maps to a thermostat in home automation hubs I didn’t see the point in adding Domoticz support in AquapureD. The best way to get support would be to write a plugin for Domoticz, but I don’t have time to do that. I’ll take a look and see if I can map it to a virtual dimmer switch.

sbhc68 commented 4 years ago

OK. Thanks for your return.

Kranzy commented 4 years ago

Has anyone upgraded to the latest build? I was getting an MQTT error 5. Username and password was exactly the same as previous build which I have switched back to using without any issues.

Kranzy commented 4 years ago

@sfeakes should we look at closing this and opening new issues as they come up now that we have a foundation of it working?

sfeakes commented 4 years ago

@Kranzy Just noticed there is a typo in the new config file. MQTT_PASWD should be MQTT_PASSWD. If you change that it should work.

Kranzy commented 4 years ago

@Kranzy Just noticed there is a typo in the new config file. MQTT_PASWD should be MQTT_PASSWD. If you change that it should work.

Correct. Made the change and all is working

sbhc68 commented 4 years ago

Hello,

I allow myself to return to the subject of using MQTT with Domoticz. I understand that the thermostat is poorly managed domoticz and that it causes you problems. But, in my case, I do not need to manage the SWG with Domoticz (Because I have the module PRO on my Zodiac, which has a chamber of analysis of the PH and Chlorine and thus pilot the SWG) and therefore I would just like to update the SWG status information (ON, No_flow, salt percentage, etc ...) to Domoticz.

Is it simply feasible to send the data to Domoticz simply by indicating the device numbers configured in Domoticz?

Thank you in advance for your return.

tortfeaser commented 4 years ago

Just came back from a vacation. Will test now.

What pins are you using for 1-wire?

tortfeaser commented 4 years ago

Seems fine.

Is there a hard coded salt content limit? I've dumped in a few bags of salt lately but despite the strip tests showing an increase in salt content, PPM stays maxed out at 4000 in AquapureD.

sfeakes commented 4 years ago

@sbhc68 That's exactly how I use it in AqualinkD, I'll migrate the code over to AquapureD in the next release.

@tortfeaser If it's anything like my SWG, the PPM takes days to come up. I have an "instant reading" on the LCD display on the unit itself that you can use when adding salt, but the actual PPM that get's displayed and PPM over RS485 will take 2~3 days to sort itself out.

@tortfeaser 1-wire is not fully implemented yet.

sbhc68 commented 4 years ago

@sfeakes Ok thank's a lot.

sfeakes commented 4 years ago

I've just posted a new version. fixed some issues.

@sbhc68 if you create a "virtual alert sensor" in Domoticz and enter the ID and Domoticz MQTT info in the config, you should see the complete SWG status in Domoticz.

sbhc68 commented 4 years ago

@sfeakes ok thank.

DutchForce75 commented 4 years ago

Okay, had some time to figure out how the Aqualink Tri protocol works when the controller setting of the Zodiac Tri is set to Aqualink Tri.

Everything works like Jandy Rev L/M, except for the fact that the ID=0xB0. When command 11 is sent to set the percentage, for more status bytes are received: phSetPoint, orpSetPoint, ph and orp

Here's a sample: RS485 : <-- 1002 b0 11 64 37 1003 RS485 : --> 1002 00 16 030302004941474a 4b 1003

Maybe I can figure out how to set the setpoints for ph and orp anytime soon.

sfeakes commented 4 years ago

That's great work. It's also not even close to the ChemLink protocol.

art0 commented 4 years ago

@DutchForce75 How do you decode the response RS485 : --> 1002 00 16 030302004941474a 4b 1003

Getting the set points is not so important as being able to read the PH and ORP :)

DutchForce75 commented 4 years ago

@art0: RS485 : --> 1002 00 16 030302004941474a 4b 1003 49=setpoint ph (needs to be divided by 10) 41=setpoint acl (needs to multiplicated by 10) 47=current ph (needs to be divided by 10) 4a=current orp (needs to multiplicated by 10)

Firing all possible values to the machine to see when it sets the setpoints, because I'd really love to have that feature too, but no luck so far. To be continued

art0 commented 4 years ago

According to that your ORP is set to 650 (ACL 3?) and your pool reads ORP 740 ?

On 2019-10-23 16:24, DutchForce75 wrote:

@art0 https://github.com/art0: RS485 : --> 1002 00 16 030302004941474a 4b 1003 49=setpoint ph (needs to be divided by 10) 41=setpoint acl (needs to multiplicated by 10) 47=current ph (needs to be divided by 10) 4a=current orp (needs to multiplicated by 10)

Firing all possible values to the machine to see when it sets the setpoints, because I'd really love to have that feature too, but no luck so far. To be continued

— 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=AGLC37TASFDLZGY5HLRKFQLQQBNARA5CNFSM4F7GNUD2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECBTFCQ#issuecomment-545469066, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGLC37UO2JQEGANBJZICSF3QQBNARANCNFSM4F7GNUDQ.

DutchForce75 commented 4 years ago

@art0 Not sure what the actual setting of the ACL is atm, will check later because I don't want to interfer with the data Im sending right now.

But yes, my orp reading is higher than it's set because I am using chlore tablets atm. Had a green pool when I arrived and the cell seems to be under dimensioned in my case.

art0 commented 4 years ago

I have modified the chemlink.py to send the command \x11\x64 and got this response

RS485           : opening RS485 port /dev/ttyUSB0 RS485           : <-- 1002 b0 11 64 37 1003 RS485           : --> 1002 00 16 030322004932491e 32 1003

ID_CHEMLINK             = '\xB0' CMD_CHEMLINK_PROBE      = '\x11\x64'

Doing things right?

Unfortunately, this means we need to use Aqualink Tri for all commands right? As the mode can not be changed remotely?

On 2019-10-23 12:21, DutchForce75 wrote:

Okay, had some time to figure out how the Aqualink Tri protocol works when the controller setting of the Zodiac Tri is set to Aqualink Tri.

Everything works like Jandy Rev L/M, except for the fact that the ID=0xB0. When command 11 is sent to set the percentage, for more status bytes are received: phSetPoint, orpSetPoint, ph and orp

Here's a sample: RS485 : <-- 1002 b0 11 64 37 1003 RS485 : --> 1002 00 16 030302004941474a 4b 1003

Maybe I can figure out how to set the setpoints for ph and orp anytime soon.

— 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=AGLC37QSTAR4BMX5WAPJNSTQQAQR3A5CNFSM4F7GNUD2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECA4KGQ#issuecomment-545375514, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGLC37X4RRCWFK53ANFHOW3QQAQR3ANCNFSM4F7GNUDQ.

sfeakes commented 4 years ago

@art0 How I read DuchForce75 post is that setting to Aqualink Tri means, you can use both sets of commands. So I am "assuming" you can use is 0x50 to set SWG% and retreive PPM and use 0xB0 to set PH & ACL and return current PH & ORP.

DutchForce75 commented 4 years ago

Maybe I was a bit too enthousiastic, will better test and write before I post :-D

What I meant was that when using ID 0xB0 in AquaLinkTri mode, the same commands seem to get the same replies as ID 0x50 in JandyRevLM mode (except for the extra status bytes for ph and orp)

I haven't actually verified that all things work exactly the same, will do so when I have found out more on if/how the setpoints can be adjusted.

art0 commented 4 years ago

Let me know if you need help with testing, will be great to add a simple REST API at the top so we can retrieve those values using a simple curl command.

The command was 0x11 0x64 not 0x11 right?

On 2019-10-23 17:43, DutchForce75 wrote:

Maybe I was a bit too enthousiastic, will better test and write before I post :-D

What I meant was that when using ID 0xB0 in AquaLinkTri mode, the same commands seem to get the same replies as ID 0x50 in JandyRevLM mode (except for the extra status bytes for ph and orp)

I haven't actually verified that all things work exactly the same, will do so when I have found out more on if/how the setpoints can be adjusted.

— 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=AGLC37Q7QXTDE4YUOELZID3QQBWI7A5CNFSM4F7GNUD2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECB4NHY#issuecomment-545506975, or unsubscribe https://github.com/notifications/unsubscribe-auth/AGLC37WHWUE2OYCVWKMEMGLQQBWI7ANCNFSM4F7GNUDQ.

DutchForce75 commented 4 years ago

Yes as a matter of fact, it takes any value after 0x11, and happens to be the same command value as the Set Percentage command in JandyRevLM mode, which also returns status bytes.

It also responds in the same manner to 0x14 0xXX messages as in JandyRevLM mode, again any value will do and will return the Id as a string just like in JandyRevLM mode. In AqualinkTri mode it returns something like "Aqualink Tri", haven't saved and eaxaclty decoded the return value, but it was something like that.

I am now polling every possible data byte (0-255) for every single command byte (0-255), and so far, up till command value 0x91, only command values 0x11 and 0x14 resulted in a response.

sfeakes 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

DutchForce75 commented 4 years ago

Think I have seen code around the net that had more status bits, have you seen those too?

sfeakes commented 4 years ago

On the Jandy with those 2 null bits (#7 & 8) after the status. No I have never see those defined, or even used. If you have a link, I'd love to see it. I have never seen them as anything other than null, and some SWG's don't even send them. On the status bit itself, I have a complete list in AquapureD & AqualinkD, it's in the code and AqualinkD wiki.

(0 on, 1 no flow, 2 low salt, 4 high salt, 8 clean cell, 9 turning off, 16 high current, 32 low volts, 64 low temp, 128 check PCB, 255 service mode / local control for %)

sfeakes commented 4 years ago

I've just updated AquapureD to add this new found information. Set the SWG id in the config to the respective setting on your TRI unit. use 0xB0 and it should show the info (if any) in the UI.

# 0x50 is Jandy normal SWG, 0xB0 is Zodiac Tri SWG with Chem (Ph,ORP)
#SWG_DEVICE_ID = 0x50
SWG_DEVICE_ID = 0xB0

@art0 if you want rest API, aquapured already has that, just use server:port?command=devices and you should bet something like below

{  
   "type":"devices",
   "version":"0.7",
   "name":"AquaPure Daemon",
   "fullstatus":"Generating Salt",
   "devices":[  
      {  
         "type":"setpoint_swg",
         "id":"SWG",
         "setpoint_id":"SWG/Percent",
         "name":"Salt Water Generator",
         "state":"on",
         "status":"on",
         "spvalue":"50",
         "value":"50",
         "extended_status":"0"
      },
      {  
         "type":"value",
         "id":"SWG/Percent",
         "name":"Salt Water Generator Percent",
         "state":"on",
         "value":"50"
      },
      {  
         "type":"value",
         "id":"SWG/PPM",
         "name":"Salt Level PPM",
         "state":"on",
         "value":"0"
      },
      {  
         "type":"value",
         "id":"SWG/Ph",
         "name":"Ph level",
         "state":"on",
         "value":"7"
      },
      {  
         "type":"value",
         "id":"SWG/ORP",
         "name":"ORP level",
         "state":"on",
         "value":"740"
      },
      {  
         "type":"switch",
         "id":"SWG/Boost",
         "name":"Boost pool",
         "state":"off",
         "status":"off"
      },
      {  
         "type":"switch",
         "id":"GPIO_18",
         "name":"Pump",
         "state":"off",
         "status":"off",
         "int_status":"0"
      },
      {  
         "type":"switch",
         "id":"GPIO_16",
         "name":"Pool Light",
         "state":"off",
         "status":"off",
         "int_status":"0"
      }
   ]
}
DutchForce75 commented 4 years ago

You are right sfeakes, the salt addsalt and error bytes are totally different.

My observations right now (with the JandyRevLM names) are:

So it seems that things are indeed a bit different for this protocol.

Kranzy commented 4 years ago

Yup GPIO would be the way to control & read all equipment. I2c / 1wire would be used for sensors. I’ll start adding that to AquapureD.

@sfeakes is any additional hardware required for the pi to work with external sensors, such as temp sensors, pressure sensors etc? I havnt done any ADC work with a raspberry pi before.

I found this site... https://www.tindie.com/stores/cburgess129/ any that you would recommend?

art0 commented 4 years ago

Now that this issue is reaching 200 postings, will be great to edit the README and reflect the status? @DutchForce75 @sfeakes Let me know if we can state the following:

Should we summarize with:

Zodiac support is best with Aqualink Protocol selection? Art0

Kranzy commented 4 years ago
  • Zodiac requires to be fed with stable power and can accept 15V from the same board or external power supply. Feeding from the Raspberry might be insufficient.

While that worked for me, others have had success feeding 5v to the board. I think it might be worthwhile getting people to note the board number and the voltage they have used. I would hate for someone to use 15v and fry the board based on recommendations that it works for all.

Can definitely be noted that the raspberry pi is not sufficient.

I am interested to hear about if we should be using Aqualink protocol or not.

ChutneyMary commented 4 years ago

Hi. It's been a long read but I'm grateful for all the information people have discovered.

I have a new Zodiac eXO Pro iQ Chlorinator that I wish to integrate into my home automation system. The main end-goal is to incorporate the device for energy management against solar input. The chlorinator includes a SWG and pH/ORP control. It has wifi connectivity for control and monitoring via apps for iOS and Android. The advertising blurb says -

"iAquaLink enabled - Features a built-in WiFi chip that allows you to monitor and control remotely, for complete control at your fingertips anytime, anywhere." (except if you want automatic control and monitoring from your home automation system....grrrrr).

The physical connections include two RS485 connections -

  1. Variable speed pump VSP - RS485
  2. iAL RS485

I've connected it up to my Raspberry Pi as per this thread's guidance. I'm using +5V/0V for injecting into the RS485 red (terminal 1) and green (terminal 4) connection points, DATA+/- into the black (terminal 2) and yellow (terminal 3) connection points. The Raspberry Pi uses the same power supply. Voltage measured at the chlorinator connection point is 5.02V.

I've used both @DutchForce75 and @sfeakes scripts but no response yet from the chlorinator.

I tried both SWG_DEVICE_ID of 0x50 and 0xB0. Perhaps importantly, the chlorinator menu doesn't have any options to change the protocol selection (nothing mentions Jandy or Aqualink).

My next thought is to try every variation of SWG_DEVICE_ID between 0 and 255. This is going to be really painful...

Any ideas on other options to try beforehand?

Kranzy commented 4 years ago

Hi @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.