Aqualink PDA automation using RS485

Jul 4, 2017
33
Dallas, TX
All -

Wanted to start a new thread related to automating the Jandy/Zodiac PDA via RS485 and a Raspberry Pi (or any other device for that matter). There's another very lengthy and old thread that is long in the tooth and I'd like to get more visibility in this project and get help! Huge huge huge thanks to everyone that posted there over the years; I got a ton of info out of it: Control your Jandy equipment from your PC with a $15 adapter

Current state of pool:
I have an Aqualink PDA system by Jandy/Zodiac. The only way to control/manage my pool is via the old school wireless remote or the panel outside by the pool. The remote is waterproof/resistant, but it's laggy, large, requires a 9V battery, and is expensive to replace. Everything is working on my system, but I'm not content and want to geek out with this.

Goals:
  1. Free myself of the slow, antiquated PDA remote
  2. Control the pool from any computer, smartphone, or tablet (via a web site or custom app)
  3. Make programming easier - currently there are a lot of up/down/enter buttons I have to push to do things like change my pump speed, set programs, etc.
  4. Make more macro-type buttons. Example, click a button to change the speed of my pump to high, turn on the pump, then turn it off after 1 hour and reset the pump speed to normal. I'd use this on those days when I forget to add liquid chlorine until after the pump is off and I'm ready to go to bed. I can hit this button, throw in bleach, then go to bed knowing it'll turn off in an hour and resume the normal pump speed the next time it runs. I can think of many other macros or efficiencies but this is just the start.

Options:
  1. Pay ~$500 to upgrade my system to Aqualink RS/iAqualink (part # IQ20-RS). This involves replacing some of the internals in the power center box, mounting the wireless module, and either getting a good wireless signal there or running Ethernet. This system allows remote access via the web or most smartphones. Unfortunately, it requires Internet access as all control is proxied through the iAqualink servers/service. This won't get me the advanced macros I'm after, but it is by far the easiest way to go and accomplishes 3 of my 4 goals.
  2. Pay $230 for the Autelis interface, Pool Control for Jandy/Zodiac PDA. This looks to simply reproduce the remote via a web interface. A good alternative to buying a replacement PDA remote.
  3. Reverse engineer the Aqualink PDA system by creating a direct RS485 interface into the Aqualink and sending commands to it, effectively emulating the PDA remote. Eventually there would be a web interface or phone app that can then control the Aqualink via the Pi via the RS485 connection. Cost "should" be max $150 and all of my goals can be met with some time and effort.
  4. Forget it and keep what I have. $0

I'm giving #3 a shot, even though my wife thinks there's no value in this project (like most my projects). lol

Requirements:
  1. Some sort of computer. I'm opting for a Raspberry Pi because it's small, has very low power needs, it's cheap, and it can easily fit inside the Aqualink power center outside. Cost: $40 (cheapest Pi 3 I could find with a case)
  2. A USB to RS485 interface. This will allow the computer of choice to be able to communicate with the Aqualink. Cost: $20
  3. Network connectivity. Cost: free or the cost of running an Ethernet cable outside (let's say $50 as that's the avg cost of outdoor 100'+ runs from what I can tell)
  4. Power (ultimately 5V DC 2A or higher, typical of a newer USB phone charger). Cost: $10 (or free if you already have multiples like I do)
  5. Wire to connect the RS485 adapter to the Aqualink system board (not sure but I think you need 20 gauge or lower/bigger). I've heard you can use an Ethernet cable.
  6. Some level of computer and Linux knowledge (probably more than some, to be honest)
  7. Have lots of patience and a good attitude. ;)

Total cost: $60-$130. So far I'm in for $30.


Steps taken so far:
  1. Procure Raspberry Pi. I happen to have an old gen 1 model B in a case laying around. I also had a SD card and power adapter. Woot. "Free"
  2. Procure wireless dongle. Found this on Amazon - https://www.amazon.com/gp/product/B003MTTJOY/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1 - but unfortunately, it doesn't work well outside for me (having to go through brick and metal pretty much kills my wireless signal). There are other options, some with antennas, etc. I think I'm going to just run an Ethernet cable to it. I may rig up a USB extension cable to run outside of the box but then it won't be protected from the environment. Probably tons of options here...
  3. Procure USB to RS485 adapter. This one looks to be working great for me, but I'm still early on in the project: https://www.amazon.com/gp/product/B00BR0AY80/ref=oh_aui_detailpage_o01_s01?ie=UTF8&psc=1 (edit: alternatively, this one is much cheaper and is reported to work well: https://www.amazon.com/JBtek-Conver...8&qid=1502894504&sr=8-3&keywords=rs485+to+usb)
  4. Install Raspbian OS on the SD card. I installed Raspbian Jessie Lite because I didn't want the desktop (use SSH to connect instead, uses a lot less resources). Installing operating system images - Raspberry Pi Documentation
  5. Configure Raspbian. This assumes you have some basic hardware and Linux experience. You need to get it on your network and enable SSH access. I won't go into these details; google is your friend (I will help if there's a demand for this of course). To quickly enable SSH, just put a dummy file called "ssh" in the boot partition on the SD card. I did that, connected it to my TV, plugged in Ethernet, saw the IP, then was able to SSH in and get wireless working. I never had to plug in a keyboard.
  6. Install python-serial. While python comes with Raspbian, this does not. Once you have SSH access to the Pi, run this: sudo apt-get install python-serial
  7. Get jbuel's (HUGE THANKS!) RS485 interface reader, aquadisplay.py: Trouble Free Pool.
  8. BEFORE YOU DO THIS STEP - TURN OFF POWER TO YOUR POWER CENTER (THERE ARE LIVE WIRES INSIDE) - Wire the RS485 adapter to the Aqualink main board. This involves opening the power center and wiring the + and - connections from the adapter to the middle two pins (2 and 3) of one of the red connectors in the box. For reference: Control your Jandy equipment from your PC with a $15 adapter - Page 8 and http://www.zodiacpoolsystems.com/~/media/Zodiac/Global/Downloads/0748-91071/6594.ashx pages 18-20
  9. Make sure everything is plugged in/turned on and you have network access. SSH to the Pi. Run this: python aquadisplay.py. You should start seeing data from the Aqualink. Good data will start with 1002 and end in 1003. If you see data but it doesn't match that, try reversing the RS485 wires. If you get checksum errors, try shortening the wire between the RS485 and power center, getting a thicker gauge wire, or bumping up the power adapter amps (I had errors using a 1A adapter but they went away with a 2A adapter - I assume the 2 USB devices were pulling more than 1A of power).
  10. Once you're happy with the script, set it to run as a service so it automatically starts at boot-up. These directions work great in Raspian: How to run a script as a service in Raspberry Pi Food Concerns


