JoyOnWay Spa Control

On my controleler it is written P20B29-2032 V183.
The W610 is indeed connected to the RS485 bus, and I'm still getting the same initialization failure error. I have removed my personnal scipt and my MQTT intergation but it is the same.

I did take a screenshot as requested when I change the temperature setpoint, but I don't know how to send it to you the file
Yannick.

Hi Yannick,

Thanks for the controller reference — P20B29-2032 V183 is a different model
from my P23B32, which is almost certainly why my integration shows the
initialization failure (the byte structure is different, even if the
RS485 framing is likely similar).

Good news: I just published a small in-browser tool that auto-detects the
frame format of any Joyonway/Mesda/Balboa RS485 capture. It runs entirely
in your browser, no install, no data sent anywhere.

Here is how we can figure out your P20B29 in a few minutes:

  1. Make sure no integration or script is currently connected to your W610
    (only one TCP client at a time can talk to it, otherwise captures fail)

  2. From any Linux machine on your network, run:
    timeout 60 nc YOUR_W610_IP 8899 | xxd > p20b29_capture.txt
    Change the spa state during the capture (setpoint, pump, light, etc.)
    so the diff analysis has something to work with.

  3. Open the tool, drop the capture file in the upload zone, leave
    Auto-detect mode active.

  4. If Auto-detect finds 0 frames, switch to "Scan all delimiters" mode
    (the purple pill). The tool will test 9 common delimiters and tell
    you which one your P20B29 uses.

  5. Post the result here (a screenshot of the stats line and the top
    commands list is enough). From there we will know if your P20B29
    speaks the same dialect as P23B32 or if it is a separate format.

For the screenshot you took during the setpoint change, you can simply
drag and drop the image file directly into a reply box on this forum —
no upload service needed.

Christophe

Hello,
Thanks for your help, you will see below the capture

Yannickt26,
I can see that the frame structure is probably standard.
Two devices are responding; I assume these are the display panel and the Wi-Fi module. This could be very useful in the future.
Please paste the contents of the section of the capture.txt file where you’re capturing the frames, preferably as plain text.
If you have HA, I’d recommend running my script and sharing a screenshot whilst it’s running. I’ve described how to do this earlier.

Setting the temperature isn’t necessary to utilise surplus energy from the solar panels; this can be done using HA automations or Node-RED.

I can see that someone has been working hard on a version for the P25B85; it hasn’t been officially announced, but it’s available as far as I can tell. Hats off to them, because it looks like a lot of work and it’s been done very professionally. My P25B85 has different control panels for adjusting the temperature settings, so I’d advise caution.

Hello,

I've only been using Home Assistant for a very short time.
I'm French, and there's an equivalent software called Jeedom that I find much more user-friendly for managing my house.
Home Assistant allows for the Matter over threat devices, which is why I use it.
It also allows me to write the script to manage my spa.
I'm really trying to be able to send two temperature commands, for example, one at 10 degrees to stop it and one at 38 to restart it, but I can't seem to clone these commands at the moment. Here's the complete file extract.

