ccutrer / balboa_worldwide_app

Ruby library for communication with Balboa Water Group's WiFi module or RS-485
85 stars 25 forks source link

Unknown Messages / Partial Communication #58

Open HyperActiveJ opened 2 years ago

HyperActiveJ commented 2 years ago

Hello, I need some help decoding w messages from my 2021 Sundance 780 series spa. I recognize this is not a supported main board by the balboa worldwide app but I'm not sure where else to ask this.

I successfully connected a RS485<>Ethernet converter as described here: https://github.com/jshank/bwalink. I first attempted to use the this app as well as pybalboa unmodified with out success. I turned to manually adapting pybalboa to print raw data to try to identify the issue

I demonstrated I think I have my hardware working as expected by succeeding at implementing the channel assignment sequence:

  1. Wait for New Client Clear to Send (Confirmed at 1hz for my board)
  2. Sent Channel Assignment Request
  3. Received Channel Assignment Response (Channel assigned started at 0x20 and incrementing by 1 each time)
  4. Sent Channel Assignment Ack
  5. Main board began to send Clear To Send (CTS) Messages for the newly assigned channel
  6. Returned Nothing to Send response and see main board moving to next channel upon receipt.
  7. Repeated steps above and received channel assignments incremented by 1 each time

With some confidence I then tired to send the following settings request messages (Type 0x22) after a CTS message in-place of a Nothing To Send message, with either codes 0, or 4 (Configuration, Information). However I observed no response to these messages. I also tried hard coding channel 0x0A (Wifi) without success.

Further, I am not receiving the known Status Update (0x13) message, nor was I able to capture the control panel sending any known message types by pressing controls. Instead I only receive a 3 different types of message at > 1hz rates.

Channel : Message Type: Number of Fields 0x10 : 0xCC : 2 0xFF : 0xCA : 29 0xFF : 0xC4 : 33

Example messages: Ch: 0x10 Type: 0xCC Len 7 - Data ['B1', '51'] Ch: 0xFF Type: 0xC4 Len 38 - Data ['35', '21', '31', '30', '3F', '3F', 'A6', 'C6', '3E', '3A', '5C', '3A', '07', '26', 'C5', '26', '47', '22', '20', '36', '2F', '2E', '01', '2C', 'B0', '2A', '29', '7C', '72', '16', '15', '14', '13'] Ch: 0x10 Type: 0xCC Len 7 - Data ['A4', '44'] Ch: 0xFF Type: 0xC4 Len 38 - Data ['C7', 'D3', 'C3', 'C2', 'CD', 'CD', '54', '34', 'CC', 'C8', 'AE', 'C8', 'F5', 'D4', '37', 'D4', 'B5', 'D0', 'D2', 'C4', 'DD', 'DC', 'F3', 'DE', '42', 'D8', 'DB', '8E', '80', 'E4', 'E7', 'E6', 'E1'] Ch: 0xFF Type: 0xCA Len 34 - Data ['C3', '7F', '83', '82', '8D', '8C', '8F', 'B2', '89', '88', '8B', '75', '95', '94', '97', '96', '91', '90', '93', '92', '9D', '9C', '9F', '9E', '99', '98', '9B', '9A', 'A5'] Ch: 0x10 Type: 0xCC Len 7 - Data ['B2', '52'] Ch: 0xFF Type: 0xC4 Len 38 - Data ['9F', '8B', '9B', '9A', '95', '95', '0C', '6C', '94', '90', 'F6', '90', 'AD', '8C', '6F', '8C', 'ED', '88', '8A', '9C', '85', '84', 'AB', '86', '1A', '80', '83', 'D6', 'D8', 'BC', 'BF', 'BE', 'B9'] Ch: 0xFF Type: 0xC4 Len 38 - Data ['39', '2D', '3D', '3C', '33', '33', 'AA', 'CA', '32', '36', '50', '36', '0B', '2A', 'C9', '2A', '4B', '2E', '2C', '3A', '23', '22', '0D', '20', 'BC', '26', '25', '70', '7E', '1A', '19', '18', '1F'] Ch: 0x10 Type: 0xCC Len 7 - Data ['1E', 'FE'] Ch: 0xFF Type: 0xC4 Len 38 - Data ['03', '17', '07', '06', '09', '09', '90', 'F0', '08', '0C', '6A', '0C', '31', '10', 'F3', '10', '71', '14', '16', '00', '19', '18', '37', '1A', '86', '1C', '1F', '4A', '44', '20', '23', '22', '25'] Ch: 0x10 Type: 0xCC Len 7 - Data ['DF', '3F']

My observations are:

  1. The lower nibble of message type 0xCC is always identical for both data bytes.
  2. For both message types 0xCA and 0xC4: For a given first data byte, most messages received will be exactly identical. For example if the first data byte of message type 0xC4 is 0x39, then for most messages the rest of the data will be '2D', '3D', '3C', '33', '33', 'AA', 'CA', '32', '36', '50', '36', '0B', '2A', 'C9', '2A', '4B', '2E', '2C', '3A', '23', '22', '0D', '20', 'BC', '26', '25', '70', '7E', '1A', '19', '18', '1F'
  3. If there are differences in messages for a given message type and first data byte, there are at most 5 bytes different, typically with only one or two bits within any given byte being alerted.
  4. When Message of types CA or C4 contain byte values different from first observed, the difference tends to be the same for several messages before returning to its original values, with a couple of exceptions that may be indicative of the values representing a longer term trend such as possibly representing temperature.
  5. There appears to be no pattern or correlation between the message types, or from message to message that I see so far (ex, no incrementing counters, no consistency in order).

So, I’m hoping someone might be able to point me in the right direction to try to narrow in further. Any ideas?

