Aqualink PDA automation using RS485

efp3

Active member
Jan 19, 2015
32
Orange, CA
My pool system consists only of RS-6 and wall remote (the one pictured in the previous post), I don't have any other handheld remotes.
So this is the type of RS6 I have:
<image>
Which is connected to this:
<image>

Oh, so it's hardwired but looks like the square wireles PDA I inherited when I bought my place a few years back (with the pool being installed probably 5-10 years prior to that).

It *may* be different in terms of codes vs. the ones other folks have seen. Are you up for some investigation?

If so, can you reconnect and record the aquadump output for your remote as you go through a few menus and press through all the buttons? Please try and note when/which button you press as you go along. We can eyeball the RS485 protocol and see if there's anything we can do.

OTW, sorry but I don't know that I can help. AFAIK, everyone so far, myself included, has been using a wireless PDA or wireless square-type remote.
 

efp3

Active member
Jan 19, 2015
32
Orange, CA
If you're running PUTTY on windows to get to the PI, then go to the PUTTY settings and make the window scrollback buffer 20,000 lines or something large.

Then start the dump and before you do something, just type in the terminal the key or something so we can correlate a command to a button press.

When you've gone through all the buttons, stop the dumper and cut-n-paste the log. IF it's too big you can use pastebin or Github's service to share it.
 

efp3

Active member
Jan 19, 2015
32
Orange, CA
You ran the aquadisplay before, right? That's all we need. Just a log of all RS485 bus messages like you've already posted.
 

ab.origine

Active member
May 10, 2017
28
Paradiso
Sorry for the very late reply, I was traveling overseas.
Here is the dump of the aquadisplay as requested.
I have pressed buttons in the reverse clock order - first top left button, second "back", third lower left, fourth "select", fifth "down" button (lower right) and sixth up button (upper right).
Thanks!

[email protected]:~ $ cd ..
[email protected]:/home $ cd ..
[email protected]:/ $ sudo python home/pi/Downloads/aquadisplay.py
RS485 : opening RS485 port /dev/ttyUSB0
RS485 : synchronized
RS485 : ready
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 42 00 54 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 43 00 55 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 10 00 22 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 11 00 23 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 12 00 24 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 13 00 25 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 18 00 2a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 19 00 2b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 1a 00 2c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 1b 00 2d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 20 00 32 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 21 00 33 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 22 00 34 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 23 00 35 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 28 00 3a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 29 00 3b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 2a 00 3c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 2b 00 3d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 30 00 42 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 31 00 43 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 32 00 44 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 33 00 45 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 38 00 4a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 39 00 4b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 3a 00 4c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 3b 00 4d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 48 00 5a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 49 00 5b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 4a 00 5c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 4b 00 5d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 50 00 62 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 51 00 63 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 52 00 64 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 53 00 65 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 58 00 6a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 59 00 6b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 5a 00 6c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 5b 00 6d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 60 00 72 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 61 00 73 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 62 00 74 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 63 00 75 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 08 00 1a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 09 00 1b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 0a 00 1c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 0b 00 1d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 41 00 53 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 42 00 54 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 43 00 55 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 10 00 22 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 11 00 23 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 12 00 24 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 13 00 25 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 18 00 2a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 19 00 2b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 09 00c5 20 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0045515549504d454e5420535441545553 12 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 02202046494c5445522050554d50202020 20 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 1a 00 2c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 1b 00 2d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 20 00 32 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 21 00 33 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 22 00 34 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 23 00 35 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 28 00 3a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 29 00 3b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 2a 00 3c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 2b 00 3d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 30 00 42 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 31 00 43 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 32 00 44 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 33 00 45 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 38 00 4a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 39 00 4b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 3a 00 4c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 3b 00 4d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 48 00 5a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 49 00 5b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 4a 00 5c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 4b 00 5d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 50 00 62 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 51 00 63 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 52 00 64 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 53 00 65 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 58 00 6a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 59 00 6b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 5a 00 6c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 5b 00 6d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 60 00 72 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 61 00 73 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 62 00 74 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 63 00 75 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 08 00 1a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 09 00 1b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 0a 00 1c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 0b 00 1d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 41 00 53 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 42 00 54 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 43 00 55 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 10 00 22 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 11 00 23 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 12 00 24 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 13 00 25 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 18 00 2a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 19 00 2b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 1a 00 2c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 1b 00 2d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 20 00 32 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b03 21 1003
RS485 : --> 1002 40 09 00c5 20 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0945515549504d454e54204f4e2f4f4646 de 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0a4f4e45544f55434820204f4e2f4f4646 ac 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0b2020204d454e55202f2048454c502020 ce 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 004a414e445920417175614c696e6b5253 a7 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 02202031322f30312f3137204652492020 63 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0320202020343a333920504d2020202020 10 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 05202020504f4f4c203137604320202020 a0 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0620202020414952203138604320202020 64 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0720202020202020202020202020202020 5d 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 08 090000 63 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 21 00 33 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 05 57 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 22 00 34 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 23 00 35 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 28 00 3a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 29 00 3b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2a 00 3c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2b 00 3d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 30 00 42 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 31 00 43 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 32 00 44 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 33 00 45 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 38 00 4a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 39 00 4b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 3a 00 4c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 3b 00 4d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 48 00 5a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b03 a1 1003
RS485 : --> 1002 49 00 5b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 4a 00 5c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 4b 00 5d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 50 00 62 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 51 00 63 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 52 00 64 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 53 00 65 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 58 00 6a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 59 00 6b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 5a 00 6c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 5b 00 6d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 60 00 72 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 61 00 73 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 62 00 74 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 63 00 75 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 08 00 1a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b02 a0 1003
RS485 : --> 1002 09 00 1b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 0a 00 1c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 0b 00 1d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 41 00 53 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 42 00 54 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 43 00 55 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 10 00 22 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 11 00 23 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 12 00 24 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 13 00 25 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 18 00 2a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 19 00 2b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 1a 00 2c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 1b 00 2d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 20 00 32 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 21 00 33 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 22 00 34 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b01 9f 1003
RS485 : --> 1002 23 00 35 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 28 00 3a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 29 00 3b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2a 00 3c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2b 00 3d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 30 00 42 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 31 00 43 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 32 00 44 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 33 00 45 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 38 00 4a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 39 00 4b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 3a 00 4c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 3b 00 4d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 48 00 5a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 49 00 5b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b04 a2 1003
RS485 : --> 1002 40 09 00c5 20 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 0146494c5445522050554d502020204f4e 7c 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 02535041202020202020202020204f4646 57 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 03504f4f4c2048454154202020204f4646 30 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 04535041204845415420202020204f4646 fb 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 05424f4f535445522050554d50204f4646 d6 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 06464f554e5441494e20202020204f4646 3b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 07415558332020202020202020204f4646 79 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 08415558342020202020202020204f4646 7b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 09415558352020202020202020204f4646 7d 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 0a504f4f4c204c494748542020204f4646 6d 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 0b414c4c204f4646202020202020202020 55 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 08 010000 5b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 4a 00 5c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 4b 00 5d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 50 00 62 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 51 00 63 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 52 00 64 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 53 00 65 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 58 00 6a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 59 00 6b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 5a 00 6c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 5b 00 6d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 60 00 72 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b05 a3 1003
RS485 : --> 1002 40 08 020000 5c 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 61 00 73 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 62 00 74 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 63 00 75 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 08 00 1a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 09 00 1b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 0a 00 1c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 0b 00 1d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 41 00 53 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 42 00 54 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 43 00 55 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 10 00 22 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 11 00 23 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 12 00 24 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 13 00 25 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b06 a4 1003
RS485 : --> 1002 40 08 010000 5b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 18 00 2a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 19 00 2b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 1a 00 2c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 1b 00 2d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 20 00 32 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 21 00 33 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 22 00 34 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 23 00 35 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 28 00 3a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 29 00 3b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2a 00 3c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2b 00 3d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 30 00 42 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 31 00 43 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 32 00 44 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 33 00 45 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 38 00 4a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 39 00 4b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 3a 00 4c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 3b 00 4d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 48 00 5a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 49 00 5b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 4a 00 5c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 4b 00 5d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 50 00 62 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 51 00 63 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 52 00 64 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 53 00 65 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 58 00 6a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 59 00 6b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 5a 00 6c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 5b 00 6d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 60 00 72 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 61 00 73 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 62 00 74 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 63 00 75 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 08 00 1a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 09 00 1b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 0a 00 1c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 0b 00 1d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 41 00 53 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 42 00 54 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 43 00 55 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 10 00 22 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 11 00 23 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 12 00 24 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 13 00 25 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 18 00 2a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 19 00 2b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 1a 00 2c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 1b 00 2d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 20 00 32 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 21 00 33 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 22 00 34 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 23 00 35 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 28 00 3a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 29 00 3b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2a 00 3c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2b 00 3d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 30 00 42 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 31 00 43 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 32 00 44 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 33 00 45 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 38 00 4a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 39 00 4b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 3a 00 4c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 3b 00 4d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 48 00 5a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 49 00 5b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 4a 00 5c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 4b 00 5d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 50 00 62 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 51 00 63 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 52 00 64 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 53 00 65 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 58 00 6a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 59 00 6b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 5a 00 6c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 5b 00 6d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 60 00 72 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 61 00 73 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 62 00 74 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 63 00 75 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 08 00 1a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 09 00 1b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 0a 00 1c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 0b 00 1d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 41 00 53 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 42 00 54 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 43 00 55 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 10 00 22 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 11 00 23 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 12 00 24 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 13 00 25 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 18 00 2a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 19 00 2b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 1a 00 2c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 1b 00 2d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 20 00 32 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 21 00 33 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 22 00 34 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 23 00 35 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 28 00 3a 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 29 00 3b 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2a 00 3c 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 2b 00 3d 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 30 00 42 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 31 00 43 1003
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 32 00 44 1003
^CTraceback (most recent call last):
File "home/pi/Downloads/aquadisplay.py", line 134, in <module>
i. readMsg()
File "home/pi/Downloads/aquadisplay.py", line 60, in readMsg
self.msg += self.port.read(2)
File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 472, in read
ready, _, _ = select.select([self.fd, self.pipe_abort_read_r], [], [], timeout.time_left())
KeyboardInterrupt
 