[20:26:32.047] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:32.087] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:32.137] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:32.187] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:32.238] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:32.287] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:32.338] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:32.407] 1a ff 01 3c d2 b4 ff 08 01 5d 04 d4 00 6f 20 00 63 00 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 00 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 1f 03 00 df 4e 83 aa 1d
[20:26:32.447] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:32.487] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:32.537] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:32.587] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:32.647] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:32.687] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:32.737] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:32.787] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:32.838] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:32.887] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:32.947] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:33.008] 1a ff 01 3c d2 b4 ff 08 01 5d 04 d4 00 6f 20 00 63 00 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 00 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 1f 03 00 df 4e 83 aa 1d
[20:26:33.048] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:33.097] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:33.147] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:33.198] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:33.247] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:33.297] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:33.347] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:33.397] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:33.447] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:33.498] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:33.547] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:33.607] 1a ff 01 3c d2 b4 ff 08 01 5d 04 d4 00 6f 20 00 63 00 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 00 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 20 03 00 c2 de f6 27 1d
[20:26:33.648] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:33.697] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:33.747] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:33.797] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:33.847] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 00 00 00 00 02 04 00 00 00 1b 13 f7 26 23 1d
[20:26:33.898] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:33.947] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:33.997] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:34.047] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:34.097] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:34.147] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:34.207] 1a ff 01 3c d2 b4 ff 08 01 5d 04 d4 00 6f 20 00 63 00 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 00 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 21 03 00 1b 15 1f ef f5 1d
[20:26:34.247] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:34.298] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:34.347] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:34.397] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:34.447] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 06 04 00 00 02 04 00 00 00 8b 3e e4 13 1d
[20:26:34.498] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:34.547] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:34.597] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:34.648] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:34.698] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:34.747] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:34.808] 1a ff 01 3c d2 b4 ff 08 01 5d 04 d4 04 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 04 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 21 03 00 c6 7d 10 a4 1d
[20:26:34.847] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:34.898] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:34.947] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:34.998] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:35.048] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:35.098] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:35.147] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:35.198] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:35.247] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:35.298] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:35.348] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:35.408] 1a ff 01 3c d2 b4 ff 08 01 5d 04 d4 04 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 04 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 22 03 00 15 22 fb d6 1d
[20:26:35.447] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:35.498] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:35.547] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:35.598] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:35.648] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:35.698] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:35.748] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:35.798] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:35.848] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:35.898] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:35.947] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:36.008] 1a ff 01 3c d2 b4 ff 08 01 5f 04 d4 04 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 04 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 22 03 00 e5 14 25 3a 1d
[20:26:36.047] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:36.097] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:36.148] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:36.198] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:36.248] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:36.297] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:36.348] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:36.398] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:36.448] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:36.497] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:36.548] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:36.608] 1a ff 01 3c d2 b4 ff 08 01 60 04 d4 04 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 04 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 23 03 00 70 5d 10 98 1d
[20:26:36.647] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:36.697] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:36.747] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:36.798] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:36.848] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:36.898] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:36.948] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:36.998] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:37.048] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:37.098] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:37.148] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:37.218] 1a ff 01 3c d2 b4 ff 08 01 61 04 d4 04 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 04 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 24 03 00 72 38 b0 d9 1d
[20:26:37.248] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:37.298] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:37.348] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:37.398] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:37.448] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:37.498] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:37.548] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:37.598] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:37.648] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:37.698] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:37.748] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:37.818] 1a ff 01 3c d2 b4 ff 08 01 62 04 d4 04 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 04 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 24 03 00 fa 15 01 43 1d
[20:26:37.858] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:37.898] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:37.948] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:37.998] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:38.058] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 06 00 00 00 02 04 00 00 00 08 bd 10 33 1d
[20:26:38.098] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:38.148] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:38.198] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:38.248] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:38.298] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:38.348] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:38.418] 1a ff 01 3c d2 b4 ff 08 01 62 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 25 03 00 f5 54 f4 ac 1d
[20:26:38.458] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d