bggardner commented 2 years ago

Kudos for getting as far as you have. My guess is that these new message types may be new "Status Update" messages, but because their field values are so different between messages that may not be the case. You may need to post a timestamped dump/log of a message stream to make more sense of these. It would be even better if the log was notated to say when "obvious" telemetry like temperatures change on the display/control panel.

FYI, you may want to switch to a RS-485 to USB adapter, as any IP-based system may introduce delays and/or drop packets. The Ethernet converter is probably fine, but switching to a lower-level serial device may help with troubleshooting.

I think investigating the issue about not being able to detect control panel messages is critical. Does it use the same kind of connector? Are the control panel connector signal "bussed" with the RS-485<>Ethernet connector signals (does pin 1 connect to pin 1, etc.)? Maybe post some pictures. What kind of traffic is there if the control panel is unplugged? Also try logging the bus during power-on, both the the control panel plugged in and disconnected.

HyperActiveJ commented 2 years ago

Ordered usb 485 converter.

3 of same connector outiled with a silkscren box on the board. Diagram on box indicates smarttub module can plug into same connector area. Moved panel cable over to the connector i had been using and panel continued to work as expected so it doesnt seem to care where its attached at least. Will buzz it out and confrim board really has the connectors bussed and switch to a y cable if nessary. Agreed not seening panel messages is a problem for decoding. I see cts messages for other channels but no info from them. Will add photos.

Is there a perfered log format? Hex dump with timestamps?

bggardner commented 2 years ago

Hex dump with timestamps is good, with manual notations of known events. See the wiki for some similar examples.

I wonder if the new panels use wireless comm, and just get power via the wires? Can you tell if the control panel uses all 4 wires? Are there metal contacts in all four connector positions of the cable? Is there an FCC ID anywhere on the panel or main board? This would indicate wireless comm.

HyperActiveJ commented 2 years ago

Below is the startup log recording using a USB>485 Converter. Didn't have time to test commands with USB unfortunately. I confirmed the connectors are bussed. I was still unable to capture button presses resulting in commands. I did NOT find any evidence of RF labeling.

I think that possibly:

  1. Channel h10 is the panel.
  2. There might some sort of obfuscation or encryption going on but its weak if it exists

Possible next steps:

  1. Start without panel to confirm panel is h10
  2. Using USB try commands as Wifi channel 0x0A
  3. Using USB try getting a channel # and sending commands
  4. Update script so keyboard strokes can be used to log what buttons are being pressed on panel directly into the log

HARDWARE

Spa: Sundance 780 Kingston 2021 Spa Pack:
Model: 780 P/N: 6600-325 Agency Model: JZ-SD780-B-M Main Board: Jacuzzi Products Co. PN: 24168_C PWA: SD780 2PMP 60Hz V2.05 Expansion Board: UKNOWN / NA Tech Sheet: UKNOWN Top Side Panel: UKNOWN Connection: Laptop via JBtek RS-485 USB Adapter Ozone: Yes (Physically exists, but its not suposed to be there!) UV: Yes

INFORMATION

SSID: UKNOWN System Model: UNKOWN Current Setup: UNKOWN Configuration Signature: UNKOWN Heater Voltage: 240 Heater Type: Standard DIP Switches (1-10): 0001000000 (60A, Demo Mode OFF) Panel Version: UNKOWN