That's where I'm at right now. I see tons of data including multiple devices (PDA, master controller, variable speed pump, and I assume my bubbler, heater, water temp, air temp, and 2 electronic valves). Also when I push buttons on my PDA remote, I see those commands.


Next steps:
  1. Get better network connectivity to my Raspberry Pi. My wireless signal sucks by the pool equipment, so I need to fix that ASAP otherwise this project is dead in the water (pun intended).
  2. Identify device codes from the aquadisplay.py stream. I know for sure that the PDA is device 60 but there are others I see in the stream: 33, 38, 50, 58, 68, 78, 81.
  3. Identify commands coming from the PDA (also in the stream). This will likely involve a fair amount of work going through the menus of the PDA and documenting codes it's sending to the Aqualink. I'll then have to program those in.
  4. Figure out how to send commands to the Aqualink (emulating the PDA)
  5. Get a web site created that sends commands from #4
  6. Create more advanced macros/buttons for the interface
  7. Rejoice (translation: drink lots of beer poolside)


If you have any info that can help, want to help with the project, or have any feedback whatsoever, please chime in!

Thanks,
jt
 
JohnnyTaco, you're my PDA-slayer hero. I have the Jandy ps8. I'm not a tech geek, and it still drives be crazy. I've learned to let go of my frustrations, since I have to live with it. How in the world does Jandy get away with still selling these PDA's?

I'm just happy to see someone doing something about it without paying the ridiculous costs to upgrade!

I'm cheering you on!!!
Suz
 
Thanks for doing this johnnytaco, I've got pretty much the same situation except my remote is totally busted. At first the screen went half-dead, and then in my tinkering to take it apart to see if I could fix it of course I completely broke it. :)

Couple thoughts so far:

> Pay $230 for the Autelis interface, Pool Control for Jandy/Zodiac PDA. This looks to simply reproduce the remote via a web interface. A good alternative to buying a replacement PDA remote.

For those of us with solid wifi where we would connect to the aqualink, the Autelis has the downside that it is not wifi-capable. So you would need to run ethernet or get some wireless bridge like this one, so figure an additional $25-$30 if going the bridge route.