[20:26:38.498] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:38.548] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:38.598] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:38.648] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:38.698] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:38.748] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:38.798] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:38.848] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:38.898] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:38.948] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:39.018] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 25 03 00 8d 4f 9b da 1d
[20:26:39.058] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:39.098] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:39.148] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:39.198] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:39.248] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:39.298] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:39.348] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:39.398] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:39.448] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:39.498] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:39.548] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:39.618] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 26 03 00 5e 10 70 a8 1d
[20:26:39.658] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:39.698] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:39.748] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:39.798] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:39.858] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 18 10 00 00 02 04 00 00 00 40 d1 2d e0 1d
[20:26:39.898] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:39.948] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:39.998] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:40.048] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:40.098] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:40.148] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:40.218] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 10 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 10 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 27 03 00 ce d2 db 8d 1d
[20:26:40.258] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:40.298] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:40.348] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:40.398] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:40.458] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:40.498] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:40.548] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:40.598] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:40.648] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:40.698] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:40.748] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:40.818] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 10 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 10 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 27 03 00 ce d2 db 8d 1d
[20:26:40.858] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:40.898] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:40.948] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:40.998] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:41.058] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:41.098] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:41.148] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:41.198] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:41.248] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:41.298] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:41.348] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:41.418] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 10 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 10 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 28 03 00 e6 ef 5c 30 1d
[20:26:41.458] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:41.498] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:41.548] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:41.598] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:41.658] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:41.698] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:41.748] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:41.798] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:41.848] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:41.898] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:41.948] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:42.018] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 10 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 10 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 28 03 00 e6 ef 5c 30 1d
[20:26:42.058] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:42.098] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:42.148] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:42.198] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:42.258] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:42.298] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:42.348] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:42.398] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:42.448] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:42.498] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:42.548] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:42.618] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 10 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 10 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 29 03 00 3a 2e 45 e2 1d
[20:26:42.658] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:42.698] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:42.748] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:42.798] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:42.858] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 00 00 00 00 02 04 00 00 00 1b 13 f7 26 23 1d
[20:26:42.898] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:42.948] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:42.998] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:43.048] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:43.098] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:43.148] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:43.218] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 10 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 10 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2a 03 00 e9 71 ae 90 1d
[20:26:43.258] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:43.298] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:43.348] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:43.398] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:43.458] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 18 00 00 00 02 04 00 00 00 4c df ff 63 1d
[20:26:43.498] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:43.548] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:43.598] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:43.648] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:43.698] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:43.748] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:43.818] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2a 03 00 a5 72 1b 13 67 1d
[20:26:43.858] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:43.898] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:43.948] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:43.998] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:44.058] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:44.098] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:44.158] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:44.208] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:44.258] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:44.308] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:44.358] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:44.418] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2b 03 00 79 b3 05 b5 1d
[20:26:44.459] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:44.508] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:44.558] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:44.608] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:44.658] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:44.708] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:44.758] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:44.808] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:44.858] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:44.908] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:44.958] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:45.018] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2b 03 00 79 b3 05 b5 1d
[20:26:45.058] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:45.108] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:45.158] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:45.208] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:45.258] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:45.308] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:45.358] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:45.408] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:45.458] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:45.508] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:45.558] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:45.618] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2c 03 00 03 cd ca 82 1d
[20:26:45.658] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:45.708] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:45.758] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:45.808] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:45.858] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 00 00 04 04 02 04 00 00 00 0f 7f 1b 11 76 1d
[20:26:45.908] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:45.958] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:46.008] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:46.058] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:46.108] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:46.158] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:46.218] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 28 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 28 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2d 03 00 d1 34 90 46 1d
[20:26:46.258] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:46.308] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:46.358] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:46.408] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:46.458] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:46.508] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:46.558] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:46.608] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:46.658] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:46.708] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:46.758] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:46.818] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 28 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 28 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2d 03 00 d1 34 90 46 1d
[20:26:46.858] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:46.908] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:46.958] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:47.008] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:47.058] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:47.108] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:47.158] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:47.208] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:47.258] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:47.308] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:47.358] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:47.418] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 28 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 28 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2e 03 00 02 6b 7b 34 1d
[20:26:47.458] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:47.508] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:47.558] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:47.608] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:47.658] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:47.708] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:47.758] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:47.808] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:47.858] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:47.908] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:47.958] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:48.028] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 28 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 28 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2e 03 00 02 6b 7b 34 1d
[20:26:48.058] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:48.108] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:48.158] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:48.208] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:48.258] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:48.308] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:48.358] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:48.408] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:48.458] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:48.508] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:48.558] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:48.628] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 28 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 28 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 2f 03 00 de aa 62 e6 1d
[20:26:48.658] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:48.708] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:48.758] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:48.808] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:48.868] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 00 00 00 00 02 04 00 00 00 1b 13 f7 26 23 1d
[20:26:48.908] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:48.958] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:49.008] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:49.058] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:49.108] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:49.158] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:49.228] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 28 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 28 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 30 03 00 e5 0c b4 4b 1d
[20:26:49.258] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:49.308] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:49.358] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:49.408] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:49.468] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 10 3c a1 00 a1 00 00 04 00 02 04 00 00 00 fc c2 86 4f 1d
[20:26:49.508] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:49.558] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:49.608] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:49.658] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:49.708] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:49.758] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:49.828] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 30 03 00 eb 34 f7 5d 1d
[20:26:49.868] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d
[20:26:49.908] 1a 21 01 0c c3 a5 00 00 00 00 00 00 00 77 80 0c 13 1d
[20:26:49.958] 1a 22 01 0c c3 a5 00 00 00 00 00 00 00 6a 63 cc 01 1d
[20:26:50.008] 1a 23 01 0c c3 a5 00 00 00 00 00 00 00 0c c9 cc f3 1d
[20:26:50.058] 1a 30 01 0c c3 a5 00 00 00 00 00 00 00 cc 31 49 f9 1d 1a 01 30 08 3c aa 00 02 13 8c e4 26 8b 1d
[20:26:50.108] 1a 10 01 0c 4c 2e 55 00 00 00 00 00 00 bd 5a a0 91 1d
[20:26:50.158] 1a 11 01 0c 4c 2e 55 00 00 00 00 00 00 db f0 a0 63 1d
[20:26:50.208] 1a 12 01 0c 4c 2e 55 00 00 00 00 00 00 c6 13 60 71 1d
[20:26:50.258] 1a 13 01 0c 4c 2e 55 00 00 00 00 00 00 a0 b9 60 83 1d
[20:26:50.308] 1a 50 01 0c 4c 2e 55 00 00 00 00 00 00 2c 01 00 00 1d
[20:26:50.358] 1a 40 01 0c 4c 2e 55 00 00 00 00 00 00 1b 13 01 00 00 1d
[20:26:50.428] 1a ff 01 3c d2 b4 ff 08 01 63 04 d4 00 6f 20 00 63 80 02 49 1b 15 11 00 0c 1b 15 17 1b 15 00 20 0c 1b 15 17 1b 15 0c 1b 15 17 1b 15 00 00 fe 4f 00 00 00 00 00 00 00 00 00 00 00 00 1b 11 05 14 14 1b 11 31 03 00 37 f5 ee 8f 1d
[20:26:50.468] 1a 20 01 0c c3 a5 00 00 00 00 00 00 00 11 2a 0c e1 1d 1a 01 20 08 3c aa 10 00 00 6b 73 e4 b9 1d