efp3

Active member
Jan 19, 2015
32
Orange, CA
Howdy,

Here's the interesting bit, where you hit a key and the screen clears and it draws stuff:
...
RS485 : --> 1002 40 02 00c5560cf0 6b 1003 <= your ID = 0x40
RS485 : --> 1002 00 01 0b03 21 1003 <= sends ACK of 0x0b, vs 0x8b for the wireless one, and sends key 03==PGDN (I think)
RS485 : --> 1002 40 09 00c5 20 1003 <= head sends CLS
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0945515549504d454e54204f4e2f4f4646 de 1003 <= head starts drawing the screen
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0a4f4e45544f55434820204f4e2f4f4646 ac 1003
RS485 : --> 1002 00 01 0b00 1e 1003
RS485 : --> 1002 40 04 0b2020204d454e55202f2048454c502020 ce 1003
RS485 : --> 1002 00 01 0b00 1e 1003
...

So, it looks like the only thing different it your ACK value is different. Can you edit aquaweb.yp and change line 469 where it says
> ACK = "8b"
to
> ACK = "0b"

And restart the program. I have a feeling it'll just work then. If so, I can add an option and probably some sort of autodetect so the app will figure it out on its own.

Let me know how it goes,
-EFP3
 

ab.origine

Active member
May 10, 2017
28
Paradiso
Thanks again Earle for all your help, I truly appreciate it.
I must be doing something wrong, sine I could not find ACK = "8b" in my aquaweb.py.
Here is a copy of the aquaweb.py I was using:

Code:
#!/usr/bin/env python# coding=utf-8
"""Simulates AqualinkRS square remote and spa remote with a RS485 interface."""


import string
import serial
import struct
import threading
import sys
import time
import socket
import os
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
import cgi




# Configuration


RS485Device = "/dev/ttyUSB0"        # RS485 serial device to be used
debugData = False
debugRaw = False


# ASCII constants
NUL = '\x00'
DLE = '\x10'
STX = '\x02'
ETX = '\x03'


masterAddr = '\x00'          # address of Aqualink controller
last_log = ""
ID = "40"
SPAID = "20"




