forked from sfeakes/AqualinkD
-
Notifications
You must be signed in to change notification settings - Fork 2
/
serialadapter.c
1303 lines (940 loc) · 53.6 KB
/
serialadapter.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#include "aq_serial.h"
#include "aqualink.h"
#include "serialadapter.h"
#include "packetLogger.h"
#define RSSA_QLEN 20
unsigned char _rssa_queue[RSSA_QLEN][4];
int _rssa_q_length = 0;
bool _rssa_last_was_queue = false;
//int _rssa_position = 0;
unsigned char probe_reply[] = {0x00,0x01,0x00,0x05};
unsigned char rssa_null[] = {0x00,0x01,0x00,0x00};
unsigned char getUnits[] = {0x00,0x01,RS_SA_UNITS,0x05};
unsigned char getPoolSP[] = {0x00,0x01,RS_SA_POOLSP,0x05};
unsigned char getPoolSP2[] = {0x00,0x01,RS_SA_POOLSP2,0x05};
unsigned char getSpaSP[] = {0x00,0x01,RS_SA_SPASP,0x05};
//unsigned char getModel[] = {0x00,0x01,RS_SA_MODEL,0x05};
#ifdef AQ_RS16
unsigned char getAux12[] = {0x00,0x01,0x00,RS_SA_AUX12};
unsigned char getAux13[] = {0x00,0x01,0x00,RS_SA_AUX13};
unsigned char getAux14[] = {0x00,0x01,0x00,RS_SA_AUX14};
unsigned char getAux15[] = {0x00,0x01,0x00,RS_SA_AUX15};
#endif
bool push_rssa_cmd(unsigned char *cmd) {
if (_rssa_q_length >= RSSA_QLEN ) {
LOG(RSSA_LOG,LOG_ERR, "Queue overflow, last command ignored!\n");
return false;
}
memcpy(_rssa_queue[_rssa_q_length++], cmd, 4);
LOG(RSSA_LOG,LOG_DEBUG, "Added to message queue, position %d 0x%02hhx|0x%02hhx|0x%02hhx|0x%02hhx\n",_rssa_q_length-1,_rssa_queue[_rssa_q_length-1][0],_rssa_queue[_rssa_q_length-1][1],_rssa_queue[_rssa_q_length-1][2],_rssa_queue[_rssa_q_length-1][3]);
return true;
}
unsigned char *get_rssa_cmd(unsigned char source_message_type) {
_rssa_last_was_queue = false;
//startInlineSerialDebug();
// NSF Need to check for error on reply message //0x013|0x02 (I believe)
// Maybe put it in main loop process_rssadapter_packet()
if ( source_message_type == 0x07 )
LOG(RSSA_LOG,LOG_DEBUG, "Replying to 2nd command sequence\n");
if (source_message_type == CMD_PROBE)
return probe_reply;
else if (source_message_type != CMD_STATUS && source_message_type != 0x07) // 0x07 is second part of set message
return rssa_null; // Only send command on status messages.
else {
if (_rssa_q_length > 0) {
LOG(RSSA_LOG,LOG_DEBUG, "Pull from message queue, length %d 0x%02hhx|0x%02hhx|0x%02hhx|0x%02hhx\n",_rssa_q_length,_rssa_queue[0][0],_rssa_queue[0][1],_rssa_queue[0][2],_rssa_queue[0][3]);
_rssa_last_was_queue = true;
return _rssa_queue[0];
}
}
return rssa_null;
}
void remove_rssa_cmd() {
//stopInlineDebug();
if (_rssa_q_length > 0 && _rssa_last_was_queue == true) {
LOG(RSSA_LOG,LOG_DEBUG, "Remove from message queue, length %d\n",_rssa_q_length-1);
memmove(&_rssa_queue[0], &_rssa_queue[1], (sizeof(unsigned char) * 4) * _rssa_q_length);
_rssa_q_length--;
}
}
void queue_aqualink_rssadapter_setpoint(unsigned char typeID, int val) {
unsigned char readySP[] = {0x00,0x01,typeID,0x35};
unsigned char setSP[] = {0x00,0x01,0x00,(unsigned char)val};
push_rssa_cmd(readySP);
push_rssa_cmd(setSP);
}
unsigned char devID(int bIndex) {
// pool = 0; spa = 1; aux1 = 2 etc
// rssa pool / spa are different. aux1 = 21 (0x15) then goes up from their in order.
// NSF Pool Heat / Spa Heat / Solar Heater are also out of order. But have not accounted for that.
// It might be better to ass the RSS_ID's to the buttons in aq_panel in the future if we expand using
// this protocol.
// look at AllButton2RSsrialAdapter function at bottom of file.
if (bIndex==0)
return RS_SA_PUMP;
else if (bIndex==1)
return RS_SA_SPA;
else if (bIndex >= 2 && bIndex <= 16) {
// aux1 = index 2 & aux1 = 0x15. So add inxed to 0x13
return (unsigned char)0x13 + bIndex;
}
return 0x00;
}
void rssadapter_device_state(unsigned char devID, unsigned char state) {
unsigned char setDev[] = {0x00,0x01,state,devID};
push_rssa_cmd(setDev);
}
/*
void rssadapter_device_off(unsigned char devID) {
unsigned char setDev[] = {0x00,0x01,0x80,devID};
push_rssa_cmd(setDev);
}
*/
void set_aqualink_rssadapter_aux_state(int buttonIndex, bool turnOn)
{
LOG(RSSA_LOG,LOG_DEBUG, "Turning button %d %s\n",buttonIndex,(turnOn?"On":"Off"));
rssadapter_device_state( devID(buttonIndex), (turnOn?0x81:0x80) );
}
void increase_aqualink_rssadapter_pool_setpoint(char *args, struct aqualinkdata *aqdata) {
int val = atoi(args);
val = setpoint_check(POOL_HTR_SETOINT, aqdata->pool_htr_set_point + val, aqdata);
LOG(RSSA_LOG,LOG_DEBUG, "Increasing pool heater from %d to %d\n",aqdata->pool_htr_set_point,val);
queue_aqualink_rssadapter_setpoint(RS_SA_POOLSP, val);
}
void increase_aqualink_rssadapter_spa_setpoint(char *args, struct aqualinkdata *aqdata) {
int val = atoi(args);
val = setpoint_check(SPA_HTR_SETOINT, aqdata->spa_htr_set_point + val, aqdata);
LOG(RSSA_LOG,LOG_DEBUG, "Increasing spa heater from %d to %d\n",aqdata->spa_htr_set_point,val);
queue_aqualink_rssadapter_setpoint( (isSINGLE_DEV_PANEL?RS_SA_POOLSP2:RS_SA_SPASP), val);
}
void set_aqualink_rssadapter_pool_setpoint(char *args, struct aqualinkdata *aqdata) {
int val = atoi(args);
val = setpoint_check(POOL_HTR_SETOINT, val, aqdata);
LOG(RSSA_LOG,LOG_DEBUG, "Setting pool heater to %d\n",val);
queue_aqualink_rssadapter_setpoint(RS_SA_POOLSP, val);
/*
unsigned char readyPoolSP[] = {0x00,0x01,RS_SA_POOLSP,0x35};
unsigned char setPoolSP[] = {0x00,0x01,0x00,(unsigned char)val};
push_rssa_cmd(readyPoolSP);
push_rssa_cmd(setPoolSP);
*/
}
void set_aqualink_rssadapter_spa_setpoint(char *args, struct aqualinkdata *aqdata) {
int val = atoi(args);
val = setpoint_check(SPA_HTR_SETOINT, val, aqdata);
queue_aqualink_rssadapter_setpoint( (isSINGLE_DEV_PANEL?RS_SA_POOLSP2:RS_SA_SPASP), val);
/*
if (isSINGLE_DEV_PANEL) {
LOG(RSSA_LOG,LOG_DEBUG, "Setting pool2 heater to %d\n",val);
unsigned char readySpaSP[] = {0x00,0x01,RS_SA_POOLSP2,0x35};
push_rssa_cmd(readySpaSP);
} else {
LOG(RSSA_LOG,LOG_DEBUG, "Setting spa heater to %d\n",val);
unsigned char readySpaSP[] = {0x00,0x01,RS_SA_SPASP,0x35};
push_rssa_cmd(readySpaSP);
}
unsigned char setSpaSP[] = {0x00,0x01,0x00,(unsigned char)val};
push_rssa_cmd(setSpaSP);
*/
}
void get_aqualink_rssadapter_setpoints() {
//push_rssa_cmd(getModel);
push_rssa_cmd(getUnits);
push_rssa_cmd(getPoolSP);
if (!isSINGLE_DEV_PANEL)
push_rssa_cmd(getSpaSP);
else
push_rssa_cmd(getPoolSP2);
}
// Return true if we change the state.
bool setLEDstate( aqled *led, unsigned char state, struct aqualinkdata *aq_data)
{
if (state == 0x00) {
if (led->state != OFF) {
led->state = OFF;
return true;
}
} else if (state == 0x01) {
if (led->state != ON) {
led->state = ON;
return true;
}
}
// Should also add FLASH and ENABLE.
//_aqualink_data.aqbuttons[13].led->state = OFF;
//
return false;
}
bool process_rssadapter_packet(unsigned char *packet, int length, struct aqualinkdata *aq_data) {
//RSSA_LOG
bool rtn = false;
static int cnt=-5;
cnt++;
//char buff[1024];
//LOG(RSSA_LOG,LOG_DEBUG, " Received message\n");
//debuglogPacket(RSSA_LOG, packet, length, true);
if (cnt == 0 || cnt >= 250) {
LOG(RSSA_LOG,LOG_INFO, "Queue device update requests\n");
if (cnt == 0) {
// The below inturn calls get_aqualink_rssadapter_setpoints()
// But do it here as it's the first init, cnt=0 will only happen once
queueGetProgramData(RSSADAPTER, aq_data);
} else {
push_rssa_cmd(getPoolSP);
if (!isSINGLE_DEV_PANEL)
push_rssa_cmd(getSpaSP);
else
push_rssa_cmd(getPoolSP2);
#ifdef AQ_RS16 // No status LED's for these, so get them on a poll cycle
if ( PANEL_SIZE() >= 16 ) {
push_rssa_cmd(getAux12);
push_rssa_cmd(getAux13);
push_rssa_cmd(getAux14);
push_rssa_cmd(getAux15);
}
#endif
}
cnt = 0;
}
if (packet[PKT_CMD] == CMD_PROBE) {
LOG(RSSA_LOG,LOG_DEBUG, "Probe received, will queue device update shortly\n");
//queueGetProgramData(RSSADAPTER, aq_data);
cnt=-5; // Connection reset, so queue the status update
}
if (packet[PKT_CMD] == 0x13) {
//beautifyPacket(buff, packet, length);
//LOG(RSSA_LOG,LOG_DEBUG, "%s", buff);
//LOG(RSSA_LOG,LOG_DEBUG," Command 0x%02hhx = |0x%02hhx|0x%02hhx|0x%02hhx %d|%d|%d\n", packet[4], packet[5], packet[6], packet[7], packet[5], packet[6], packet[7]);
// This is a failuer reply to setpoint 0x10|0x02|0x48|0x13|0x02|0x00|0x10|0x00|0x7f|0x10|0x03|
// Rather than check all, just check 0x02 and checksum sin't I'm not sure 0x10 means faiure without 0x00 around it.
if (packet[4] == 0x02 && packet[8] == 0x7f) {
LOG(RSSA_LOG,LOG_ERR,"Last command failed\n");
}
if (packet[4] == RS_SA_MODEL) {
LOG(RSSA_LOG,LOG_INFO,"Panel Model 0x%02hhx|0x%02hhx|0x%02hhx\n",packet[5],packet[6],packet[7]);
} else if (packet[4] == RS_SA_UNITS) {
if (packet[6] == 0x01) {
LOG(RSSA_LOG,LOG_INFO,"Units are Deg C\n");
aq_data->temp_units = CELSIUS;
rtn = true;
} else if (packet[6] == 0x00) {
LOG(RSSA_LOG,LOG_INFO,"Units are Deg F\n");
aq_data->temp_units = FAHRENHEIT;
rtn = true;
} else {
LOG(RSSA_LOG,LOG_ERR,"Units are Unknown\n");
}
} else if (packet[4] == RS_SA_POOLSP) {
LOG(RSSA_LOG,LOG_INFO,"Pool SP is %d\n", packet[6]);
aq_data->pool_htr_set_point = (int) packet[6];
rtn = true;
} else if (packet[4] == RS_SA_SPASP) {
LOG(RSSA_LOG,LOG_INFO,"Spa SP is %d\n", packet[6]);
aq_data->spa_htr_set_point = (int) packet[6];
rtn = true;
} else if (packet[4] == RS_SA_POOLSP2) {
LOG(RSSA_LOG,LOG_INFO,"Pool SP2 is %d\n", packet[6]);
aq_data->spa_htr_set_point = (int) packet[6];
rtn = true;
} else if (packet[4] == 0x03) {
// These are device status messages
#ifdef AQ_RS16
if (packet[7] == RS_SA_AUX12) {
LOG(RSSA_LOG,LOG_INFO,"AUX12 %d\n", packet[6]);
rtn = setLEDstate(aq_data->aqbuttons[13].led, packet[6], aq_data);
//_aqualink_data.aqbuttons[13].led->state = OFF;
} else if (packet[7] == RS_SA_AUX13) {
LOG(RSSA_LOG,LOG_INFO,"AUX13 %d\n", packet[6]);
rtn = setLEDstate(aq_data->aqbuttons[14].led, packet[6], aq_data);
} else if (packet[7] == RS_SA_AUX14) {
LOG(RSSA_LOG,LOG_INFO,"AUX14 %d\n", packet[6]);
rtn = setLEDstate(aq_data->aqbuttons[15].led, packet[6], aq_data);
} else if (packet[7] == RS_SA_AUX15) {
LOG(RSSA_LOG,LOG_INFO,"AUX15 %d\n", packet[6]);
rtn = setLEDstate(aq_data->aqbuttons[16].led, packet[6], aq_data);
}
#endif
}
}
if (rtn == true)
aq_data->updated = true;
return rtn;
}
/* Maybe use in future, not needed for moment
Idea here was to convert all button on/off commands to rs_serial_adapter commands to use if in all button probramming mode */
/*
unsigned char AllButton2RSsrialAdapter(unsigned char abcmd)
{
switch(abcmd) {
case KEY_PUMP:
return RS_SA_PUMP;
break;
case KEY_SPA:
return RS_SA_SPA;
break;
case KEY_AUX1:
return RS_SA_AUX1;
break;
case KEY_AUX2:
return RS_SA_AUX2;
break;
case KEY_AUX3:
return RS_SA_AUX3;
break;
case KEY_AUX4:
return RS_SA_AUX4;
break;
case KEY_AUX5:
return RS_SA_AUX5;
break;
case KEY_AUX6:
return RS_SA_AUX6;
break;
case KEY_AUX7:
return RS_SA_AUX7;
break;
case KEY_POOL_HTR:
return RS_SA_POOLHT;
break;
case KEY_SPA_HTR:
return RS_SA_SPAHT;
break;
}
return NUL;
}
*/
#ifdef DO_NOT_COMPILE
/
//*********************************************
// Notes on protocol for Serial Adapter.
/*
Message is reply ACK as below
--------- Send ACK -----------
0x10|0x02|0x00|0x01|DeviceID|What|0xXX|0x10|0x03|
DeviceID = Below
What = 0x05 Query Value | 0x35 Set Value on next command.
--------- Reply Msg -------------
0x10|0x02|0x48|ReplyType|DeviceID|????|Value|0x00|0xXX|0x10|0x03|
ReplyType 0x13=status, 0x07=set value next message
DeviceID
???? Not sure 0x00 most of the time, 0x02 for (not set or vbat return)
Value What it's set to, except VBAT. or 0x07 set on next command
--------- Send reply to above if 0x07 ---------
0x10|0x02|0x00|0x01|0x00|Value|0x4f|0x10|0x03|
Value to be set
--------- Send received from above ---------
0x10|0x02|0x48|ReplyType|DeviceID|????|Value|0x00|0xXX|0x10|0x03|
Same as previous reply.
*/
// Setpoints changes are in this group./
#define RS_SA_MODEL 0x00
#define RS_SA_OPTIONS 0x01
#define RS_SA_POOLSP 0x05
#define RS_SA_POOLSP2 0x06
#define RS_SA_SPASP 0x07
#define RS_SA_POOLTMP 0x08
#define RS_SA_AIRTMP 0x09
#define RS_SA_UNITS 0x0a
#define RS_SA_SPATMP 0x0b
#define RS_SA_SOLTMP 0x0c
#define RS_SA_OPMODE 0x0d
#define RS_SA_VBAT 0x0e
#define RS_SA_WFALL 0x0f
/*
// Set & Query options
Query or Change simple on/off
--------- Send ACK --------------
0x10|0x02|0x00|0x01|What|DeviceID|0xXX|0x10|0x03|
What - Byte 4 = What (0x00 Query | 0x81 On | 0x80 off )
DeviceID - Byte 5 = (ID's below)
--------- Reply Msg -------------
In return
0x10|0x02|0x48|0x13 |0x02 |0x00 |0x0d|0x10|0x8c|0x10|0x03|
0x10|0x02|0x48|MsgType|Status1|Status2|0x0e|DeviceID|0xXX|0x10|0x03|
MsgType - Byte 3 = 0x13 (some state message)??
StatType - Byte 4 = 0x02 or 0x03 (not sure meaning) Status Type ????
Status1 - Byte 5 = 0x00 0x01 (???) if Byte4 is 0x02 then this is state 0x00=off 0x01=on /
Status2 - Byte 6 = 0x00 0x01 0x0e(option switch set can't change???) if byte4 is 0x03, this this looks to be state
DeviceID - Byte 7 = Should match request.
*/
// These are duplicate for some above, so be careful
#define RS_SA_PUMP 0x0c
#define RS_SA_PUMPLO 0x0d
#define RS_SA_SPA 0x0e
// Unique again
#define RS_SA_CLEANR 0x10
#define RS_SA_POOLHT 0x11
#define RS_SA_POOLHT2 0x12
#define RS_SA_SPAHT 0x13
#define RS_SA_SOLHT 0x14
#define RS_SA_AUX1 0x15
#define RS_SA_AUX2 0x16
#define RS_SA_AUX3 0x17
#define RS_SA_AUX4 0x18
#define RS_SA_AUX5 0x19
#define RS_SA_AUX6 0x1a
#define RS_SA_AUX7 0x1b
#define RS_SA_AUX8 0x1c
#define RS_SA_AUX9 0x1d
#define RS_SA_AUX10 0x1e
#define RS_SA_AUX11 0x1f
#define RS_SA_AUX12 0x20
#define RS_SA_AUX13 0x21
#define RS_SA_AUX14 0x22
#define RS_SA_AUX15 0x23
/*
#POOLSP=60
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x00|0x11|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x05|0x35|0x4d|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x05|0x66|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x3c|0x4f|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x05|0x00|0x3c|0x00|0xae|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
*/
/*
GET UNITS (SET TO F)
Debug: RS Serial: Serial write 9 bytes
Debug: RS Serial: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x0a|0x05|0x22|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x0a|0x00|0x00|0x00|0x77|0x10|0x03|
Command 0x0a = |0x00|0x00|0x00 0|0|0
GET UNITS (SET TO C)
Debug: RS Serial: Serial write 9 bytes
Debug: RS Serial: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x0a|0x05|0x22|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x0a|0x00|0x01|0x00|0x78|0x10|0x03|
Command 0x0a = |0x00|0x01|0x00 0|1|0
*/
/*
Debug: AqualinkD: To 0x48 of type Probe | HEX: 0x10|0x02|0x48|0x00|0x5a|0x10|0x03|
Debug: RS Serial: Serial write 9 bytes
Debug: RS Serial: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x05|0x18|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x00|0x1c|0x2f|0x00|0xb8|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Probe | HEX: 0x10|0x02|0x48|0x00|0x5a|0x10|0x03|
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x05|0x18|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x79|0x01|0x00|0x10|0x03|
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x79|0x01|0x00|0x10|0x03|
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Startup.
Jandy To 0x48 of type Probe | HEX: 0x10|0x02|0x48|0x00|0x5a|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x05|0x18|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x78|0x00|0xfe|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x0f|0x35|0x57|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x0f|0x70|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x01|0x14|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x0f|0x00|0x00|0x00|0x7c|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x51 of type Probe | HEX: 0x10|0x02|0x51|0x00|0x63|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x52 of type Probe | HEX: 0x10|0x02|0x52|0x00|0x64|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x53 of type Probe | HEX: 0x10|0x02|0x53|0x00|0x65|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x80 of type Probe | HEX: 0x10|0x02|0x80|0x00|0x92|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Message | HEX: 0x10|0x02|0x58|0x03|0x01|0x52|0x45|0x56|0x20|0x54|0x2e|0x30|0x2e|0x31|0x00|0x61|0x74|0x00|0x38|0x33|0x00|0xcc|0x10|0x03| Message : REV T.0.1at83
Jandy To 0x68 of type Probe | HEX: 0x10|0x02|0x68|0x00|0x7a|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x69 of type Probe | HEX: 0x10|0x02|0x69|0x00|0x7b|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Message | HEX: 0x10|0x02|0x58|0x03|0x02|0x52|0x53|0x2d|0x38|0x20|0x43|0x6f|0x6d|0x62|0x6f|0x00|0x74|0x00|0x38|0x33|0x00|0x68|0x10|0x03| Message : RS-8 Combot83
Jandy To 0x6a of type Probe | HEX: 0x10|0x02|0x6a|0x00|0x7c|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x6b of type Probe | HEX: 0x10|0x02|0x6b|0x00|0x7d|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x70 of type Probe | HEX: 0x10|0x02|0x70|0x00|0x82|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x81 of type Probe | HEX: 0x10|0x02|0x81|0x00|0x93|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x71 of type Probe | HEX: 0x10|0x02|0x71|0x00|0x83|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x72 of type Probe | HEX: 0x10|0x02|0x72|0x00|0x84|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x73 of type Probe | HEX: 0x10|0x02|0x73|0x00|0x85|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x88 of type Probe | HEX: 0x10|0x02|0x88|0x00|0x9a|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x08|0x05|0x20|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x08|0x02|0x00|0x00|0x77|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x58 of type Probe | HEX: 0x10|0x02|0x58|0x00|0x6a|0x10|0x03|
Jandy To 0x89 of type Probe | HEX: 0x10|0x02|0x89|0x00|0x9b|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x08 of type Probe | HEX: 0x10|0x02|0x08|0x00|0x1a|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x80 of type Probe | HEX: 0x10|0x02|0x80|0x00|0x92|0x10|0x03|
Jandy To 0x09 of type Probe | HEX: 0x10|0x02|0x09|0x00|0x1b|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x0a of type Probe | HEX: 0x10|0x02|0x0a|0x00|0x1c|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x0b of type Probe | HEX: 0x10|0x02|0x0b|0x00|0x1d|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x40 of type Probe | HEX: 0x10|0x02|0x40|0x00|0x52|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x41 of type Probe | HEX: 0x10|0x02|0x41|0x00|0x53|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
Jandy To 0x60 of type Probe | HEX: 0x10|0x02|0x60|0x00|0x72|0x10|0x03|
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x10|0x01|0x00|0x00|0x00|0x6d|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
*/
/*
#POOLSP?
byte 4 is command 0x05
byte 5 is query or set (0x05 query, 0x35 set)
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x05|0x05|0x1d|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x05|0x00|0x53|0x00|0xc5|0x10|0x03|
!00 POOLSP = 83 F
byte 4 is return command
byte 6 is 83 = 0x53
#POOLSP=45
Jandy To 0x48 of type Status | HEX: 0x10|0x02|0x48|0x02|0x00|0x00|0x00|0x00|0x00|0x5c|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x05|0x35|0x4d|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x05|0x66|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x2d|0x40|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x05|0x00|0x2d|0x00|0x9f|0x10|0x03|
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
!00 POOLSP=45
#POOLTMP?
byte 4 is command 0x08
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x08|0x05|0x20|0x10|0x03|
Jandy To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x08|0x00|0x41|0x00|0xb6|0x10|0x03|
!00 POOLTMP = 65 F
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x08|0x05|0x20|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x08|0x00|0x41|0x00|0xb6|0x10|0x03|
#UNITS?
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x0a|0x05|0x22|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x0a|0x00|0x00|0x00|0x77|0x10|0x03|
!00 UNITS = F
#SPASP?
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x07|0x05|0x1f|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x07|0x00|0x66|0x00|0xda|0x10|0x03|
#MODEL?
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x05|0x18|0x10|0x03|
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x79|0x00|0xff|0x10|0x03| // 23 121
!00 MODEL = 6521 -RS 6 Combo
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x78|0x00|0xfe|0x10|0x03| // 23 120
!00 MODEL = 6520 -RS 8 Combo
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x7a|0x00|0x00|0x10|0x03| // 23 122
!00 MODEL = 6522 - RS 4 Combo
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x7b|0x00|0x01|0x10|0x03| // 23 123
!00 MODEL = 6523 - RS 8 Only
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x7c|0x00|0x02|0x10|0x03| // 23 124
!00 MODEL = 6524 - RS 6 only
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x7d|0x00|0x03|0x10|0x03| // 23 125
!00 MODEL = 6525 - RS 4 only
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x7e|0x01|0x05|0x10|0x03| // 23 126 1
!00 MODEL = 6526 - dual 6/2
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x1c|0x21|0x00|0xaa|0x10|0x03| // 28 33
!00 MODEL = 7201 - 12 Combo
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x1c|0x22|0x00|0xab|0x10|0x03| // 28 34
!00 MODEL = 7202 - 16 combo
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x1c|0x2e|0x00|0xb7|0x10|0x03| // 28 46
!00 MODEL = 7214 - 12 only
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x1c|0x2f|0x00|0xb8|0x10|0x03| // 28 47
!00 MODEL = 7215 - 16 only
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x1c|0x30|0x01|0xba|0x10|0x03| // 28 30 1
!00 MODEL = 7216 - dual 2/10
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x1c|0x31|0x01|0xbb|0x10|0x03| // 28 49 1
!00 MODEL = 7217 - dual 2/14
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x88|0x00|0x0e|0x10|0x03| // 23 136
!00 MODEL = 6536 - PD8 Combo
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x00|0x19|0x89|0x00|0x0f|0x10|0x03| // 23 137
!00 MODEL = 6537 - PD8 only
#OPMODE?
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x0d|0x05|0x25|0x10|0x03|
(One of 3 replys)
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x0d|0x00|0x00|0x00|0x7a|0x10|0x03|
!00 OPMODE = AUTO
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x0d|0x00|0x01|0x00|0x7b|0x10|0x03|
!00 OPMODE = SERVICE
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x0d|0x00|0x02|0x00|0x7c|0x10|0x03|
!00 OPMODE = TIMEOUT
#OPTIONS?
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x01|0x05|0x19|0x10|0x03|
Jandy To 0x48 of type RSSA DevStatus | HEX: 0x10|0x02|0x48|0x13|0x01|0x00|0x00|0x00|0x6e|0x10|0x03|
!00 OPTIONS = 0
#SPASP=101
SPA|SET = 0x07|0x35
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x07|0x35|0x4f|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x07|0x68|0x10|0x03|
(second part)
100 = 0x64
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x64|0x77|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x07|0x00|0x65|0x00|0xd9|0x10|0x03|
#SPASP=102
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x07|0x35|0x4f|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x07|0x68|0x10|0x03|
(second part)
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x78|0x8b|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x07|0x00|0x62|0x00|0xd6|0x10|0x03|
#SPASP=90
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x07|0x35|0x4f|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x07|0x68|0x10|0x03|
(second part)
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x5a|0x6d|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x07|0x00|0x61|0x00|0xd5|0x10|0x03|
#POOLSP=97
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x05|0x35|0x4d|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x05|0x66|0x10|0x03|
(second)
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x61|0x74|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x05|0x00|0x4f|0x00|0xc1|0x10|0x03|
#VBAT?
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x0e|0x05|0x26|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x0e|0x02|0x67|0x00|0xe4|0x10|0x03|
!00 VBAT = 900
#POOLSP+
?08 SETPT OPERATION FAILED
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x05|0x35|0x4d|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x05|0x66|0x10|0x03|
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x80|0x00|0x93|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x10|0x00|0x7f|0x10|0x03|
#POOLSP+
?08 SETPT OPERATION FAILED
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x05|0x35|0x4d|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x05|0x66|0x10|0x03|
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x80|0x00|0x93|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x10|0x00|0x7f|0x10|0x03|
#POOLSP+
?08 SETPT OPERATION FAILED
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x05|0x35|0x4d|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x05|0x66|0x10|0x03|
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x80|0x00|0x93|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x10|0x00|0x7f|0x10|0x03|
#POOLSP-
!00 POOLSP = 64 F
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x40|0x00|0x53|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x05|0x00|0x40|0x00|0xb2|0x10|0x03|
Debug: AqualinkD: To 0x31 of type Probe | HEX: 0x10|0x02|0x31|0x00|0x43|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x05|0x00|0x40|0x00|0xb2|0x10|0x03|
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x05|0x35|0x4d|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x07|0x05|0x66|0x10|0x03|
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x40|0x00|0x53|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x05|0x00|0x40|0x00|0xb2|0x10|0x03|
#AUX5=on
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x81|0x19|0xad|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x02|0x01|0x00|0x19|0x89|0x10|0x03|
Command 0x02 = |0x01|0x00|0x19 1|0|25
#AUX5=off
Debug: AqualinkD: To 0x00 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x80|0x19|0xac|0x10|0x03|
Debug: AqualinkD: To 0x48 of type Unknown | HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x00|0x19|0x88|0x10|0x03|
Command 0x02 = |0x00|0x00|0x19 0|0|25
#AUX4 = 1 100%
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0xcc|0x18|0xf7|0x10|0x03|
Jandy To 0x48 of type RSSA Cmd Error | HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x0c|0x18|0x93|0x10|0x03|
?21 AUX NOT ASSIGNED
#AUX3 = 1 75%
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0xaf|0x17|0xd9|0x10|0x03|
Jandy To 0x48 of type RSSA Cmd Error | HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x0c|0x17|0x92|0x10|0x03|
?21 AUX NOT ASSIGNED
#AUX3 = 1 50%
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x96|0x17|0xc0|0x10|0x03|
Jandy To 0x48 of type RSSA Cmd Error | HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x0c|0x17|0x92|0x10|0x03|
?21 AUX NOT ASSIGNED
#AUX3 = 1 25%
Jandy From 0x48 of type Ack | HEX: 0x10|0x02|0x00|0x01|0xfd|0x17|0x27|0x10|0x03|
Jandy To 0x48 of type RSSA Cmd Error | HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x0c|0x17|0x92|0x10|0x03|
?21 AUX NOT ASSIGNED
*/
/*
Return for all
Byte | Description
3 | 0x13 = Some Status
4 |
5 |
6 |
7 | ID of device/setting
Query or Change simple on/off
Byte 4 What (0x00 Query | 0x81 On | 0x80 off )
Byte 5 Device (pict from List)
In return
Byte 3 = 0x13 (some state message)??
Byye 4 = 0x02 or 0x03 (not sure meaning)
Byte 5 = 0x00 0x01 (???) if Byte4 is 0x02 then this is state 0x00=off 0x01=on /
Byte 6 = 0x00 0x01 0x0e(option switch set can't change???) if byte4 is 0x03, this this looks to be state
Byte 7 = DeviceID. Should match request.
#AUX1? 0x10|0x02|0x00|0x01|0x00|0x15|0x28|0x10|0x03| Return 0x10|0x02|0x48|0x13|0x03|0x00|0x00|0x15|0x85|0x10|0x03|
#AUX1=on 0x10|0x02|0x00|0x01|0x81|0x15|0xa9|0x10|0x03| Return 0x10|0x02|0x48|0x13|0x02|0x01|0x00|0x15|0x85|0x10|0x03|
#AUX1=off 0x10|0x02|0x00|0x01|0x80|0x15|0xa8|0x10|0x03| Return 0x10|0x02|0x48|0x13|0x02|0x00|0x00|0x15|0x84|0x10|0x03|
#AUX1? When OPTION SWITCH IS SET (something to do with cleaner mode)
#AUX1? 0x10|0x02|0x00|0x01|0x00|0x15|0x28|0x10|0x03| HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x0e|0x15|0x92|0x10|0x03|
#AUX2? Normal
#AUX2? 0x10|0x02|0x00|0x01|0x00|0x16|0x29|0x10|0x03| | HEX: 0x10|0x02|0x48|0x13|0x03|0x00|0x00|0x16|0x86|0x10|0x03|
#AUX2=on 0x10|0x02|0x00|0x01|0x81|0x16|0xaa|0x10|0x03| 0x10|0x02|0x48|0x13|0x02|0x01|0x00|0x16|0x86|0x10|0x03|
#AUX2? (when on) 0x10|0x02|0x48|0x13|0x03|0x00|0x01|0x16|0x87|0x10|0x03|
#AUX2=off 0x10|0x02|0x00|0x01|0x80|0x16|0xa9|0x10|0x03| HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x00|0x16|0x85|0x10|0x03|
(when already off)
#AUX2=off 0x10|0x02|0x00|0x01|0x80|0x16|0xa9|0x10|0x03| HEX: 0x10|0x02|0x48|0x13|0x02|0x00|0x00|0x16|0x85|0x10|0x03|
#POOLSP=45
Jandy 0x10|0x02|0x00|0x01|0x05|0x35|0x4d|0x10|0x03|
Jandy return HEX: 0x10|0x02|0x48|0x07|0x05|0x66|0x10|0x03|
Jandy 0x10|0x02|0x00|0x01|0x00|0x2d|0x40|0x10|0x03|
*/
/*
// Query only options, work as below.
Byte 4 Device ID
Byte 5 (0x05) Looks to be fixed
// Return
Byte 4 Device ID (should match request)
Byte 5 0x00 some OK ./
Byte 6 value
// More Complex examples, 2 messages when setting a value
// first request
Byte 4 = DeviceID
Byte 4 = 0x35 (I want to change something????)
// first reply
Byte 3 = 0x07