Hello,
when i put this command (1a 01 30 10 3c a1 00 a1 00 00 80 80 02 04 00 64 00 96 20 61 e1 1d) in a script, I can now change the setpoint to 38° and it is the same with this command ( 1a 01 30 10 3c a1 00 a1 00 00 80 80 02 04 00 32 00 34 22 13 8e 1d) for setting the value to 10°.
That's what I wanted, but your integration is much nicer; I hope it will be compatible with my spa someday.

Yannickt26
I haven’t been able to decipher one frame; I don’t know what you were running during the capture, but it appears twice.

Your data is 100% consistent with what christopheknap presented in his posts, including the CRC sums. Your drivers are different, but everything else matches.

Of course, to apply this, you need to use it in the format sent by the panel:
[20:26:33.847] 1a 01 30 10 3c a1 00 a1 00 00 00 00 02 04 00 00 00 1b 13 f7 26 23 1d - unknown
[20:26:34.447] 1a 01 30 10 3c a1 00 a1 06 04 00 00 02 04 00 00 00 8b 3e e4 13 1d - left pump ON + CRC
[20:26:38.058] 1a 01 30 10 3c a1 00 a1 06 00 00 00 02 04 00 00 00 08 bd 10 33 1d - left pump OFF
[20:26:39.858] 1a 01 30 10 3c a1 00 a1 18 10 00 00 02 04 00 00 00 40 d1 2d e0 1d - right pump ON + CRC
[20:26:43.458] 1a 01 30 10 3c a1 00 a1 18 00 00 00 02 04 00 00 00 4c df ff 63 1d - right pump OFF
[20:26:45.858] 1a 01 30 10 3c a1 00 a1 00 00 04 04 02 04 00 00 00 0f 7f 1b 11 76 1d - blower ON + CRC
[20:26:48.868] 1a 01 30 10 3c a1 00 a1 00 00 00 00 02 04 00 00 00 1b 13 f7 26 23 1d - unknown
[20:26:49.468] 1a 01 30 10 3c a1 00 a1 00 00 04 00 02 04 00 00 00 fc c2 86 4f 1d - blower OFF + CRC