INDEXHTML = """
<html>
<head>
<title>Pool Controller</title>
<script language="Javascript">


if (window.XMLHttpRequest) {
    var xmlHttpReqKey = new XMLHttpRequest();
    var xmlHttpReqScreen = new XMLHttpRequest();
} else {
    var xmlHttpReqKey = new ActiveXObject("Microsoft.XMLHTTP"); 
    var xmlHttpReqScreen = new ActiveXObject("Microsoft.XMLHTTP");
}


function screen() {
    xmlhttpPost(xmlHttpReqScreen, "/screen.cgi", "", "screen");
}


function sendkey(key) {
    xmlhttpPost(xmlHttpReqKey, "/key.cgi", "key="+key);
}


function xmlhttpPost(xmlReq, strURL, params, update) {
    xmlReq.open('POST', strURL, true);
    xmlReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlReq.send(params);
    if (update != "") {
      xmlReq.onreadystatechange = function() {
        if (xmlReq.readyState == 4) {
            updatepage(xmlReq.responseText, update);
        }
      }
    }
    xmlReq.send();
}


function updatepage(str, div){
    document.getElementById(div).innerHTML = str;
    setTimeout(window[div](), 250);
}
</script>
</head>
<body onload="screen();">
<table>
<tr>
<td>
<table><tr><td height="80px" align="right"><button onclick="sendkey('pgup');">Page Up</button></td></tr><tr><td align="right" height="80px"><button onclick="sendkey('back');">Back</button></td></tr><tr><td align="right" height="80px"><button onclick="sendkey('pgdn');">Page Down</button></td></tr></table>
</td>
<td>
<font size="+2"><div id="screen"></div> </font>
</td>
<td>
    <table><tr><td align="left" height="80px"><button onclick="sendkey('up');">Up</button></td></tr><tr><td align="left" height="80px"><button onclick="sendkey('down');">Down</button></td></tr></table>
</td>
</tr>
<tr><td colspan="3" align="center"><button onclick="sendkey('select');">Select</button></td></tr>
</table>


</body>
</html>
"""


SPAHTML = """
<html>
<head>
<title>SpaLink Controller</title>
<script language="Javascript">


if (window.XMLHttpRequest) {
    var xmlHttpReqKey = new XMLHttpRequest();
    var xmlHttpReqScreen = new XMLHttpRequest();
    var xmlHttpReqStatus = new XMLHttpRequest();
} else {
    var xmlHttpReqKey = new ActiveXObject("Microsoft.XMLHTTP"); 
    var xmlHttpReqScreen = new ActiveXObject("Microsoft.XMLHTTP");
    var xmlHttpReqStatus = new ActiveXObject("Microsoft.XMLHTTP");
}


function screen() { /* Ping-pong between lights and lcd */
    xmlhttpPost(xmlHttpReqStatus, "/spastatus.cgi", "", "cstat");
}


function cstat() {
    xmlhttpPost(xmlHttpReqScreen, "/spascreen.cgi", "", "screen");
}


function sendkey(key) {
    xmlhttpPost(xmlHttpReqKey, "/spakey.cgi", "key="+key);
}


function xmlhttpPost(xmlReq, strURL, params, update) {
    xmlReq.open('POST', strURL, true);
    xmlReq.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlReq.send(params);
    if (update != "") {
      xmlReq.onreadystatechange = function() {
        if (xmlReq.readyState == 4) {
            updatepage(xmlReq.responseText, update);
        }
      }
    }
    xmlReq.send();
}


function updatepage(str, div){
    document.getElementById(div).innerHTML = str;
    setTimeout(window[div](), 125);
}


</script>
</head>
<body onload="cstat(); screen();">
<table>
<tr>
<td><div id="screen"></div></td>
<td>
<table>
<tr>
<td> </td>
<td><button onclick="sendkey('1')";>Spa</button></td>
<td><button onclick="sendkey('2')";>Spa Heat</button></td>
<td><button onclick="sendkey('3')";>Jet Pump</button></td>
<td><button onclick="sendkey('4')";>Waterfall</button></td>
</tr>
<tr>
<td><button onclick="sendkey('*')";>*</button></td>
<td><button onclick="sendkey('5')";>Pool Light (+)</button></td>
<td><button onclick="sendkey('6')";>Spa Light (-)</button></td>
<td><button onclick="sendkey('7')";>Waterfall Light</button></td>
<td><button onclick="sendkey('8')";>Aux 6</button></td>
</tr>
</table>
</td>
</tr>
<tr><td>STATUS:</td><td colspan="4"><div id="cstat"></div></td></tr>
</table>


</body>
</html>
"""


PORT = 80




class webHandler(BaseHTTPRequestHandler):
    """CGI and dummy web page handler to interface to control objects."""
    screen = None
    spa = None


    def log_request(self, code='-', size='-'):
        """Don't log anything, we're on an embedded system"""
        pass


    def log_error(self, fmt, *args):
        """This was an error, dump it."""
        self.log_message(fmt, *args)


    #Handler for the GET requests
    def do_GET(self):
        """HTTP GET handler, only the html files allowed."""
        if self.path == "/":
            self.path = "/index.html"
        # We only serve some static stuff
        if (self.path.startswith("/spa.html") or
           self.path.startswith("/index.html")):
            mimetype = 'text/html'
            ret = ""
            if self.path.startswith("/index.html"):
                ret = INDEXHTML
            elif self.path.startswith("/spa.html"):
                ret = SPAHTML
            self.send_response(200)
            self.send_header('Content-Type', mimetype)
            self.end_headers()
            self.wfile.write(ret)
        else:
            self.send_error(404, 'File Not Found: %s' % self.path)


    def do_POST(self):
        """HTTP POST handler.  CGI "scripts" handled here."""
        ctype, pdict = cgi.parse_header(self.headers.getheader('content-type'))
        try:
            if ctype == 'multipart/form-data':
                postvars = cgi.parse_multipart(self.rfile, pdict)
            elif ctype == 'application/x-www-form-urlencoded':
                length = int(self.headers.getheader('content-length'))
                postvars = cgi.parse_qs(self.rfile.read(length), keep_blank_values=1)
            else:
                postvars = {}
        except:
            postvars = {}
        if (self.path.startswith("/key.cgi") or
           self.path.startswith("/spakey.cgi") or
           self.path.startswith("/spabinary.cgi") or
           self.path.startswith("/screen.cgi") or
           self.path.startswith("/spascreen.cgi") or
           self.path.startswith("/status.cgi") or
           self.path.startswith("/spastatus.cgi")):
            mimetype = 'text/html'
            ret = ""
            if self.path.startswith("/key.cgi"):
                if 'key' in postvars:
                    key = postvars['key'][0]
                    self.screen.sendKey(key)
                ret = "<html><head><title>key</title></head><body>"+key+"</body></html>\n"
            elif self.path.startswith("/spakey.cgi"):
                if 'key' in postvars:
                    key = postvars['key'][0]
                    self.spa.sendKey(key)
#                    print "SPA - key "+key
                    ret = "<html><head><title>key</title></head><body>"+key+"</body></html>\n"
            elif self.path.startswith("/spabinary.cgi"):
                ret = self.spa.text() + "|" + time.strftime("%_I:%M%P %_m/%d") + "|"
                if (self.spa.status['spa']=="ON"): ret += "1"
                else: ret += "0"
                if (self.spa.status['heat']=="ON"): ret += "1"
                else: ret += "0"
                if (self.spa.status['jets']=="ON"): ret += "1"
                else: ret += "0"
            elif self.path.startswith("/screen.cgi"):
                ret = self.screen.html()
            elif self.path.startswith("/spascreen.cgi"):
                ret = self.spa.html()
            elif self.path.startswith("/status.cgi"):
                ret = self.screen.status
            elif self.path.startswith("/spastatus.cgi"):
                ret = self.spa.status
            self.send_response(200)
            self.send_header('Content-Type', mimetype)
            self.end_headers()
            self.wfile.write(ret)
        else:
            self.send_error(404, 'File Not Found: %s' % self.path)