11:11:37.812 ECReq : 7E 05 0A BF 04 77 7E 11:11:37.824 ECReq : 7E 05 51 BF 04 BF 7E 11:11:37.828 ECReq : 7E 05 10 BF 04 52 7E 11:11:37.844 ECReq : 7E 05 11 BF 04 39 7E 11:11:37.844 ECReq : 7E 05 12 BF 04 84 7E 11:11:37.860 ECReq : 7E 05 13 BF 04 EF 7E 11:11:37.876 ECReq : 7E 05 14 BF 04 F9 7E 11:11:37.876 ECReq : 7E 05 15 BF 04 92 7E 11:11:37.892 ECReq : 7E 05 16 BF 04 2F 7E 11:11:37.909 ECReq : 7E 05 17 BF 04 44 7E 11:11:37.909 ECReq : 7E 05 18 BF 04 03 7E 11:11:37.925 ECReq : 7E 05 19 BF 04 68 7E 11:11:37.949 ECReq : 7E 05 1A BF 04 D5 7E 11:11:37.949 ECReq : 7E 05 1B BF 04 BE 7E 11:11:37.957 ECReq : 7E 05 1C BF 04 A8 7E 11:11:37.973 ECReq : 7E 05 1D BF 04 C3 7E 11:11:37.989 ECReq : 7E 05 1E BF 04 7E 7E 11:11:37.989 ECReq : 7E 05 1F BF 04 15 7E 11:11:37.989 ECReq : 7E 05 20 BF 04 B3 7E 11:11:38.021 ECReq : 7E 05 21 BF 04 D8 7E 11:11:38.021 ECReq : 7E 05 22 BF 04 65 7E 11:11:38.025 ECReq : 7E 05 23 BF 04 0E 7E 11:11:38.053 ECReq : 7E 05 24 BF 04 18 7E 11:11:38.053 ECReq : 7E 05 25 BF 04 73 7E 11:11:38.057 ECReq : 7E 05 26 BF 04 CE 7E 11:11:38.082 ECReq : 7E 05 27 BF 04 A5 7E 11:11:38.086 ECReq : 7E 05 28 BF 04 E2 7E 11:11:38.086 ECReq : 7E 05 29 BF 04 89 7E 11:11:38.114 ECReq : 7E 05 2A BF 04 34 7E 11:11:38.118 ECReq : 7E 05 2B BF 04 5F 7E 11:11:38.118 ECReq : 7E 05 2C BF 04 49 7E 11:11:38.146 ECReq : 7E 05 2D BF 04 22 7E 11:11:38.146 ECReq : 7E 05 2E BF 04 9F 7E 11:11:38.150 ECReq : 7E 05 2F BF 04 F4 7E 11:11:38.178 ECReq : 7E 05 30 BF 04 11 7E 11:11:38.182 ECReq : 7E 05 31 BF 04 7A 7E 11:11:38.182 ECReq : 7E 05 32 BF 04 C7 7E 11:11:38.210 ECReq : 7E 05 33 BF 04 AC 7E 11:11:38.214 ECReq : 7E 05 34 BF 04 BA 7E 11:11:38.214 ECReq : 7E 05 35 BF 04 D1 7E 11:11:38.250 ECReq : 7E 05 36 BF 04 6C 7E 11:11:38.254 ECReq : 7E 05 37 BF 04 07 7E 11:11:38.254 ECReq : 7E 05 38 BF 04 40 7E 11:11:38.262 ECReq : 7E 05 39 BF 04 2B 7E 11:11:38.278 ECReq : 7E 05 3A BF 04 96 7E 11:11:38.278 ECReq : 7E 05 3B BF 04 FD 7E 11:11:38.294 ECReq : 7E 05 3C BF 04 EB 7E 11:11:38.306 ECReq : 7E 05 3D BF 04 80 7E 11:11:38.310 ECReq : 7E 05 3E BF 04 3D 7E 11:11:38.310 ECReq : 7E 05 3F BF 04 56 7E 11:11:39.429 CA : 7E 22 FF AF CA F3 4F B3 B2 BD BC BF 82 B9 B8 BB 45 A5 A4 A7 A6 A1 A0 A3 A2 AD AC AF AE A9 A8 AB AA 95 63 7E 11:11:39.522 NCTS : 7E 05 FE BF 00 AC 7E 11:11:39.530 CAReq : 7E 08 FE BF 01 00 B0 CA 07 7E 11:11:39.538 CARes : 7E 08 FE BF 02 10 B0 CA 9F 7E 11:11:39.538 CAAck : 7E 05 10 BF 03 47 7E 11:11:39.559 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.563 17 : 7E 06 10 BF 17 00 7B 7E 11:11:39.571 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.571 17 : 7E 06 10 BF 17 00 7B 7E 11:11:39.596 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.596 17 : 7E 06 10 BF 17 00 7B 7E 11:11:39.604 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.604 17 : 7E 06 10 BF 17 00 7B 7E 11:11:39.625 C4 : 7E 26 FF AF C4 90 9C 94 95 9A 9B 0D 63 9B 9F F8 9F 92 83 B0 82 E3 87 85 93 8A 8B 99 89 1B 8F 8E C3 D6 B3 B0 B1 B6 D5 7E 11:11:39.633 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.637 CC : 7E 07 10 BF CC 00 E0 2E 7E 11:11:39.654 NCTS : 7E 05 FE BF 00 AC 7E 11:11:39.666 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.670 CC : 7E 07 10 BF CC DC 3C 72 7E 11:11:39.686 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.698 CC : 7E 07 10 BF CC 04 E4 66 7E 11:11:39.698 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.718 CC : 7E 07 10 BF CC 65 85 A6 7E 11:11:39.730 NCTS : 7E 05 FE BF 00 AC 7E 11:11:39.746 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.746 CC : 7E 07 10 BF CC AA 4A EB 7E 11:11:39.763 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.763 CC : 7E 07 10 BF CC 1F FF E7 7E 11:11:39.783 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.783 CC : 7E 07 10 BF CC AD 4D 95 7E 11:11:39.795 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.799 CC : 7E 07 10 BF CC 1D FD C3 7E 11:11:39.811 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.811 CC : 7E 07 10 BF CC 5A BA 21 7E 11:11:39.827 NCTS : 7E 05 FE BF 00 AC 7E 11:11:39.848 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.851 CC : 7E 07 10 BF CC DA 3A 1E 7E 11:11:39.860 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.860 CC : 7E 07 10 BF CC E5 05 99 7E 11:11:39.876 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.876 CC : 7E 07 10 BF CC AC 4C 87 7E 11:11:39.892 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.892 CC : 7E 07 10 BF CC 1B FB AF 7E 11:11:39.905 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.909 CC : 7E 07 10 BF CC 1E FE F5 7E 11:11:39.921 C4 : 7E 26 FF AF C4 51 5D 55 54 5B 5A CC A2 5A 5E 39 5E 53 42 71 43 22 46 44 52 4B 4A 58 48 DA 4E 4F 02 17 72 71 70 77 18 7E 11:11:39.945 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.945 CC : 7E 07 10 BF CC 5F BF 7B 7E 11:11:39.953 NCTS : 7E 05 FE BF 00 AC 7E 11:11:39.974 CTS : 7E 05 10 BF 06 5C 7E 11:11:39.978 CC : 7E 07 10 BF CC 13 F3 3F 7E 11:11:39.986 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.004 CC : 7E 07 10 BF CC 70 90 DB 7E 11:11:40.006 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.007 CC : 7E 07 10 BF CC 79 99 59 7E 11:11:40.019 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.037 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.037 CC : 7E 07 10 BF CC 6C 8C 24 7E 11:11:40.061 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.066 CC : 7E 07 10 BF CC FD 1D 2E 7E 11:11:40.066 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.070 CC : 7E 07 10 BF CC 10 F0 09 7E 11:11:40.098 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.098 CC : 7E 07 10 BF CC FF 1F 0A 7E 11:11:40.098 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.126 CC : 7E 07 10 BF CC 19 F9 8B 7E 11:11:40.130 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.158 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.158 CC : 7E 07 10 BF CC AF 4F B1 7E 11:11:40.162 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.162 CC : 7E 07 10 BF CC 60 80 FC 7E 11:11:40.194 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.194 CC : 7E 07 10 BF CC 1D FD C3 7E 11:11:40.198 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.198 CC : 7E 07 10 BF CC 04 E4 66 7E 11:11:40.226 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.226 CC : 7E 07 10 BF CC AC 4C 87 7E 11:11:40.230 C4 : 7E 26 FF AF C4 72 7E 76 77 78 79 EF 81 79 7D 1A 7D 70 61 52 60 01 65 67 71 68 69 7B 6B F9 6D 6C 21 34 51 52 53 54 AB 7E 11:11:40.254 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.258 CC : 7E 07 10 BF CC B4 54 30 7E 11:11:40.258 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.299 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.299 CC : 7E 07 10 BF CC 1D FD C3 7E 11:11:40.303 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.303 CC : 7E 07 10 BF CC 02 E2 0A 7E 11:11:40.307 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.307 CC : 7E 07 10 BF CC 2B CB C6 7E 11:11:40.343 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.343 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.347 CC : 7E 07 10 BF CC 46 A6 DE 7E 11:11:40.371 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.371 CC : 7E 07 10 BF CC 78 98 4B 7E 11:11:40.371 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.371 CC : 7E 07 10 BF CC 73 93 ED 7E 11:11:40.399 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.399 CC : 7E 07 10 BF CC 3A DA F3 7E 11:11:40.403 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.403 CC : 7E 07 10 BF CC F2 12 C0 7E 11:11:40.431 CA : 7E 22 FF AF CA EB 57 AB AA A5 A4 A7 9A A1 A0 A3 5D BD BC BF BE B9 B8 BB BA B5 B4 B7 B6 B1 B0 B3 B2 8D 42 7E 11:11:40.435 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.435 CC : 7E 07 10 BF CC DF 3F 44 7E 11:11:40.451 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.467 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.479 CC : 7E 07 10 BF CC 5F BF 7B 7E 11:11:40.491 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.496 CC : 7E 07 10 BF CC AE 4E A3 7E 11:11:40.512 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.524 CC : 7E 07 10 BF CC B7 57 06 7E 11:11:40.532 C4 : 7E 26 FF AF C4 F6 FA F2 F3 FC FD 6B 05 FD F9 9E F9 F4 E5 D6 E4 85 E1 E3 F5 EC ED FF EF 7D E9 E8 A5 B0 D5 D6 D7 D0 AD 7E 11:11:40.556 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.560 CC : 7E 07 10 BF CC 08 E8 BE 7E 11:11:40.560 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.588 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.592 CC : 7E 07 10 BF CC 59 B9 17 7E 11:11:40.592 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.596 CC : 7E 07 10 BF CC D1 31 B8 7E 11:11:40.625 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.625 CC : 7E 07 10 BF CC EE 0E 3F 7E 11:11:40.625 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.649 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.649 CC : 7E 07 10 BF CC 39 D9 C5 7E 11:11:40.657 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.657 CC : 7E 07 10 BF CC 10 F0 09 7E 11:11:40.681 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.681 CC : 7E 07 10 BF CC CB 2B 2B 7E 11:11:40.689 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.689 CC : 7E 07 10 BF CC 48 A8 22 7E 11:11:40.714 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.718 CC : 7E 07 10 BF CC 95 75 6C 7E 11:11:40.722 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.742 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.742 CC : 7E 07 10 BF CC B5 55 22 7E 11:11:40.754 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.754 CC : 7E 07 10 BF CC CC 2C 55 7E 11:11:40.770 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.770 CC : 7E 07 10 BF CC 89 69 93 7E 11:11:40.786 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.786 CC : 7E 07 10 BF CC 29 C9 E2 7E 11:11:40.802 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.802 CC : 7E 07 10 BF CC 11 F1 1B 7E 11:11:40.831 C4 : 7E 26 FF AF C4 9E 92 9A 9B 94 95 03 6D 95 91 F6 91 9C 8D BE 8C ED 89 8B 9D 84 85 97 87 15 81 80 CD D8 BD BE BF B8 42 7E 11:11:40.843 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.843 CC : 7E 07 10 BF CC FF 1F 0A 7E 11:11:40.851 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.879 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.879 CC : 7E 07 10 BF CC 06 E6 42 7E 11:11:40.896 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.908 CC : 7E 07 10 BF CC B6 56 14 7E 11:11:40.913 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.913 CC : 7E 07 10 BF CC 62 82 D8 7E 11:11:40.945 NCTS : 7E 05 FE BF 00 AC 7E 11:11:40.945 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.945 CC : 7E 07 10 BF CC 2E CE 9C 7E 11:11:40.977 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.977 CC : 7E 07 10 BF CC DF 3F 44 7E 11:11:40.977 CTS : 7E 05 10 BF 06 5C 7E 11:11:40.981 CC : 7E 07 10 BF CC 3C DC 9F 7E 11:11:41.010 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.010 CC : 7E 07 10 BF CC F9 19 66 7E 11:11:41.010 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.013 CC : 7E 07 10 BF CC 35 D5 1D 7E 11:11:41.034 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.042 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.042 CC : 7E 07 10 BF CC FD 1D 2E 7E 11:11:41.070 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.074 CC : 7E 07 10 BF CC 4B AB 14 7E 11:11:41.074 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.078 CC : 7E 07 10 BF CC 94 74 7E 7E 11:11:41.106 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.106 CC : 7E 07 10 BF CC 28 C8 F0 7E 11:11:41.106 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.110 CC : 7E 07 10 BF CC CA 2A 39 7E 11:11:41.130 C4 : 7E 26 FF AF C4 CA C6 CE CF C0 C1 57 39 C1 C5 A2 C5 C8 D9 EA D8 B9 DD DF C9 D0 D1 C3 D3 41 D5 D4 99 8C E9 EA EB EC 9D 7E 11:11:41.138 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.138 CC : 7E 07 10 BF CC 09 E9 AC 7E 11:11:41.166 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.170 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.170 CC : 7E 07 10 BF CC 7C 9C 03 7E 11:11:41.195 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.195 CC : 7E 07 10 BF CC 44 A4 FA 7E 11:11:41.203 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.203 CC : 7E 07 10 BF CC B3 53 4E 7E 11:11:41.231 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.231 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.235 CC : 7E 07 10 BF CC 02 E2 0A 7E 11:11:41.255 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.263 CC : 7E 07 10 BF CC 5E BE 69 7E 11:11:41.267 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.288 CC : 7E 07 10 BF CC 96 76 5A 7E 11:11:41.296 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.300 CC : 7E 07 10 BF CC 5F BF 7B 7E 11:11:41.317 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.317 CC : 7E 07 10 BF CC B3 53 4E 7E 11:11:41.329 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.345 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.345 CC : 7E 07 10 BF CC EA 0A 77 7E 11:11:41.362 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.362 CC : 7E 07 10 BF CC 6D 8D 36 7E 11:11:41.378 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.382 CC : 7E 07 10 BF CC AC 4C 87 7E 11:11:41.394 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.394 CC : 7E 07 10 BF CC D4 34 E2 7E 11:11:41.411 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.415 CC : 7E 07 10 BF CC 2D CD AA 7E 11:11:41.423 CA : 7E 22 FF AF CA 54 E8 14 15 1A 1B 18 25 1E 1F 1C E2 02 03 00 01 06 07 04 05 0A 0B 08 09 0E 0F 0C 0D 32 01 7E 11:11:41.444 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.444 CC : 7E 07 10 BF CC 81 61 03 7E 11:11:41.456 C4 : 7E 26 FF AF C4 7D 71 79 78 77 76 E0 8E 76 72 15 72 7F 6E 5D 6F 0E 6A 68 7E 67 66 74 64 F6 62 62 2E 3B 5E 5D 5C 5B 78 7E 11:11:41.476 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.476 CC : 7E 07 10 BF CC 6E 8E 00 7E 11:11:41.488 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.509 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.509 CC : 7E 07 10 BF CC 69 89 7E 7E 11:11:41.521 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.541 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.545 CC : 7E 07 10 BF CC AF 4F B1 7E 11:11:41.553 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.553 CC : 7E 07 10 BF CC E0 00 C3 7E 11:11:41.581 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.585 CC : 7E 07 10 BF CC E6 06 AF 7E 11:11:41.585 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.585 CC : 7E 07 10 BF CC 87 67 6F 7E 11:11:41.601 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.601 CC : 7E 07 10 BF CC 4C AC 6A 7E 11:11:41.625 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.633 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.649 CC : 7E 07 10 BF CC 9C 7C EE 7E 11:11:41.653 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.665 CC : 7E 07 10 BF CC 04 E4 66 7E 11:11:41.681 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.681 CC : 7E 07 10 BF CC E7 07 BD 7E 11:11:41.698 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.698 CC : 7E 07 10 BF CC D2 32 8E 7E 11:11:41.714 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.714 CC : 7E 07 10 BF CC 36 D6 2B 7E 11:11:41.727 C4 : 7E 26 FF AF C4 AA A6 AE AF A0 A1 37 59 A1 A5 C2 A5 A8 B9 8A B8 D9 BD BF A9 B0 B1 A3 B3 21 B5 B5 F9 EC 89 8A 8B 8C 69 7E 11:11:41.743 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.747 CC : 7E 07 10 BF CC 5D BD 5F 7E 11:11:41.759 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.776 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.776 CC : 7E 07 10 BF CC 2C CC B8 7E 11:11:41.792 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.792 CC : 7E 07 10 BF CC 60 80 FC 7E 11:11:41.809 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.809 CC : 7E 07 10 BF CC C9 29 0F 7E 11:11:41.825 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.841 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.841 CC : 7E 07 10 BF CC EA 0A 77 7E 11:11:41.857 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.857 CC : 7E 07 10 BF CC F4 14 AC 7E 11:11:41.873 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.873 CC : 7E 07 10 BF CC 79 99 59 7E 11:11:41.889 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.889 CC : 7E 07 10 BF CC F6 16 88 7E 11:11:41.905 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.905 CC : 7E 07 10 BF CC 86 66 7D 7E 11:11:41.922 NCTS : 7E 05 FE BF 00 AC 7E 11:11:41.934 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.938 CC : 7E 07 10 BF CC A0 40 5F 7E 11:11:41.958 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.958 CC : 7E 07 10 BF CC EB 0B 65 7E 11:11:41.970 CTS : 7E 05 10 BF 06 5C 7E 11:11:41.970 CC : 7E 07 10 BF CC 93 73 00 7E 11:11:41.998 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.002 CC : 7E 07 10 BF CC 26 C6 0C 7E 11:11:42.002 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.006 CC : 7E 07 10 BF CC E4 04 8B 7E 11:11:42.031 C4 : 7E 26 FF AF C4 A7 AB A3 A2 AD AC 3A 54 AC A8 CF A8 A5 B4 87 B5 D4 B0 B2 A4 BD BC AE BE 2C B8 B8 F4 E1 84 87 86 81 54 7E 11:11:42.035 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.059 CC : 7E 07 10 BF CC 62 82 D8 7E 11:11:42.063 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.091 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.095 CC : 7E 07 10 BF CC 12 F2 2D 7E 11:11:42.095 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.099 CC : 7E 07 10 BF CC D5 35 F0 7E 11:11:42.128 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.128 CC : 7E 07 10 BF CC 0D ED E4 7E 11:11:42.132 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.156 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.160 CC : 7E 07 10 BF CC CB 2B 2B 7E 11:11:42.160 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.164 CC : 7E 07 10 BF CC B3 53 4E 7E 11:11:42.192 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.192 CC : 7E 07 10 BF CC 77 97 A5 7E 11:11:42.196 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.196 CC : 7E 07 10 BF CC 15 F5 53 7E 11:11:42.224 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.224 CC : 7E 07 10 BF CC 6A 8A 48 7E 11:11:42.228 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.252 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.252 CC : 7E 07 10 BF CC 6A 8A 48 7E 11:11:42.256 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.256 CC : 7E 07 10 BF CC 3A DA F3 7E 11:11:42.284 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.284 CC : 7E 07 10 BF CC 68 88 6C 7E 11:11:42.288 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.288 CC : 7E 07 10 BF CC BA 5A CC 7E 11:11:42.316 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.316 CC : 7E 07 10 BF CC 8E 6E ED 7E 11:11:42.320 C4 : 7E 26 FF AF C4 10 1C 14 15 1A 1B 8D E3 1B 1F 78 1F 12 03 30 02 63 07 05 13 0A 0B 19 09 9B 0F 0F 43 56 33 30 31 36 6E 7E 11:11:42.348 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.348 CC : 7E 07 10 BF CC DB 3B 0C 7E 11:11:42.352 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.381 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.385 CC : 7E 07 10 BF CC 74 94 93 7E 11:11:42.385 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.390 CC : 7E 07 10 BF CC 08 E8 BE 7E 11:11:42.398 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.418 CC : 7E 07 10 BF CC 46 A6 DE 7E 11:11:42.430 CA : 7E 22 FF AF CA DB 67 9B 9A 95 94 97 AA 91 90 93 6D 8D 8C 8F 8E 89 88 8B 8A 85 84 87 86 81 80 83 82 BD 00 7E 11:11:42.446 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.446 CC : 7E 07 10 BF CC 9E 7E CA 7E 11:11:42.462 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.478 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.482 CC : 7E 07 10 BF CC F3 13 D2 7E 11:11:42.494 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.510 CC : 7E 07 10 BF CC CE 2E 71 7E 11:11:42.515 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.515 CC : 7E 07 10 BF CC B3 53 4E 7E 11:11:42.527 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.543 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.543 CC : 7E 07 10 BF CC 0A EA 9A 7E 11:11:42.559 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.559 CC : 7E 07 10 BF CC F8 18 74 7E 11:11:42.575 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.575 CC : 7E 07 10 BF CC D0 30 AA 7E 11:11:42.591 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.591 CC : 7E 07 10 BF CC DD 3D 60 7E 11:11:42.611 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.615 CC : 7E 07 10 BF CC 68 88 6C 7E 11:11:42.631 C4 : 7E 26 FF AF C4 B0 BC B4 B5 BA BB 2D 43 BB BF D8 BF B2 A3 90 A2 C3 A7 A5 B3 AA AB B9 A9 3B AF AF E3 F6 93 90 91 96 13 7E 11:11:42.639 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.639 CC : 7E 07 10 BF CC BB 5B DE 7E 11:11:42.668 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.672 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.672 CC : 7E 07 10 BF CC F8 18 74 7E 11:11:42.704 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.704 CC : 7E 07 10 BF CC 5F BF 7B 7E 11:11:42.704 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.708 CC : 7E 07 10 BF CC FA 1A 50 7E 11:11:42.736 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.736 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.740 CC : 7E 07 10 BF CC 24 C4 28 7E 11:11:42.768 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.768 CC : 7E 07 10 BF CC F2 12 C0 7E 11:11:42.768 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.772 CC : 7E 07 10 BF CC D2 32 8E 7E 11:11:42.801 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.801 CC : 7E 07 10 BF CC FC 1C 3C 7E 11:11:42.805 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.813 CC : 7E 07 10 BF CC 18 F8 99 7E 11:11:42.833 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.845 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.858 CC : 7E 07 10 BF CC 87 67 6F 7E 11:11:42.862 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.862 CC : 7E 07 10 BF CC FB 1B 42 7E 11:11:42.878 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.878 CC : 7E 07 10 BF CC 5C BC 4D 7E 11:11:42.894 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.894 CC : 7E 07 10 BF CC 87 67 6F 7E 11:11:42.911 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.911 CC : 7E 07 10 BF CC BA 5A CC 7E 11:11:42.926 C4 : 7E 26 FF AF C4 41 4D 45 44 4B 4A DC B2 4A 4E 29 4E 43 52 61 53 32 56 54 42 5B 5A 48 58 CA 5E 5E 12 07 62 61 60 67 48 7E 11:11:42.942 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.942 CC : 7E 07 10 BF CC B4 54 30 7E 11:11:42.971 NCTS : 7E 05 FE BF 00 AC 7E 11:11:42.975 CTS : 7E 05 10 BF 06 5C 7E 11:11:42.975 CC : 7E 07 10 BF CC 38 D8 D7 7E 11:11:43.007 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.007 CC : 7E 07 10 BF CC 32 D2 63 7E 11:11:43.007 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.011 CC : 7E 07 10 BF CC A5 45 05 7E 11:11:43.039 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.039 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.043 CC : 7E 07 10 BF CC 9B 7B 90 7E 11:11:43.072 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.072 CC : 7E 07 10 BF CC 1B FB AF 7E 11:11:43.072 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.076 CC : 7E 07 10 BF CC 3D DD 8D 7E 11:11:43.100 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.104 CC : 7E 07 10 BF CC 10 F0 09 7E 11:11:43.104 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.108 CC : 7E 07 10 BF CC 7C 9C 03 7E 11:11:43.132 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.136 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.136 CC : 7E 07 10 BF CC F7 17 9A 7E 11:11:43.161 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.165 CC : 7E 07 10 BF CC 78 98 4B 7E 11:11:43.165 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.169 CC : 7E 07 10 BF CC D6 36 C6 7E 11:11:43.197 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.197 CC : 7E 07 10 BF CC 7F 9F 35 7E 11:11:43.201 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.225 CC : 7E 07 10 BF CC E2 02 E7 7E 11:11:43.229 C4 : 7E 26 FF AF C4 F9 F5 FD FC F3 F2 64 0A F2 F6 91 F6 FB EA D9 EB 8A EE EC FA E3 E2 F0 E0 72 E6 E6 AA BF DA D9 D8 DF 7E 7E 11:11:43.266 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.270 CC : 7E 07 10 BF CC 6D 8D 36 7E 11:11:43.270 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.287 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.291 CC : 7E 07 10 BF CC F8 18 74 7E 11:11:43.295 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.295 CC : 7E 07 10 BF CC 11 F1 1B 7E 11:11:43.323 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.323 CC : 7E 07 10 BF CC 91 71 24 7E 11:11:43.327 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.355 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.355 CC : 7E 07 10 BF CC 29 C9 E2 7E 11:11:43.359 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.359 CC : 7E 07 10 BF CC 7E 9E 27 7E 11:11:43.387 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.387 CC : 7E 07 10 BF CC 93 73 00 7E 11:11:43.391 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.391 CC : 7E 07 10 BF CC 95 75 6C 7E 11:11:43.419 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.419 CC : 7E 07 10 BF CC CB 2B 2B 7E 11:11:43.423 CA : 7E 22 FF AF CA 54 E8 14 15 1A 1B 18 25 1E 1F 1C E2 02 03 00 01 06 07 04 05 0A 0B 08 09 0E 0F 0C 0D 32 01 7E 11:11:43.447 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.447 CC : 7E 07 10 BF CC 12 F2 2D 7E 11:11:43.455 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.484 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.484 CC : 7E 07 10 BF CC C5 25 D7 7E 11:11:43.484 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.488 CC : 7E 07 10 BF CC 57 B7 EB 7E 11:11:43.504 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.524 CC : 7E 07 10 BF CC CE 2E 71 7E 11:11:43.532 C4 : 7E 26 FF AF C4 A2 AE A6 A7 A8 A9 3F 51 A9 AD CA AD A0 B1 82 B0 D1 B5 B7 A1 B8 B9 AB BB 29 BD BA F1 E4 81 82 83 84 BE 7E 11:11:43.544 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.548 CC : 7E 07 10 BF CC 5A BA 21 7E 11:11:43.548 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.581 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.581 CC : 7E 07 10 BF CC F1 11 F6 7E 11:11:43.581 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.605 CC : 7E 07 10 BF CC D4 34 E2 7E 11:11:43.613 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.613 CC : 7E 07 10 BF CC 16 F6 65 7E 11:11:43.637 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.645 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.645 CC : 7E 07 10 BF CC 18 F8 99 7E 11:11:43.673 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.673 CC : 7E 07 10 BF CC D7 37 D4 7E 11:11:43.677 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.677 CC : 7E 07 10 BF CC 19 F9 8B 7E 11:11:43.718 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.718 CC : 7E 07 10 BF CC BC 5C A0 7E 11:11:43.722 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.722 CC : 7E 07 10 BF CC 04 E4 66 7E 11:11:43.726 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.754 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.758 CC : 7E 07 10 BF CC 5B BB 33 7E 11:11:43.758 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.758 CC : 7E 07 10 BF CC 7E 9E 27 7E 11:11:43.778 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.778 CC : 7E 07 10 BF CC 99 79 B4 7E 11:11:43.790 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.790 CC : 7E 07 10 BF CC 65 85 A6 7E 11:11:43.811 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.811 CC : 7E 07 10 BF CC F1 11 F6 7E 11:11:43.827 C4 : 7E 26 FF AF C4 47 4B 43 42 4D 4C DA B4 4C 48 2F 48 45 54 67 55 34 50 52 44 5D 5C 4E 5E CC 58 5F 14 01 64 67 66 61 08 7E 11:11:43.835 CTS : 7E 05 10 BF 06 5C 7E 11:11:43.839 CC : 7E 07 10 BF CC A2 42 7B 7E 11:11:43.851 NCTS : 7E 05 FE BF 00 AC 7E 11:11:43.868 CTS : 7E 05 10 BF 06 5C 7E