I was wondering why you needed to change this temperature so much, and I remembered that christopheknap once wrote that he couldn’t manually switch the heating on or off, so your reason is probably similar.
Of course, I thought that would be silly; I didn’t want to believe it, so I checked the PB555 panel documentation and happened to find it in French.

I quote:

Thermostat manuel
Lorsque la fonction manuelle du thermostat est activée, une option de
température constante « » sera ajoutée à la barre de menus, permettant
à l'utilisateur d'activer manuellement le thermostat dans l'interface principale.

christopheknap

ozon, from the same manual:

Fonction de désinfection à l'ozone
La désinfection à l'ozone a un mode automatique et un mode manuel. Dans le menu
Set, amenez le curseur sur l'option "Ozone" souhaitée avec les touches “ ” et
“ ”, puis appuyez sur la touche " " pour régler la fonction de désinfection à
l'ozone sur mode automatique (Auto) et manuel (Manuel).
Le fonctionnement du mode automatique est décrit dans les règles de commande du
système de contrôle.
Lorsque le mode manuel est activé, une option " " de désinfection à l'ozone
est ajoutée à la barre de menus. L'utilisateur peut activer manuellement le générateur
d'ozone dans l'interface principale. Cette option disparaît lorsque le mode manuel est
désactivé.

The table didn't paste in:

christopheknap

You wrote earlier that escaping isn’t working properly for you. You should check your code; I’ve compared the data sent by Yannickt26, and it matches your and my protocol 100%. Of course, we have different configurations, but data such as temperature, setpoint temperature, date and time are always in the same place. The frames are always the same across all controllers, before escaping, of course. This is the only way to create a universal app for all SPAs in the future.

Hi @KDy, hi @Yannickt26, hi @Neuro,

First, an honest thank you. I went back through the entire thread carefully tonight, and I owe a clearer recognition of what each of you has contributed.

What I missed earlier and now correct

@KDy - your post #90 contains the complete unescape table and a full Python parser for the broadcast B4 frame. I had been working with a simpler unescape rule ("remove 0x1B, keep next byte") which is WRONG. Your table is the right one:

1B 11 -> 1A
1B 13 -> 1C
1B 14 -> 1D
1B 15 -> 1E
1B 0B -> 1B

This explains exactly what you meant in post #113 about my escaping not working properly. Re-decoding @Yannickt26 capture with your table gives coherent results: water temp 93F = 33.9C, setpoint 99F = 37.2C, all matching your parser logic. My apologies for not implementing this correctly earlier.