class MyServer(HTTPServer):
    """Override some HTTPServer procedures to allow instance variables and timeouts."""
    def serve_forever(self, screen, spa):
        """Store the screen and spa objects and serve until end of times."""
        self.RequestHandlerClass.screen = screen 
        self.RequestHandlerClass.spa = spa 
        HTTPServer.serve_forever(self)
    def get_request(self):
        """Get the request and client address from the socket."""
        self.socket.settimeout(1.0)
        result = None
        while result is None:
            try:
                result = self.socket.accept()
            except socket.timeout:
                pass
        result[0].settimeout(1.0)
        return result




def startServer(screen, spa):
    """HTTP Server implementation, to be in separate thread from main code."""
    try:
        server = MyServer(('', PORT), webHandler)
        print 'Started httpserver on port ' , PORT
        # Wait forever for incoming http requests
        server.serve_forever(screen, spa)
    except KeyboardInterrupt:
        print '^C received, shutting down the web server'
        server.socket.close()




class Spa(object):
    """Emulate spa-side controller with LCD display."""
    lock = None
    nextAck = "00"
    status = {}


    def __init__(self):
        self.screen = "---"
        self.status = {'spa': "UNK", 'jets': "UNK", 'heat': "UNK"}
        self.nextAck = "00"
        self.lock = threading.Lock()


    def sendAck(self, i):
        """Tell controller we got messag, including keypresses in response."""
        ackstr = "00" + self.nextAck
#    print "SPACK: "+ackstr
        i.sendMsg((chr(0), chr(1), ackstr.decode("hex")))
        self.nextAck = "00"


    def setNextAck(self, nextAck):
        """Set value to send on next controller ping."""
        self.nextAck = nextAck


    def sendKey(self, key):
        """Send a key on the next ack"""
        keyToAck = {'1': "09", '2': "06", '3': "03", '4': "08", '5': "02", '6': "07", '7': "04", '8': "01", '*': "05"}
        if key in keyToAck.keys():
            self.setNextAck(keyToAck[key])


    def update(self, args):
        """Update the 7-segment LCD display."""
#        print "SPAUPDATE"
        self.lock.acquire()
        try:
            text = args[1:4]
            if args[1:7] == " . . .":
                self.screen = "... ..."
            else:
                self.screen = text
                if ord(args[5:6]) == 1:
                    self.screen += " SET"
                elif ord(args[9:10]) == 33:
                    self.screen += " AIR"
                elif ord(args[7:8]) == 33:
                    self.screen += " H2O"
                else:
                    print args.encode("hex")
                if text == "0FF":
                    self.screen = "OFF H2O"
        finally:
            self.lock.release()
#            print "SPATEXT: "+text


    def setStatus(self, stat):
        """Process the status into a string for HTML return"""
        try:
            if ord(stat[0:1]) & 16:
                self.status['spa'] = 'ON'
            else:
                self.status['spa'] = 'OFF'
            if ord(stat[0:1]) & 1:
                self.status['jets'] = 'ON'
            else:
                self.status['jets'] = 'OFF'
            if ord(stat[0:1]) & 8:
                self.status['heat'] = 'ON'
            else:
                self.status['heat'] = 'OFF'
        except:
            self.status = {'spa': "UNK", 'jets': "UNK", 'heat': "UNK"}


    def html(self):
        """Return HTML formatted 7-segment display"""
        self.lock.acquire()
        try:
            ret = "<pre>"
            ret += self.screen
            ret += "</pre>"
        finally:
            self.lock.release()
        return ret


    def text(self):
        """Return plain 7-character display"""
        ret = self.screen
        return ret


    def processMessage(self, ret, i):
        """Handle controller messages to us"""
        if ret['cmd'] == "03":  # Text status
#            print "SPA-TEXT"
            self.sendAck(i)
            self.update(ret['args'])
        elif ret['cmd'] == "09":  # Change send ??
#            print "SPA-CHANGE"
            self.sendAck(i)
            try:
                equip = ord(ret['args'][0:1])
                state = ord(ret['args'][1:2])
            except:
                pass
        elif ret['cmd'] == "02":  # Status binary
#            print "SPA-BSTATUS"
            self.sendAck(i)
            self.setStatus(ret['args'])
        elif ret['cmd'] == "00":  # Probe
#            print "SPA-PROBE"
            self.sendAck(i)
        else:
#            print "SPA-UNKCMD"
            self.sendAck(i)