bggardner commented 2 years ago

Summary/Notes:

I think the next step is to only log Message Types 0xC4 and 0xCA (along with timestamps) and try to match the timestamps with events (temperature change, control panel command, etc.). You may also want to just log 0xCC messages (or any non-CTS messages on channel 0x10) during control panel button presses.

HyperActiveJ commented 2 years ago

Very interesting observation there about the nibbles... I've attached a full startup log. Temperature was 99F, the system went thru its normal startup cycle of pump 1 then pump 2 then on to just circulating pump. I attempted to get some data while pressing buttons in a new log file, but it looks like I lost bytes and don't see even partial messages associated with the button presses. Need to figure out if I've got a hardware issue (eg noise) from changing my test cables last night, if my app hickuped, or if the button presses is inducing the issue directly.

202203061110StartupNoButtons.txt

netmindz commented 2 years ago

While unsupported, certainly looks like the messages are more similar than the older GL/EL Balboa series

bggardner commented 2 years ago

Still can't make sense of the data. You need to capture the data just before and after a change (current temperature or button press). Try to limit the time surrounding the change event to a minimum (a few seconds). The idea is to compare the data before and after the change to try and detect what byte(s) is/are affected. Example:

  1. Note set temperature and start recording.
  2. Wait a few seconds.
  3. Increase set temperature one degree.
  4. Wait a few seconds.
  5. Stop recording and save as something like "SetTemp_99to100.txt"