>
Some sort of computer. I'm opting for a Raspberry Pi because it's small, has very low power needs, it's cheap, and it can easily fit inside the Aqualink power center outside. Cost: $40 (cheapest Pi 3 I could find with a case)

I think a raspberry pi zero w would probably be powerful enough if we're just running some python program. Those are only $10 on their own or $24.50 from adafruit with a starter pack including other accessories. And the bonus is that they're both wifi- and bluetooth-capable without any adaptors.

It's still a little over my head, but there's a project on github called aquaweb that was created to control the AquaLink. Unfortunately it's not for the PDA version we have. I think the protocol might be different, and I know the controls are not the same. But I think there's some prior art there that we can learn from. And I had contacted the author who was already friendly and helpful.

I'm only at step zero right now, I have the pi zero w, I just got the usb-rs485 dongle. Will update as I make progress as well. Thanks again for the excellent instructions!
 
Awesome, glad to have some support from someone with the same setup (although worse with no working PDA). Are you controlling the pool only from the buttons on the power center itself, with no way to change the programming?

Sounds like the pi zero is a great way to go. Some caveats though - if you plan to put the pi inside the Aqualink box, the wifi signal will be severely blocked by the metal box. I got my signal strength up by getting a USB ext cable and putting the wifi dongle on that, extended about 3 ft up and taped to my brick with duct tape. LOL. Temporary, of course. For the pi zero w to work, you'll probably need to locate the pi elsewhere (which may be smart anyway). Also you'll have to get an adapter to go from the regular USB connection to micro USB for the USB/RS485 adapter. Probably not a big deal but something to consider.

Back to the project... :

As others have said, it's pretty clear that the way the PDA and master controller communicate is through the up/down/enter buttons without a whole lot of other logic. Every time you push a button, it sends a simple command along with the button pushed via arguments. Here's what I've found so far:

Each press sends cmd=01 along with:
up: args=4006
down: args=4005
enter: args=4004
button 1: args=4001
button 2: args=4003
back: args=4002

So you push a PDA button and it sends that to the master, then the master sends a basic ACK of sorts back, I think telling the PDA it can go ahead and move down or up or whatever. I don't think the PDA actually shows a change until the master ACKs it back. This happens no matter what screen/submenu you are on, so the controller must be keeping track of what menus you're on in the PDA. How crappy is that...

My guess is that if you want to program something (or do any other advanced things that you would do with the remote), you'll have to basically record the steps and replay them. Ugh. I've got a way to go before I know that for sure, but to completely //fully// programmatically do what the PDA does in macros (as I call it), it will be a major beating... Sounds like at this point it may be best to just make a PDA emulator instead of trying to macro-tize everything. Or at least start there.

Once you have it all set up and you're seeing data, let me know. We can work together on it. If you're capable of making the web site, that's the piece I'm going to need the most help on. I'm still an old school html via notepad kind of guy. lol

jt
 
Best of luck with this project. I was involved with that old thread until I no longer had the time to devote to figuring it out. Soon after, the iAquaLink was available and I purchased that and have been very happy with it, despite the cost. The old PDA still works, as slow as it is - I use that at the spa as it is water resistant.

A few thoughts on the internet issue: instead of running an Ethernet cable to the power center, if wifi is an acceptable alternative, run the Ethernet to a point indoors near the pool pad where you can put another wireless access point to your network or get a router that can act as a repeater and install that indoors near the pool pad. That way, you will have wifi at the pool pad.

Another option is to run the four conductor cable from the power center to a point inside the house and then have all of the equipment indoors. I did this when I was tinkering with the old RS485 interface. When I got the iAquaLink, after replacing the main board in the power center, I installed the interface box inside the house using the existing cable. Made everything easier.

Good luck. Hope it all works out.
 
It's still a little over my head, but there's a project on github called aquaweb that was created to control the AquaLink. Unfortunately it's not for the PDA version we have. I think the protocol might be different, and I know the controls are not the same. But I think there's some prior art there that we can learn from. And I had contacted the author who was already friendly and helpful.

Thanks for sending that. I skimmed past that in the other thread. I figured most of it would be worthless with the PDA but looking at the code, I think a lot will be useful (acks and whatnot are well spelled out). Plus it has the html already in there... definitely a good thing to reverse engineer for the PDA remote.

Thanks!!
jt
 
Alright, I'm totally caught up with you now. And this is my first major foray into hardware hacking so I'm pretty psyched about it. :)