class Screen(object):
    """Emulates the square remote control unit."""
    W = 16
    H = 12
    UNDERLINE = '\033[4m'
    END = '\033[0m'
    lock = None
    nextAck = "00"


    def __init__(self):
        """Set up the instance"""
        self.dirty = 1
        self.screen = self.W * [self.H * " "]
        self.invert = {'line':-1, 'start':-1, 'end':-1}
        self.status = "00000000"
        self.lock = threading.Lock()


    def setStatus(self, status):
        """Stuff status into a variable, but not used presently."""
        self.status = status


    def cls(self):
        """Clear the screen."""
        self.lock.acquire()
        try:
            for i in range(0, 12):
                self.screen[i] = ""
            self.invert['line'] = -1
            self.dirty = 1
        finally:
            self.lock.release()


    def scroll(self, start, end, direction):
        """Scroll screen up or down per controller request."""
        self.lock.acquire()
        try:
            if direction == 255:  #-1
                for x in range(start, end):
                    self.screen[x] = self.screen[x+1]
                self.screen[end] = self.W*" "
            elif direction == 1:  # +1
                for x in range(end, start, -1):
                    self.screen[x] = self.screen[x-1]
                self.screen[start] = self.W*" "
            self.dirty = 1
        finally:
            self.lock.release()


    def writeLine(self, line, text):
        """"Controller sent new line for screen."""
        self.lock.acquire()
        try:
            self.screen[line] = text + self.W*" "
            self.screen[line] = self.screen[line][:self.W]
            self.dirty = 1
        finally:
            self.lock.release()


    def invertLine(self, line):
        """Controller asked to invert entire line."""
        self.lock.acquire()
        try:
            self.invert['line'] = line
            self.invert['start'] = 0
            self.invert['end'] = self.W
            self.dirty = 1
        finally:
            self.lock.release()


    def invertChars(self, line, start, end):
        """Controller asked to invert chars on a line."""
        self.lock.acquire()
        try:
            self.invert['line'] = line
            self.invert['start'] = start
            self.invert['end'] = end
            self.dirty = 1
        finally:
            self.lock.release()


    def show(self):
        """Print the screen to stdout."""
        self.lock.acquire()
        try:
            if self.dirty:
                self.dirty = 0
                os.system("clear")
                for i in range(0, self.H):
                    if self.invert['line'] == i:
                        sys.stdout.write(self.UNDERLINE)
                    sys.stdout.write(self.screen[i])
                    sys.stdout.write(self.END)
                    sys.stdout.write("\n")
                sys.stdout.write(self.W*"-" + "\n")
                sys.stdout.write("STATUS: " + self.status + "\n")
        finally:
            self.lock.release()


    def html(self):
        """Return the screen as a HTML element (<PRE> assumed)"""
        self.lock.acquire()
        try:
            ret = "<pre>"
            for x in range(0, self.H): 
                if x == self.invert['line']:
                    for y in range(0, self.W):
                        if y == self.invert['start']:
                            ret += "<span style=\"background-color: #FFFF00\"><b>"
                        ret += self.screen[x][y:y+1]
                        if y == self.invert['end']:
                            ret += "</b></span>"
                    if self.invert['end'] == self.W:
                        ret += "</b></span>"
                    ret += "\n"
                else:
                    ret += self.screen[x] + "\n"
            ret += "</pre>"
        finally:
            self.lock.release()
        return ret


    def sendAck(self, i):
        """Controller talked to us, send back our last keypress."""
        ackstr = "8b" + self.nextAck
        i.sendMsg( (chr(0), chr(1), ackstr.decode("hex")) )
        self.nextAck = "00"


    def setNextAck(self, nextAck):
        """Set the value we will send on the next ack, but don't send yet."""
        self.nextAck = nextAck


    def sendKey(self, key):
        """Send a key (text) on the next ack."""
        keyToAck = { 'up':"06", 'down':"05", 'back':"02", 'select':"04", 'pgup':"01", 'pgdn':"03" }
        if key in keyToAck.keys():
            self.setNextAck(keyToAck[key])


    def processMessage(self, ret, i):
        """Process message from a controller, updating internal state."""
        if ret['cmd'] == "09":  # Clear Screen
            # What do the args mean?  Ignore for now
            if (ord(ret['args'][0:1])==0):
                self.cls()
            else:  # May be a partial clear?
                self.cls()
#                print "cls: "+ret['args'].encode("hex")
            self.sendAck(i)
        elif ret['cmd'] == "0f":  # Scroll Screen
            start = ord(ret['args'][:1])
            end = ord(ret['args'][1:2])
            direction = ord(ret['args'][2:3])
            self.scroll(start, end, direction)
            self.sendAck(i)
        elif ret['cmd'] == "04":  # Write a line
            line = ord(ret['args'][:1])
            offset = 1
            text = ""
            while (ret['args'][offset:offset+1].encode("hex") != "00") and (offset < len(ret['args'])):
                text += ret['args'][offset:offset+1]
                offset = offset + 1
            self.writeLine(line, text)
            self.sendAck(i)
        elif ret['cmd'] == "05":  # Initial handshake?
            # ??? After initial turn on get this, rela box responds custom ack
#            i.sendMsg( (chr(0), chr(1), "0b00".decode("hex")) )
            self.sendAck(i)
        elif ret['cmd'] == "00":  # PROBE
            self.sendAck(i)
        elif ret['cmd'] == "02":  # Status?
            self.setStatus(ret['args'].encode("hex"))
            self.sendAck(i)
        elif ret['cmd'] == "08":  # Invert an entire line
            self.invertLine( ord(ret['args'][:1]) )
            self.sendAck(i)
        elif ret['cmd'] == "10":  # Invert just some chars on a line
            self.invertChars( ord(ret['args'][:1]), ord(ret['args'][1:2]), ord(ret['args'][2:3]) )
            self.sendAck(i)
        else:
            print "unk: cmd=" + ret['cmd'] + " args=" + ret['args'].encode("hex")
            self.sendAck(i)


def log(*args):
    """Set the last log message"""
    global last_log
    message = "%-16s: " % args[0]
    for arg in args[1:]:
        message += arg.__str__() + " "
    last_log =  message + "\n"