Repeat this procedure for other button pushes, like decreasing set temperature, turning on/off lights and pumps, naming the file appropriately.

Also, is this what your control panel looks like? If not, can you post a picture of or link to it?

HyperActiveJ commented 2 years ago

While unsupported, certainly looks like the messages are more similar than the older GL/EL Balboa series

Thats an interesting theory, how so?

HyperActiveJ commented 2 years ago

Still can't make sense of the data. You need to capture the data just before and after a change (current temperature or button press). Try to limit the time surrounding the change event to a minimum (a few seconds). The idea is to compare the data before and after the change to try and detect what byte(s) is/are affected. Example:

  1. Note set temperature and start recording.
  2. Wait a few seconds.
  3. Increase set temperature one degree.
  4. Wait a few seconds.
  5. Stop recording and save as something like "SetTemp_99to100.txt"

Repeat this procedure for other button pushes, like decreasing set temperature, turning on/off lights and pumps, naming the file appropriately.

Also, is this what your control panel looks like? If not, can you post a picture of or link to it?

That is my control panel! Sorry I've been on travel and haven't been able to make another capture, hopefully next weekend. I have a new script so I can press a keyboard key to record what I pressed on the panel and get a corresponding log to it. appreciate your look at it!

HyperActiveJ commented 2 years ago