I've got the zerow configured with raspbian jessie lite, I gave it a network name to make it easy to connect to it via ssh from another computer. I've got the zerow hooked up with a usb-rs485 converter with D+ connected to port 2 and D- connected to port 3 on the aqualink board. It's all hooked up and now I've got.
```
pi@zerow:~ $ python aquadisplay.py
RS485 : opening RS485 port /dev/ttyUSB0
RS485 : synchronized
RS485 : ready
RS485 : --> 1002 60 00 72 1003
RS485 : --> 1002 61 00 73 1003
RS485 : --> 1002 62 00 74 1003
RS485 : --> 1002 63 00 75 1003
RS485 : --> 1002 68 00 7a 1003
RS485 : --> 1002 69 00 7b 1003
RS485 : --> 1002 6a 00 7c 1003
RS485 : --> 1002 80 00 92 1003
RS485 : --> 1002 6b 00 7d 1003
RS485 : --> 1002 38 00 4a 1003
```
And it basically keeps cycling through a ton of signals. So I guess now we have to figure out what these mean and how to issue commands. So yeah, this is where grocking the aquaweb program is hopefully going to help us.

I'm a web guy so I _should_ be able to pretty this thing up as well. Ideally I'd like to build a native mobile app (using React Native) that can communicate with the program.
 
Congrats for getting this far! :) Now prepare to beat your head against the wall!

I've spent most of the morning getting ssh keys in order, finding the right IDE for Python (I settled on VIM since it's already in raspbian jessie lite and has color syntax), and digging around aquaweb.py which looks to have the most of anything out there for us to use for the PDA system. I've been trying to fix/reverse engineer aquaweb.py. First step was to get logging to print to the screen (enabling debug), which it wasn't before. I have a way to go with it but it's a great start. It's awesome to have a partner in crime in this endeavor!

The second column of numbers in your output above is the destination device ID. 60 is probably your PDA but I don't know what the rest are for you. You have a lot of different devices from me there. The 3rd column is the cmd, and 00 is a probe from the master to the other device. It looks like the devices aren't responding so I'm guessing everything is off? Here are some of the cmds I've gathered that seem to be the same between RS and PDAs:

0=probe (from master to device)
1=ack (device back to master)
2=status
4=msg (text the master sends)
9=clear screen (on the PDA)


I'm torn between continuing to mess with aquadisplay (which is a simplified vs of aquaweb, by the way) and the sendmsg function vs just getting aquaweb to work. Feeling a little frustrated but I will persevere!
 

Enjoying this content?

Support TFP with a donation.

Give Support
> By the way - read this for how the protocol/process between master and remote work.

Funny, I was reading that when your message came through. :)

> Are you controlling the pool only from the buttons on the power center itself, with no way to change the programming?

Correct, all we have are the buttons on the aqualink panel now. The PDA itself is toast. So we have no way to change the programming.

>
It looks like the devices aren't responding so I'm guessing everything is off?

Well that's weird, everything is not off. It's on "auto" and running according to the program schedule. What are the possible devices that would respond? There's the dead remote of course. We have a pool and a spa, we have a heater (and temperature sensors for both the pool and spa), we have a blower (for the spa, which is controlled separately), we have lights, we have a water feature, and we have a cleaner. Those are all of the separate things that we can control. Should I see traffic from all of them responding to the "00" probe? Or is it only "controllers" that would respond? I've run the program for longer and that column never shows anything but "00" even though these other things are running. But for example it's currently in "pool mode" and the cleaner is running.
 
I'm the guy who wrote the github project referenced above ( GitHub - earlephilhower/aquaweb: Control Jandy Aqualink via a web interface ). I spent a weekend reversing the protocol for the old-style square remote and the spalink in-pool controller maybe two years ago, so I may be a bit rusty, but here's what I remember after re-reading my code. I don't have the newer style PDA, so take this with a grain of salt...they could have changed things alot between revisions (but *I* wouldn't if I were them...).

I'll call the main control box the CPU, and the handheld screen the TTY. The CPU was the guy with the actual brains, had all the menus stored, and basically all the intelligence. It sent messages to the TTY who simply implemented a XxY text screen (like a VT100) and was able to send back a single "event" (button press) with every command it received. The TTY would respond with a "arrow down" event, the CPU would then send another message telling theTTY how to redraw the screen with the selection down one element, etc. So that's the big picture on the old-style remotes. Note that the RF portion of the remote is not in the picture...it's completely dumb and doesn't do anything w/o the TTY or CPU initiating it.