class Interface(object):
    """ Aqualink serial interface """


    def __init__(self, theName):
        """Initialization.
        Open the serial port and find the start of a message."""
        self.name = theName
        if debugData:
            log(self.name, "opening RS485 port", RS485Device)
        self._open()
        self.msg = "\x00\x00"
        self.debugRawMsg = ""
        # skip bytes until synchronized with the start of a message
        while (self.msg[-1] != STX) or (self.msg[-2] != DLE):
            self.msg += self.port.read(1)
            if debugRaw:
                self.debugRaw(self.msg[-1])
        self.msg = self.msg[-2:]
        if debugData:
            log(self.name, "synchronized")
        # start up the read thread
        log(self.name, "ready")


    def _open(self):
        """Try and connect to the serial port, if it exists.  If not, then
        add a small delay to avoid CPU hogging"""
        try:
            if not os.path.exists(RS485Device):
                time.sleep(1)
            self.port = serial.Serial(RS485Device, baudrate=9600, 
                                  bytesize=serial.SEVENBITS, 
                                  parity=serial.PARITY_NONE, 
                                  stopbits=serial.STOPBITS_ONE,
                                  timeout=0.1)
        except:
            self.port = None
         
        
    def readMsg(self):
        """ Read the next valid message from the serial port.
        Parses and returns the destination address, command, and arguments as a 
        tuple."""
        if (self.port == None):
            self._open()  # Try and re-open port
        if (self.port == None):  # We failed, return garbage
            return {'dest':"ff", 'cmd':"ff", 'args':""}


        while True:                                         
            dleFound = False
            # read what is probably the DLE STX
            try:
                self.msg += self.port.read(2)
            except serial.SerialException:
                self.msg += chr(0) + chr(0)
                self._open()
            if debugRaw: 
                self.debugRaw(self.msg[-2])
                self.debugRaw(self.msg[-1])
            while len(self.msg) < 2:
                self.msg += chr(0)
            while (self.msg[-1] != ETX) or (not dleFound) or (len(self.msg)>128):  
                # read until DLE ETX
                try:
                    if (self.port == None):
                        return {'dest':"ff", 'cmd':"ff", 'args':""}
                    self.msg += self.port.read(1)
                except serial.SerialException:
                    self.msg += chr(0)
                    self._open()
                if debugRaw:
                    self.debugRaw(self.msg[-1])
                if self.msg[-1] == DLE:                     
                    # \x10 read, tentatively is a DLE
                    dleFound = True
                if (self.msg[-2] == DLE) and (self.msg[-1] == NUL) and dleFound: 
                    # skip a NUL following a DLE
                    self.msg = self.msg[:-1]
                    # it wasn't a DLE after all
                    dleFound = False                        
            # skip any NULs between messages
            self.msg = self.msg.lstrip('\x00')
            # parse the elements of the message              
            dlestx = self.msg[0:2]
            dest = self.msg[2:3]
            cmd = self.msg[3:4]
            args = self.msg[4:-3]
            ascii_args = filter(lambda x: x in string.printable, args)
            checksum = self.msg[-3:-2]
            dleetx = self.msg[-2:]
            if debugData:
                debugMsg = dlestx.encode("hex")+" "+dest.encode("hex")+" "+\
                           cmd.encode("hex")+" "+args.encode("hex")+" \""+ascii_args+"\" " +\
                           checksum.encode("hex")+" "+dleetx.encode("hex")
            self.msg = ""
            # stop reading if a message with a valid checksum is read
            if self.checksum(dlestx+dest+cmd+args) == checksum:
                if debugData:
                    log(self.name, "-->", debugMsg)
                if args == None:
                    args = ""
                return {'dest':dest.encode("hex"), 'cmd':cmd.encode("hex"), 'args':args}
            else:
                if debugData:
                    log(self.name, "-->", debugMsg, "*** bad checksum ***")


    def sendMsg(self, (dest, cmd, args)):
        """ Send a message.
        The destination address, command, and arguments are specified as a tuple."""
        msg = DLE + STX + dest + cmd + args
        msg = msg + self.checksum(msg) + DLE + ETX
        for i in range(2, len(msg) - 2):                       
            # if a byte in the message has the value \x10 insert a NUL after it
            if msg[i] == DLE:
                msg = msg[0:i+1]+NUL+msg[i+1:]
        if debugData:
            log(self.name, "<--", msg[0:2].encode("hex"), 
                msg[2:3].encode("hex"), msg[3:4].encode("hex"), 
                msg[4:-3].encode("hex"), msg[-3:-2].encode("hex"), 
                msg[-2:].encode("hex"))
        n = self.port.write(msg)


    def checksum(self, msg):
        """ Compute the checksum of a string of bytes."""                
        return struct.pack("!B", reduce(lambda x, y:x+y, map(ord, msg)) % 256)


    def debugRaw(self, byte):
        """ Debug raw serial data."""
        self.debugRawMsg += byte
        if ((len(self.debugRawMsg) == 48) or (byte==ETX)):
            log(self.name, self.debugRawMsg.encode("hex"))
            self.debugRawMsg = ""




def main():
    """Start the listener for a screen and spa, run webserver."""
    print "Creating screen emulator..."
    screen = Screen()
    print "Creating spa emulator..."
    spa = Spa()


    print "Creating RS485 port..."
    i = Interface("RS485")
    print "Creating web server..."
    server = threading.Thread(target=startServer, args=(screen, spa))
    server.start()


    print "Main loop begins..."
    while True:
        ret = i.readMsg()
#        print "ATTN: "+ret['dest'];
        if ret['dest'] == ID:
            screen.processMessage(ret, i)
        elif ret['dest'] == SPAID:
            spa.processMessage(ret, i)




if __name__ == "__main__":
    main()



Line 469 reads: "
self.dirty = 1"
I searched and could not find "ACK = "8b" anywhere

Then I downloaded aquaweb.py from
https://raw.githubusercontent.com/earlephilhower/aquaweb/master/aquaweb.py again
and of course I found "ACK = "8b" on line 469, changed it to "0B", restarted aquaweb and this is what I got:
Code:
[email protected]:/ $ sudo python /root/aquaweb/aquaweb.py                                Creating RS485 port...Attempting to auto-detect emulation settings, wait 15 seconds...
...Detected old-style Aqualink pad.
...Detected SpaLink controller.
...Detected new-style Aqualink PDA.
Detection completed...
Creating PDA emulator...
Creating spa emulator...
Creating web server...
Main loop begins...
Started httpserver on port 80
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
0030464600000000000000000000000f00
^CKeyboard exit requested.


Now the web address for pool controller looks like this:

oiil_contr_panel_1.jpg

I am definitely doing something wrong, but can't figure out what :(
 

efp3

Active member
Jan 19, 2015
32
Orange, CA
Looks like the autodetect code is going bonkers on your setup. Right now it's detecting a new-style wireless one (w/temp display line) and that's why you're seeing nothing on the web UI...your head unit isn't actually talking to where we're listening.

Simple fix, just kill it and run "./aqualink.py --aqualink" to only enable the standard controller.
 

Enjoying this content?

Support TFP with a donation.

Give Support

ab.origine

Active member
May 10, 2017
28
Paradiso
killed aquaweb.py with "sudo pkill -f aquaweb"

then started "aquaweb.py --aqualink" as you suggested and this is the output I am getting:
Code:
[email protected]:/ $ sudo python root/aquaweb/aquaweb.py --aqualink
Creating RS485 port...
Creating screen emulator...
Creating web server...
Main loop begins...
Started httpserver on port 80
----------------------------------------
Exception happened during processing of request from ('192.168.3.41', 58599)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 654, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 713, in finish
    self.wfile.close()
  File "/usr/lib/python2.7/socket.py", line 283, in close
    self.flush()
  File "/usr/lib/python2.7/socket.py", line 307, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
----------------------------------------
Exception happened during processing of request from ('192.168.3.41', 58600)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 654, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 713, in finish
    self.wfile.close()
  File "/usr/lib/python2.7/socket.py", line 283, in close
    self.flush()
  File "/usr/lib/python2.7/socket.py", line 307, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
----------------------------------------
Exception happened during processing of request from ('192.168.3.41', 58832)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 654, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 713, in finish
    self.wfile.close()
  File "/usr/lib/python2.7/socket.py", line 283, in close
    self.flush()
  File "/usr/lib/python2.7/socket.py", line 307, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
----------------------------------------
Exception happened during processing of request from ('192.168.3.41', 58833)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 654, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 713, in finish
    self.wfile.close()
  File "/usr/lib/python2.7/socket.py", line 283, in close
    self.flush()
  File "/usr/lib/python2.7/socket.py", line 307, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------
192.168.3.41 - - [05/Dec/2017 18:38:34] Request timed out: timeout('timed out',)

In terms of the webserver, it got back to the original state but is still unresponsive to buttons (although I changed line 469 to "0b"):
oiil_contr_panel_2.jpg

Then I started aquadisplay.py and this is the output:

Code:
[email protected]:/ $ sudo python root/aquaweb/aquadisplay.pyRS485           : opening RS485 port /dev/ttyUSB0
RS485           : synchronized
RS485           : ready
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5a 00  6c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5b 00  6d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 60 00  72 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 61 00  73 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 62 00  74 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 63 00  75 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 08 00  1a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 09 00  1b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0a 00  1c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0b 00  1d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 41 00  53 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 42 00  54 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 43 00  55 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 10 00  22 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 11 00  23 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 12 00  24 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 13 00  25 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 18 00  2a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 19 00  2b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1a 00  2c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1b 00  2d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 20 00  32 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 21 00  33 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 22 00  34 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 23 00  35 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 28 00  3a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 29 00  3b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2a 00  3c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2b 00  3d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 30 00  42 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 31 00  43 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 32 00  44 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 33 00  45 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 38 00  4a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 39 00  4b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3a 00  4c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3b 00  4d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 48 00  5a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 49 00  5b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4a 00  5c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4b 00  5d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 50 00  62 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 51 00  63 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 52 00  64 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 53 00  65 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 58 00  6a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 59 00  6b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5a 00  6c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5b 00  6d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 60 00  72 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 61 00  73 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 62 00  74 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 63 00  75 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 08 00  1a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 09 00  1b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0a 00  1c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0b 00  1d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 41 00  53 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 42 00  54 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 43 00  55 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 10 00  22 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 11 00  23 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 12 00  24 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 13 00  25 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 18 00  2a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 19 00  2b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1a 00  2c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1b 00  2d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 20 00  32 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 21 00  33 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 22 00  34 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 23 00  35 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 28 00  3a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 29 00  3b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2a 00  3c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2b 00  3d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 30 00  42 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 31 00  43 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 32 00  44 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 33 00  45 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 38 00  4a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 39 00  4b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3a 00  4c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3b 00  4d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 48 00  5a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 49 00  5b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4a 00  5c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4b 00  5d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 50 00  62 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 51 00  63 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 52 00  64 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 53 00  65 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 58 00  6a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 59 00  6b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5a 00  6c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5b 00  6d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 60 00  72 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 61 00  73 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 62 00  74 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b03 a1 1003
RS485           : --> 1002 63 00  75 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b03 a1 1003
RS485           : --> 1002 08 00  1a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 09 00  1b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0a 00  1c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0b 00  1d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 41 00  53 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 42 00  54 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 43 00  55 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b02 a0 1003
RS485           : --> 1002 10 00  22 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 11 00  23 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 12 00  24 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 13 00  25 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 18 00  2a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 19 00  2b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1a 00  2c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b01 9f 1003
RS485           : --> 1002 1b 00  2d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 20 00  32 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 21 00  33 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 22 00  34 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 23 00  35 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 28 00  3a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 29 00  3b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b04 a2 1003
RS485           : --> 1002 40 09 00c5 20 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 0146494c5445522050554d5020204f4646 9a 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 02535041202020202020202020204f4646 57 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 03504f4f4c2048454154202020204f4646 30 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 04535041204845415420202020204f4646 fb 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 05424f4f535445522050554d50204f4646 d6 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 06464f554e5441494e20202020204f4646 3b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 07415558332020202020202020204f4646 79 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 08415558342020202020202020204f4646 7b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 09415558352020202020202020204f4646 7d 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 0a504f4f4c204c494748542020204f4646 6d 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 04 0b414c4c204f4646202020202020202020 55 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 40 08 010000 5b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2a 00  3c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2b 00  3d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 30 00  42 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 31 00  43 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 32 00  44 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 33 00  45 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 38 00  4a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 39 00  4b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3a 00  4c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b05 a3 1003
RS485           : --> 1002 40 08 020000 5c 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3b 00  4d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 48 00  5a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 49 00  5b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4a 00  5c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4b 00  5d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 50 00  62 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 51 00  63 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 52 00  64 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 53 00  65 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b06 a4 1003
RS485           : --> 1002 40 08 010000 5b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 58 00  6a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 59 00  6b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5a 00  6c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5b 00  6d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 60 00  72 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 61 00  73 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 62 00  74 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 63 00  75 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 08 00  1a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 09 00  1b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0a 00  1c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0b 00  1d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 41 00  53 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 42 00  54 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 43 00  55 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 10 00  22 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 11 00  23 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 12 00  24 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 13 00  25 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 18 00  2a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 19 00  2b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1a 00  2c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1b 00  2d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 20 00  32 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 21 00  33 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 22 00  34 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 23 00  35 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 28 00  3a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 29 00  3b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2a 00  3c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2b 00  3d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 30 00  42 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 31 00  43 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 32 00  44 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 33 00  45 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 38 00  4a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 39 00  4b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3a 00  4c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3b 00  4d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 48 00  5a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 49 00  5b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4a 00  5c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4b 00  5d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 50 00  62 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 51 00  63 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 52 00  64 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 53 00  65 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 58 00  6a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 59 00  6b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5a 00  6c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5b 00  6d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 60 00  72 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 61 00  73 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 62 00  74 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 63 00  75 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 08 00  1a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 09 00  1b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0a 00  1c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0b 00  1d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 41 00  53 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 42 00  54 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 43 00  55 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 10 00  22 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 11 00  23 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 12 00  24 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 13 00  25 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 18 00  2a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 19 00  2b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1a 00  2c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1b 00  2d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 20 00  32 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 21 00  33 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 22 00  34 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 23 00  35 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 28 00  3a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 29 00  3b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2a 00  3c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2b 00  3d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 30 00  42 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 31 00  43 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 32 00  44 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 33 00  45 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 38 00  4a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 39 00  4b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3a 00  4c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3b 00  4d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 48 00  5a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 49 00  5b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4a 00  5c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 4b 00  5d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 50 00  62 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 51 00  63 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 52 00  64 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 53 00  65 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 58 00  6a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 59 00  6b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5a 00  6c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 5b 00  6d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 60 00  72 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 61 00  73 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 62 00  74 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 63 00  75 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 08 00  1a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 09 00  1b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0a 00  1c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 0b 00  1d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 41 00  53 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 42 00  54 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 43 00  55 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 10 00  22 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 11 00  23 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 12 00  24 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 13 00  25 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 18 00  2a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 19 00  2b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1a 00  2c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 1b 00  2d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 20 00  32 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 21 00  33 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 22 00  34 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 23 00  35 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 28 00  3a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 29 00  3b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2a 00  3c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 2b 00  3d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 30 00  42 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 31 00  43 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 32 00  44 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 33 00  45 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 38 00  4a 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 39 00  4b 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3a 00  4c 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 3b 00  4d 1003
RS485           : --> 1002 40 02 00c5560cf0 6b 1003
RS485           : --> 1002 00 01 8b00 9e 1003
RS485           : --> 1002 48 00  5a 1003
^CTraceback (most recent call last):
  File "root/aquaweb/aquadisplay.py", line 134, in <module>
    i. readMsg()
  File "root/aquaweb/aquadisplay.py", line 60, in readMsg
    self.msg += self.port.read(2)
  File "/usr/lib/python2.7/dist-packages/serial/serialposix.py", line 472, in read
    ready, _, _ = select.select([self.fd, self.pipe_abort_read_r], [], [], timeout.time_left())