Alright, here's the captures, still not making sense of it :(.

Order was: Pump 1 on Pump 1 off Pump 2 on Pump 2 off Temp to 101 Temp to 100

I started the log about one send before pressing, then stopped log a second or so after the change registered or pump had turned on/off.

TempSetTo101.txt Pump2Off.txt Pump2On.txt Pump1Off.txt Pump1On.txt TempSetTo100.txt

HyperActiveJ commented 2 years ago

Performing bitwise xor to compare consecutive bytes in the C4 messages produces a result which is identical for all C4 messages sent while the hotub is in a steady state. Further I was able to find a pattern in changes to the result of this function which tracks with changes in pump state. IE given the latest C4 message I can determine what the bitwise xor results will change to in response to changes in any given pump state. Or in otherwords I think I'm reading pump share reliably. The odd thig is that multiple bytes of the result change. So I don't quite see the next level of what this means in terms of decrypting the message, I'm hoping that this is indicating a standard Cypher of some sort that can be generalized. Still working it.

HyperActiveJ commented 2 years ago

The bitwise xor of consecutive bytes also is identical for all CA messages in steady state.

HyperActiveJ commented 2 years ago

I'm able now to decode from the 0xC4 message the hot tubs currently set Hours, Minutes, Set Setpoint seemingly reliably from startup with no prior knowledge of sate, and Temperature when pumps are not on or if the pump state is known (not sure why yet),