Here's the basic flow of operations I've seen:
1. The CPU sends messages on the bus, constantly polling to see who's out there. Any device who sees its ID is obligated to reply with an ACK (and potentially an event).
2. The TTY sees ID==<mine>, then sends an ACK, indicating "I'm alive, start talking to me"
3. The CPU then starts up the menu controller (running, again, completely on the CPU)
4. The CPU sends a series of screen update events to display screens to that ID, listening for ACKS from the TTY for events and to ensure the TTY is still alive
5. Multiple-times per second, even if there are no screen updates required, the CPU will send PROBE/PINGS to the device to ensure #4 and allow for any keypresses to be sent back
6. If the TTY misses and ACK the CPU will retry a couple times. If it misses all those, it'll assume the TTY is dead and go back to #1

So I'd start sending an ACK to the PROBE 60 and see what comes back.

This would be way easier if someone w/a working device was able to record the stream through some interactions for you. My remote was pretty borked, but it did have 3 lines working and the "up" button, but that was enough to see what was going on and made the process WAY easier...
 
efp3 - Thanks for chiming in! Your code is a GREAT start and I greatly appreciate it. I have a working remote so we're in luck. ;)

rralian - Just dawned on me, you probably aren't going to get anywhere without a working PDA remote. So I went through the logs to get us both started. This completely jives with efp3's info above, the readme file, etc. Take a gander. Note that in these logs I've only turned on the remote and gone to the main screen then turned it off. You can see all the chatter - probes, acks, msgs back, etc:

# master polling various devices with no response
Sun Jul 23 18:29:57 2017: dest=60 cmd=00 args=
Sun Jul 23 18:29:57 2017: dest=68 cmd=00 args=
Sun Jul 23 18:29:57 2017: dest=81 cmd=00 args=
Sun Jul 23 18:29:57 2017: dest=33 cmd=00 args=
Sun Jul 23 18:29:57 2017: dest=38 cmd=00 args=
Sun Jul 23 18:29:57 2017: dest=50 cmd=00 args=
Sun Jul 23 18:29:57 2017: dest=58 cmd=00 args=


# master and device 78 communicating; these two sets alternate every 5-6 secs. Not sure what 78 is still.
Sun Jul 23 18:29:57 2017: dest=78 cmd=45 args=0005
Sun Jul 23 18:29:57 2017: dest=00 cmd=1f args=450005eb05
Sun Jul 23 18:29:57 2017: dest=78 cmd=43 args=
Sun Jul 23 18:29:57 2017: dest=00 cmd=1f args=430b000000
Sun Jul 23 18:29:57 2017: dest=78 cmd=46 args=000003
Sun Jul 23 18:29:57 2017: dest=00 cmd=20 args=46000003303032300000


Sun Jul 23 18:30:02 2017: dest=78 cmd=44 args=00e02e
Sun Jul 23 18:30:02 2017: dest=00 cmd=1f args=4400e02e00
Sun Jul 23 18:30:02 2017: dest=78 cmd=41 args=
Sun Jul 23 18:30:02 2017: dest=00 cmd=01 args=4100


# turned PDA on, goes to initial screen with info about system
Sun Jul 23 19:28:45 2017: dest=60 cmd=00 args=
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=09 args=0000 # clear screen?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=01205044412d50533820436f6d626f2020 # text?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=034669726d776172652056657273696f6e # text?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=0520202020205044413a20372e30202020 # text?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=1b args=0000
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=1b args=0100
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=c400
Sun Jul 23 19:28:46 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:46 2017: dest=00 cmd=01 args=c400
Sun Jul 23 19:28:46 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:46 2017: dest=00 cmd=01 args=bc00


# this continues/repeats if I do nothing
Sun Jul 23 19:28:46 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:46 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:46 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:46 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:46 2017: dest=60 cmd=02 args=0000000000


# pushed down button, pda goes to main menu
Sun Jul 23 19:28:49 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4005 # down button on PDA
Sun Jul 23 19:28:49 2017: dest=60 cmd=09 args=0000 # clear screen?
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=04504f4f4c204d4f444520202020204f4e # text?
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=05504f4f4c2048454154455220204f4646
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=06535041204d4f444520202020204f4646
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=07535041204845415445522020204f4646
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=084d454e55202020202020202020202020
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=0945515549504d454e54204f4e2f4f4646
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=08 args=040000
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=40202020202053554e2020323a3237504d
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=01414952202020202020202020504f4f4c
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=8231303060202020202039316020202020
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=3600
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=8231303060202020202039316020202020
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=3600
Sun Jul 23 19:28:50 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:50 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:50 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:50 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:50 2017: dest=60 cmd=02 args=0000000000