KeyboardInterrupt

Thanks!
 

efp3

Active member
Jan 19, 2015
32
Orange, CA
The errors you show are related to network ports. A full reboot or waiting a few mins after the kill should fix them. Did you kill the aquaweb.py before running aquadisplay? It shouldn't be able to open the USB port if the app is running.

And I'm still seeing the "8b" in the ACKs in your trace. Are you sure you saved and were running the same file?

...snip...
RS485 : --> 1002 40 02 00c5560cf0 6b 1003
RS485 : --> 1002 00 01 8b04 a2 1003 <- sending key 04
RS485 : --> 1002 40 09 00c5 20 1003
RS485 : --> 1002 00 01 8b00 9e 1003
RS485 : --> 1002 40 04 0146494c5445522050554d5020204f4646 9a 1003
 

ab.origine

Active member
May 10, 2017
28
Paradiso
I killed aquaweb before running aquadisplay, since it gave me an error when I tried to run them in parallel.
Rebooted,
checked line 469 in aquaweb and it's definitely "0b"

Code:
nextAck = "00" ID = "40"
ACK = "0b"


def __init__(self):

Is there anything else I might need to change in aqauweb? (searched for "8b" and could not find it anywhere else)

Rebooted again, killed aquaweb, waited for couple of minutes and then started aquaweb --aqualink
(definitely running the same file where I changed "8b" to "0b")

webserver screen updates itself with the time and temperature changes and if I enter menu or make any change on the remote, but still does not respond to keys from the browser (tried different browsers).

output from aquaqweb.py:
Code:
[email protected]:/ $ sudo python root/aquaweb/aquaweb.py --aqualinkCreating RS485 port...
Creating screen emulator...
Creating web server...
Main loop begins...
Started httpserver on port 80
----------------------------------------
Exception happened during processing of request from ('192.168.3.41', 52971)
Traceback (most recent call last):
  File "/usr/lib/python2.7/SocketServer.py", line 290, in _handle_request_noblock
    self.process_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 318, in process_request
    self.finish_request(request, client_address)
  File "/usr/lib/python2.7/SocketServer.py", line 331, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "/usr/lib/python2.7/SocketServer.py", line 654, in __init__
    self.finish()
  File "/usr/lib/python2.7/SocketServer.py", line 713, in finish
    self.wfile.close()
  File "/usr/lib/python2.7/socket.py", line 283, in close
    self.flush()
  File "/usr/lib/python2.7/socket.py", line 307, in flush
    self._sock.sendall(view[write_offset:write_offset+buffer_size])
error: [Errno 32] Broken pipe
----------------------------------------

:cry: :cry: :cry:
 

efp3

Active member
Jan 19, 2015
32
Orange, CA
Very strange. I'm sure we can get this, it's not rocket science. I'll not really have time to look in more detail and maybe put in a debug mode in the app until this weekend, but I will follow up...
 

efp3

Active member
Jan 19, 2015
32
Orange, CA
So I just remembered that yours was hardwired and therefore always responding to the head unit. It could be that the main control is always responding before your Rpi can do so.

Just above where you changed the ACK=xxx line, can you change the ID= line to "41" not "40" and give it a quick try?
 

ab.origine

Active member
May 10, 2017
28
Paradiso
Great, it works now!
At some point the yellow line would not move and "up", "down", "page up", "page down" and "back" buttons seemed to respond strangely, like "page up" would do "page down" and so on, but it corrected by itself after couple of minutes.
Now everything seems to work!
No error messages either when I start "aquaweb.py -aqualink".
I will change it to start with "aquaweb.py -aqualink" instead of just "aquaweb.py".

I can not thank you enough for this!

Fantastic job, THANKS!
 

efp3

Active member
Jan 19, 2015
32
Orange, CA
Happy to hear it! What changed did you end up with? Just the ACK code? I'd like to include an option or info in the README for the next person w/a hardwired connection.
 

ab.origine

Active member
May 10, 2017
28
Paradiso
So, I just changed line 469 > ACK = "8b" to > ACK = "0b" and ID= "40" to "41" as you suggested and all works fine now!
Thanks again Earle for all your help!
 

Mutley

Member
Jun 6, 2016
22
Houston tx
Depending on how sophisticated you want to get with this, I would suggest moving away from python and using something that supports complex threading like C. And highly modifying the Raspberry OS due to it's inability to recover from power failuers / constant CF card curroption.
I did this about a year ago, I have my Aqualink RS controller connected to a Raspberry PI, the PI serves up a WEB interface, MQTT client, REST endpoint & HomeKit client. So, I can support plane web browsers, any home automation smart hub (Alexa, Samsung Smart Things, Apple Homekit), and it's all realtime, even the web interface since I use websockets. I can obviously do the basic on/off of each button, but also keep the date time accurate o the controller, set the freeze points and heater set points, monitor air & water temp etc. The only thing I haven't coded is setting RS controller programs (i.e. turn pool pump on at 10am). But since I have REST & MQTT interfaces I use a automation / smart hub to set & run the programs rather than the RS controller.

It wasn't too much work to reverse engineer all the Aqualink RS485 protocols, but since the protocol that Aqualink uses is about as archaic as I've ever encountered, timings are key to making it all work, which is why I made the threading statement. I've probably got ~400 hours in the development, most of which is getting all the timings to work perfectly.

If you want to get more than just a basic button press, you will need one thread to monitor status & LED messages over the 485 interface, and another to send commands, then set the two to notify each other at appropriate times during the programming. You basically have to mimic all the keypresses on the keypad and monitor the status messages to press the correct key at the appropriate time. Then, you will also need another thread (or set) to serve whatever kind of interface you want to deliver.

On the PI, it's really not designed for embedded devices, so you'll need to overcome the CF card corruption. That's not too difficult, but you will need to configure it for a read only root OS.

My pool is equipment is in service mode at the moment due to just being renovated, so I can't post any great screenshots. But here are a few screen shots from my phone, one of the web interface, and Apple HomeKit.

IMG_0098.jpg

IMG_0097.jpg
 

Enjoying this content?

Support TFP with a donation.

Give Support
Thread Status
Hello , There was no answer in this thread for more than 60 days.
It can take a long time to get an up-to-date response or contact with relevant users.