Python Source. data = datafieldsint(fields) currentMsg= [] for i in range(0,len(data)-1,2): c = data[i]^data[i+1] currentMsg.append(c)
if (currentMsg != lastMsg): print("{} H{} M{} ST{} T{} x{}".format(fields[0], lst[0]^7, lst[11]^1, lst[8]^1, lst[14], lst)) lastMsg= currentMsg

Example Output while pressing the temp down to 65 then back up again with a current temp of 99.

(H= hours, M = Minute, ST = Set point, T= Temperature)

16:24:58.447 H16 M24 ST70 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 71, 22, 1, 25, 116, 46, 99, 1] 16:24:59.317 H16 M24 ST69 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 68, 22, 1, 25, 116, 46, 99, 1] 16:24:59.902 H16 M24 ST68 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 69, 22, 1, 25, 116, 46, 99, 1] 16:25:00.534 H16 M24 ST67 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 66, 22, 1, 25, 116, 46, 99, 1] 16:25:01.130 H16 M25 ST66 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 67, 22, 1, 24, 116, 46, 99, 1] 16:25:01.977 H16 M25 ST65 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 64, 22, 1, 24, 116, 46, 99, 1] 16:25:07.452 H16 M25 ST66 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 67, 22, 1, 24, 116, 46, 99, 1] 16:25:07.997 H16 M25 ST67 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 66, 22, 1, 24, 116, 46, 99, 1] 16:25:08.576 H16 M25 ST68 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 69, 22, 1, 24, 116, 46, 99, 1] 16:25:09.211 H16 M25 ST69 T99 x[23, 1, 36, 142, 4, 96, 37, 69, 68, 22, 1, 24, 116, 46, 99, 1]

HyperActiveJ commented 2 years ago

Narrowing in further, got more of the status decoded but a few aren't fields reliable yet.

Made a break thur on the CC message - its just corresponds to Key pressed! field1 xor^ field 2 decodes as the following:

225 - Nothing Pressed 238 Clear ray button 229 Pump 1 Button 228 Pump 2 Button 227 Temp Down 224 Temp Up 255 Menu

Next i need to try sending these to see if I can induce a response..

HyperActiveJ commented 2 years ago

I now have 'the basics' working - Reading and writing Temperatures, pumps and lights. No more advanced features like filter configuring filter cycles. I will submit a updates to the wiki. I am working toward maturing a fork of pybalboa which implements it cleanly.