@Yannickt26 - your captures (post #109) and your working setpoint frames (post #110) are the breakthrough I had been missing for weeks. Confirmed byte 15 of the A1 command carries the setpoint in Fahrenheit (0x64=100F=38C, 0x32=50F=10C). Tested mathematically against your two frames, the formula byte_15 = round((celsius * 9/5) + 32) matches exactly.

@KDy your point about manual thermostat activation in the PB555 panel menu, with the manual quote in French, is critical operational knowledge. Without that prerequisite, no software can pilot the heater.

What is now established (factual, verified)

Three controllers share the EXACT same RS485 protocol:

All three use:

  • Delimiters 0x1A...0x1D
  • 38400 8N1 baudrate (confirmed by oscilloscope on my side, by your @KDy script reading on yours)
  • Pseudo-escape table as you defined it
  • A1 command frames are bit-for-bit identical for pumps, blower, light, setpoint
  • B4 broadcast structure identical, same byte positions after unescape

@Gaet78 your P69B133 uses a different protocol family (0x7E delimiters, 115200 baud, real CRC-8). I will keep my integration separate from yours - we cover complementary models.

What I will do, in order

  1. Replace my unescape function with your exact table @KDy
  2. Re-validate decoding on my own P23B32 captures with the corrected unescape
  3. Capture a setpoint change on my own PB555 to confirm @Yannickt26 frame works on P23B32 too
  4. Activate manual thermostat in my PB555 menu and test heater control
  5. Update the frame-analyzer to ship a single profile joyonway_1a1d_family.json covering P23B32 V2, P20B29 and P25B85
  6. Update the HA integration to:
    • Use the correct unescape
    • Add Climate platform with setpoint write
    • Add Sensor platform reading temp, setpoint, heating state, ozonator state
    • Document the manual thermostat prerequisite prominently
  7. Open the repo to public once these are tested on my own hardware
  8. Ship credits to all contributors in README and CHANGELOG

Open questions for you

@KDy - your parser checks heating state via byte 14 (0x50/0x54/0x40 transitions). Does your P25B85 ever show byte 14 = 0x20 like @Yannickt26 capture? I see 0x20 in many of @Yannickt26 frames, which is below your documented values, possibly meaning "thermostat manual not activated".

@Yannickt26 - when you sent your setpoint 38C frame, did your spa panel actually display 38C right after, or only the heater started cycling? I need to know if the panel display is updated by the controller or only by physical button presses.

@KDy - any chance you could share a B4 capture from your P25B85 with ozonator running? The 0xC1 value in byte 14 you mentioned, I want to add it to the integration as a sensor.

Thanks again to all of you. The previous version of my work attributed things too quickly and was not rigorous. This message is my way of resetting the record properly.

Christophe (KnapTheBuilder)

Hello,

I confirm that my thermostat is in automatic mode, and this doesn't prevent me from changing the setpoint.

When I recorded the tram setpoint change, I did so by modifying the setpoint from the phone app, not from the PB555.
What I think is that now when I send this tram, it's done like in the app, sent directly to the controller because the setpoint changes both on the app and on the PB555.
I don't need to wait as I read in your example; I just send the command 10 times to be sure it goes through, and the controller applies the change everywhere.
I hope this helps. Have a good day.

Hi everyone,

I've been following this thread for a while and finally have something to contribute. I'm building a Home Assistant integration for the P25B85 controller and wanted to share progress.

Disclaimer: I'm obviously using AI (mainly Claude Opus and GPT Codex) for the analysis and the implementation. This is what has been done so far:

My setup:

  • Home Deluxe White Marble outdoor whirlpool
  • Controller: Joyonway P25B85 (PCB P2325B0003 R05)
  • Touchpad: PB554 colour screen
  • Bridge: Elfin EW11 (RS-485 → WiFi, TCP server on port 8899)
  • One dual-speed pump (low = filtration, high = jets), blower, RGB LED, 2 kW heater

The integration is based on the excellent work by @KDy (pseudo-escape discovery, byte map, Python reading script) and @christopheknap (HACS integration structure, community captures, frame analyzer tool). Huge thanks to both of you — without your posts in this thread I wouldn't have gotten anywhere.

Repo (work in progress): GitHub - alexbde/ha-joyonway-p25b85: Home Assistant custom integration for Joyonway P25B85 spa via RS485 · GitHub

Everything is still under development and hasn't been released yet. Live testing at the spa is the next step.

What's working so far

Reading: temperature, setpoint, pump state, heater state (off/circulation/heating/disinfection), blower state, light state, spa clock — all parsed from the broadcast frames.

Writing: I've captured command frames for all available actions on the P25B85:

  • Light toggle
  • Pump OFF → Low → High → OFF (cycle)
  • Heater ON / OFF
  • Blower ON / OFF
  • Temperature setpoint changes (full range 10–40°C)
  • DateTime set
  • Filter schedule
  • Heat schedule

All captured frames are documented with full hex in the protocol reference (see below, I can only add 2 links as new member of this forum).

CRC-32 checksum cracked

The big news: I believe I managed to fully crack the CRC algorithm used on the P25B85 command frames. This means I can now generate valid frames dynamically for any command. No more "capture one frame per degree" limitation.

The algorithm turned out to be:

  • Standard CRC-32 (polynomial 0x04C11DB7 — same as Ethernet/zlib)
  • Non-reflected (MSB-first)
  • Init: 0x00000000, XorOut: 0x552D22C8
  • Trick: each 32-bit word of the 16-byte payload is byte-reversed before feeding into the CRC

That last point — the word byte-swap — is why standard CRC tools couldn't find it. It's characteristic of an ARM Cortex-M MCU feeding a hardware CRC peripheral in little-endian word order. The PB554 touchpad likely uses such an MCU.

Verified against 21 unique command frames captured in a single session (all command types). 24/24 frames rebuild byte-identical to the original wire captures including escape sequences.

The full analysis and algorithm details are in docs/protocol.md.

What this enables

With the CRC cracked my future goals are:

  • Set any temperature dynamically (no lookup table needed)
  • Sync the spa clock from HA
  • Program heating and filtration schedules from HA
  • Generate valid frames for any future command we understand

This effectively should remove the "replay-only" safety constraint. We now compute correct CRC values, so the risk KDy reported (invalid CRC unexpectedly turning on the heater) will be eliminated hopefully.

For other Joyonway models

Yannickt26, your P20B29 frames share the same structure (0x1A framing, same header bytes). The CRC polynomial is likely identical across the Joyonway family since it's a standard algorithm tied to the MCU hardware. I'd be interested to know if this is working for you, too.

christopheknap, same offer for the P23B32. If the CRC checks out on your captured frames, you could generate arbitrary setpoint frames without needing to capture each temperature individually.

Happy to answer questions. More updates once I've done live testing at the spa.

I’d already noticed that ‘someone’ had tackled this very professionally; I could tell from the comments in the code ;). Great. I’ve just managed to capture what I think are all the possible settings for my spa, all the possible configurations (though the controller allows for more). Tomorrow I’ll post them in text form, cleaned up of all the junk and with descriptions. No analysis, as that’ll take a bit of time, but if anyone wants to use them, please do.