# these repeat if I do nothing
Sun Jul 23 19:28:50 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:50 2017: dest=60 cmd=02 args=0000000000


# I think this is when I turned off the PDA, PDA responds a few times but with no args
Sun Jul 23 19:28:53 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:53 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:53 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:53 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:53 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:53 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:53 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:53 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:53 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:53 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:53 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:53 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:54 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:54 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:54 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:54 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:54 2017: dest=00 cmd=01 args=0000


# master continues to talk to the PDA without response, gives up after 10 tries
Sun Jul 23 19:28:54 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:54 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:54 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:55 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:55 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:55 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:55 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:55 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:56 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:56 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:56 2017: dest=60 cmd=00 args=
 
Sun Jul 23 19:28:45 2017: dest=60 cmd=09 args=0000 # clear screen?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=01205044412d50533820436f6d626f2020 # text?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=034669726d776172652056657273696f6e # text?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=0520202020205044413a20372e30202020 # text?

Sun Jul 23 19:28:49 2017: dest=60 cmd=09 args=0000 # clear screen?
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=04504f4f4c204d4f444520202020204f4e # text?
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=05504f4f4c2048454154455220204f4646
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=06535041204d4f444520202020204f4646
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=07535041204845415445522020204f4646
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=084d454e55202020202020202020202020
Sun Jul 23 19:28:49 2017: dest=00 cmd=01 args=4000
Sun Jul 23 19:28:49 2017: dest=60 cmd=04 args=0945515549504d454e54204f4e2f4f4646

Confirmed this is all text by using a hex to ascii converter:
args=04504f4f4c204d4f444520202020204f4e # "POOL MODE ON"
args=05504f4f4c2048454154455220204f4646 # "POOL HEATER OFF"
args=06535041204d4f444520202020204f4646 # "SPA MODE OFF"
args=07535041204845415445522020204f4646 # "SPA HEATER OFF"
args=084d454e55202020202020202020202020 # "MENU"
args=0945515549504d454e54204f4e2f4f4646 # "EQUIPMENT ON/OFF"

args=40202020202053554e2020323a3237504d # "@ SUN 2:27PM"
args=01414952202020202020202020504f4f4c # "AIR POOL"
args=8231303060202020202039316020202020 # "100` 91`"

It's hot and so is the water. :(
 
# turned PDA on, goes to initial screen with info about system
Sun Jul 23 19:28:45 2017: dest=60 cmd=00 args=
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=09 args=0000 # clear screen?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=01205044412d50533820436f6d626f2020 # text?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=034669726d776172652056657273696f6e # text?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=04 args=0520202020205044413a20372e30202020 # text?
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=1b args=0000
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=1b args=0100
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=0000
Sun Jul 23 19:28:45 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:45 2017: dest=00 cmd=01 args=c400
Sun Jul 23 19:28:46 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:46 2017: dest=00 cmd=01 args=c400
Sun Jul 23 19:28:46 2017: dest=60 cmd=02 args=0000000000
Sun Jul 23 19:28:46 2017: dest=00 cmd=01 args=bc00

Looks like you're in luck. That's even the same WRITELINE code as the square remote!
LINE1 = PDA-PS8 Combo
LINE3 = Firmware Version
LINE5 = PDA: 7.0

No guarantees, but you could just change the ID= in the aquaweb.py to 60 (and possibly change the X and Y dimensions) and see if it "just works"...
 
Just messing around with too, if you had a second cheap ($6 Amazon) USB->RS485 connected to a PC would you not be able to send commands to the PDA with the Aquapalm software that you download from Jandy? That would at least help without the PDA itself present if damaged or missing?
Aquapalm.jpg
 
Some good news... making great progress. Working with aquaweb.py, have stripped out most of the spa code and adjusted some logging to help see what I'm doing. Changed the ID to be 60 to match the PDA, changed the rs485 connection from SEVENBITS to EIGHTBITS, and changed pageup/pagedown to be button 1 and button 2 (it doesn't fully resemble the remote yet). I now see:

View attachment 66396

and

View attachment 66397

... then it dies. My confidence has shot up about 500% in this. ;) More to come.
 

Enjoying this content?

Support TFP with a donation.

Give Support
Thread Status
Hello , This thread has been inactive for over 60 days. New postings here are unlikely to be seen or responded to by other members. For better visibility, consider Starting A New Thread.