I have some problem with pasting the code so that it is visible to everyone

I’ve been following along with everything and just have to give a huge shout-out. The sheer amount of work and knowledge that has been—and continues to be—invested here is truly fantastic. Unfortunately, I have some osmosis damage in my hot tub, so I’m unable to test everything out myself.

Hello,
I tested your integration but I'm getting the same error as with Christophe's integration ( post #97). I think you need to do as KDy suggested (post #111) to make your integration compatible with more models.
Yannick

I have a question regarding the P25B85 controller. It features two COM interfaces. The control panel is connected to one of them, while the Wi-Fi module was connected to the second. I removed the Wi-Fi module in order to connect the USR-W610 RS485-to-WiFi bridge. Is it possible to connect both devices to a single COM interface? Would doing so result in errors or damage to the controller?

Hi all,

Tremendous work from the community here, I've been reading all of it but still can't nail down what my issue is. (French guy here as well :wink: )

I have a SPA with P69B133 controller board and PB563 screen with wifi card integrated.
I also have a PAC that is powered and controlled by the SPA.
The PB563 is connected on CN23. On CN24 a joyonway cable with 4 wires is prolonged with a splitter. On one side of the splitter is the cable going to the PAC, the other side of the splitter was free so I plugged in a hacked joyonway cable and patched it into my USE-W610 RS485 A/B inputs.

Since I have the P69B133, I started with @gaet78 integration but unfortunately it’s not working “out of the box”.

nc 192.168.2.25 8899 > capture.bin does capture traffic, I tried to decode the capture.bin using https://knapthebuilder.github.io/joyonway-frame-analyzer/ but the site appears to be down at the moment (error 404).

gaet78 integration returns in the HA logs:

W610 192.168.2.25:8899 — received 448 bytes but no valid Joyonway frame found. First 64 bytes: 00 01 00 05 00 03 00 b5 00 50 66 00 d0 8b 00 10 fd 06 00 8d 00 e4 00 0d 00 fe 00 1f 00 05 00 04 00 fc 00 7c 00 fe 01 00 01 00 01 00 0d 00 b5 00 10 35 00 f4 9d 00 50 6f 00 8d f3 00 e4 00 0d 00
W610 192.168.2.25:8899 — received 464 bytes but no valid Joyonway frame found. First 64 bytes: 00 30 00 08 00 9d 00 3d 00 05 00 04 00 fc 00 7c 00 b6 84 05 00 05 00 05 00 0d 00 45 00 50 66 00 d0 0e 00 d0 6d 00 90 5e 00 30 00 0d 00 9d 00 1f 00 00 04 00 fc 00 7c 00 f8 04 00 01 00 01 00 03
W610 192.168.2.25:8899 — received 3056 bytes but no valid Joyonway frame found. First 64 bytes: 05 e6 0f 03 00 a0 df 40 c8 a7 03 00 a0 df 0b 99 85 03 80 a0 df 0b 89 8b 03 00 a0 b9 20 e4 12 d0 55 f1 fb 41 ff d7 ff 21 bd ff 41 ff fb ff 9f 45 e5 57 61 19 03 00 a0 b9 20 a4 12 d0 55 f1 fb 6b
W610 192.168.2.25:8899 — received 3008 bytes but no valid Joyonway frame found. First 64 bytes: 67 03 00 a0 bc 20 24 d2 d0 55 cb f5 cf db cf b5 ff e3 03 00 a0 df 2a 64 e9 03 00 a0 bc 2a a4 fc fd ff b9 c3 ff ff ff ff ff c1 03 00 a0 ef 2a e4 dc ff ff f3 03 00 a0 df 05 e6 0f 03 00 a0 5f 0a
W610 192.168.2.25:8899 — received 3008 bytes but no valid Joyonway frame found. First 64 bytes: cf db cd 91 ff cf 03 00 a0 df 2a 64 e9 03 00 a0 bc 2a a4 fc fd ff b9 c3 ff ff ff ff ff c1 03 00 a0 ef 2a e5 fc ff b7 39 03 00 a0 df 05 e6 0f 03 00 a0 5f 0a 99 5f 03 00 a0 d7 0a a9 fc ff ff ff

I also tried to plug my USR-610 on CN23, no difference.
I tried both with baud rates 9600 & 115200, no difference except that the capture.bin looks different.
I inverted A/B cables, if I invert, I get no traffic at all with nc.

I am suspecting that the PAC is changing somehow the frames and the integration cannot interpret them.

That’s it, I’ll way for the frame analyzer to come back online, in the meanwhile, if someone has a suggestions, then shoot :slight_smile: