@@ -61,6 +61,12 @@ uint8_t getPanelSupport( char *rev_string, int rev_len)
61
61
// Rev >=Q == iaqualink touch protocol.
62
62
// REv >= P == chemlink
63
63
// Rev >= HH serial adapter.
64
+ // Rev >= L == JandyColors Smart Light Control
65
+ // Rev >= MMM = 12V JandyColor Lights (also light dimmer)
66
+ // Rev >= N Hayward ColorLogic LED Light
67
+ // Rev >= O.1== Jandy WaterColors LED ( 9 colors )
68
+ // Rev >= T.0.1 == limited color light
69
+ // Rec >= T.2 == full color lights
64
70
65
71
// Rev Yg (and maybe before) has Pump label (not number), and also Virtual Device called Label Auxiliraries
66
72
if (REV [0 ] >= 81 ) // Q in ascii
@@ -71,13 +77,25 @@ uint8_t getPanelSupport( char *rev_string, int rev_len)
71
77
72
78
if (REV [0 ] >= 79 ) // O in ascii
73
79
supported |= RSP_SUP_VSP ;
74
-
80
+
75
81
if (REV [0 ] >= 73 ) // I in ascii
76
82
supported |= RSP_SUP_ONET ;
77
83
78
84
if (REV [0 ] > 72 || (REV [0 ] == 72 && REV [1 ] == 72 ) ) // H in ascii
79
85
supported |= RSP_SUP_SERA ;
80
86
87
+ if (REV [0 ] >= 77 ) // M in ascii
88
+ supported |= REP_SUP_CLIT1 ;
89
+
90
+ if (REV [0 ] >= 78 ) // N in ascii
91
+ supported |= REP_SUP_CLIT2 ;
92
+
93
+ if (REV [0 ] >= 79 ) // O in ascii
94
+ supported |= REP_SUP_CLIT3 ;
95
+
96
+ if (REV [0 ] > 84 || (REV [0 ] == 84 && REV [1 ] == 64 && REV [2 ] >= 50 ) ) // T in ascii (or T and . and 2 )
97
+ supported |= REP_SUP_CLIT4 ;
98
+
81
99
}
82
100
83
101
return supported ;
@@ -302,6 +320,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
302
320
aqdata -> aqbuttons [index ].code = KEY_PUMP ;
303
321
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
304
322
aqdata -> aqbuttons [index ].special_mask = 0 ;
323
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_PUMP ;
305
324
index ++ ;
306
325
307
326
if (combo ) {
@@ -312,6 +331,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
312
331
aqdata -> aqbuttons [index ].code = KEY_SPA ;
313
332
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
314
333
aqdata -> aqbuttons [index ].special_mask = 0 ;
334
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_SPA ;
315
335
index ++ ;
316
336
}
317
337
@@ -322,6 +342,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
322
342
aqdata -> aqbuttons [index ].code = KEY_AUX1 ;
323
343
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
324
344
aqdata -> aqbuttons [index ].special_mask = 0 ;
345
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX1 ;
325
346
index ++ ;
326
347
327
348
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [4 - 1 ];
@@ -331,6 +352,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
331
352
aqdata -> aqbuttons [index ].code = KEY_AUX2 ;
332
353
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
333
354
aqdata -> aqbuttons [index ].special_mask = 0 ;
355
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX2 ;
334
356
index ++ ;
335
357
336
358
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [3 - 1 ];
@@ -340,6 +362,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
340
362
aqdata -> aqbuttons [index ].code = KEY_AUX3 ;
341
363
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
342
364
aqdata -> aqbuttons [index ].special_mask = 0 ;
365
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX3 ;
343
366
index ++ ;
344
367
345
368
@@ -351,6 +374,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
351
374
aqdata -> aqbuttons [index ].code = KEY_AUX4 ;
352
375
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
353
376
aqdata -> aqbuttons [index ].special_mask = 0 ;
377
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX4 ;
354
378
index ++ ;
355
379
356
380
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [8 - 1 ];
@@ -360,6 +384,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
360
384
aqdata -> aqbuttons [index ].code = KEY_AUX5 ;
361
385
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
362
386
aqdata -> aqbuttons [index ].special_mask = 0 ;
387
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX5 ;
363
388
index ++ ;
364
389
}
365
390
@@ -371,6 +396,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
371
396
aqdata -> aqbuttons [index ].code = KEY_AUX6 ;
372
397
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
373
398
aqdata -> aqbuttons [index ].special_mask = 0 ;
399
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX6 ;
374
400
index ++ ;
375
401
376
402
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [1 - 1 ];
@@ -380,6 +406,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
380
406
aqdata -> aqbuttons [index ].code = KEY_AUX7 ;
381
407
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
382
408
aqdata -> aqbuttons [index ].special_mask = 0 ;
409
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX7 ;
383
410
index ++ ;
384
411
}
385
412
#ifdef AQ_RS16
@@ -401,6 +428,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
401
428
aqdata -> aqbuttons [index ].code = KEY_AUXB1 ;
402
429
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
403
430
aqdata -> aqbuttons [index ].special_mask = 0 ;
431
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX8 ;
404
432
index ++ ;
405
433
406
434
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [12 - 1 ];
@@ -410,6 +438,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
410
438
aqdata -> aqbuttons [index ].code = KEY_AUXB2 ;
411
439
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
412
440
aqdata -> aqbuttons [index ].special_mask = 0 ;
441
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX9 ;
413
442
index ++ ;
414
443
415
444
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [1 - 1 ];
@@ -419,6 +448,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
419
448
aqdata -> aqbuttons [index ].code = KEY_AUXB3 ;
420
449
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
421
450
aqdata -> aqbuttons [index ].special_mask = 0 ;
451
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX10 ;
422
452
index ++ ;
423
453
424
454
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [13 - 1 ];
@@ -428,6 +458,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
428
458
aqdata -> aqbuttons [index ].code = KEY_AUXB4 ;
429
459
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
430
460
aqdata -> aqbuttons [index ].special_mask = 0 ;
461
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX11 ;
431
462
index ++ ;
432
463
}
433
464
@@ -439,6 +470,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
439
470
aqdata -> aqbuttons [index ].code = KEY_AUXB5 ;
440
471
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
441
472
aqdata -> aqbuttons [index ].special_mask = 0 ;
473
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX12 ;
442
474
index ++ ;
443
475
444
476
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [22 - 1 ]; // doesn't actually exist
@@ -448,6 +480,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
448
480
aqdata -> aqbuttons [index ].code = KEY_AUXB6 ;
449
481
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
450
482
aqdata -> aqbuttons [index ].special_mask = 0 ;
483
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX13 ;
451
484
index ++ ;
452
485
453
486
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [23 - 1 ]; // doesn't actually exist
@@ -456,6 +489,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
456
489
aqdata -> aqbuttons [index ].name = BTN_AUXB7 ;
457
490
aqdata -> aqbuttons [index ].code = KEY_AUXB7 ;
458
491
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
492
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX14 ;
459
493
index ++ ;
460
494
461
495
aqdata -> aqbuttons [index ].led = & aqdata -> aqualinkleds [24 - 1 ]; // doesn't actually exist
@@ -465,6 +499,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
465
499
aqdata -> aqbuttons [index ].code = KEY_AUXB8 ;
466
500
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
467
501
aqdata -> aqbuttons [index ].special_mask = 0 ;
502
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX15 ;
468
503
index ++ ;
469
504
}
470
505
#endif // AQ_RS16
@@ -479,6 +514,7 @@ void initPanelButtons(struct aqualinkdata *aqdata, bool rs, int size, bool combo
479
514
aqdata -> aqbuttons [index ].code = KEY_AUX6 ;
480
515
aqdata -> aqbuttons [index ].dz_idx = DZ_NULL_IDX ;
481
516
aqdata -> aqbuttons [index ].special_mask = 0 ;
517
+ aqdata -> aqbuttons [index ].rssd_code = RS_SA_AUX6 ;
482
518
index ++ ;
483
519
}
484
520
//Dual panels (2/10 & 2/14) have no AUX7, they go from AUX6 to AUXB1, but the keycodes are the same as other panels
@@ -664,9 +700,17 @@ bool setDeviceState(struct aqualinkdata *aqdata, int deviceIndex, bool isON, req
664
700
// Domoticz has a bad habbit of resending the same state back to us, when we use the PRESTATE_ONOFF option
665
701
// since allbutton (default) is stateless, and rssaadapter is statefull, use rssaadapter for any domoricz requests
666
702
set_aqualink_rssadapter_aux_state (deviceIndex , isON );
703
+ } else if (button -> special_mask & PROGRAM_LIGHT && isRSSA_ENABLED ) {
704
+ // If off and program light, use the RS serial adapter since that is overiding the state now.
705
+ set_aqualink_rssadapter_aux_state (deviceIndex , isON );
667
706
} else {
668
707
aq_send_allb_cmd (button -> code );
669
708
}
709
+
710
+ #ifdef CLIGHT_PANEL_FIX
711
+ if (isRSSA_ENABLED ) {get_aqualink_rssadapter_colorlight_statuses (aqdata );}
712
+ #endif
713
+
670
714
// Pre set device to state, next status will correct if state didn't take, but this will stop multiple ON messages setting on/off
671
715
//#ifdef PRESTATE_ONOFF
672
716
if (_aqconfig_ .device_pre_state ) {
@@ -750,6 +794,20 @@ void programDeviceLightMode(struct aqualinkdata *aqdata, int value, int button)
750
794
_aqconfig_ .light_programming_initial_off ,
751
795
_aqconfig_ .light_programming_mode );
752
796
aq_programmer (AQ_SET_LIGHTPROGRAM_MODE , buf , aqdata );
797
+ } else if (isRSSA_ENABLED && light -> lightType != LC_DIMMER ) {
798
+ unsigned char rssd_value = value ;
799
+ set_aqualink_rssadapter_aux_extended_state (light -> button , rssd_value );
800
+ } else if (isRSSA_ENABLED && light -> lightType == LC_DIMMER ) {
801
+ // Dimmer needs to be turned on first
802
+ set_aqualink_rssadapter_aux_extended_state (light -> button , RS_SA_ON );
803
+ // Value 1 = 25, 1 = 50, 3 = 75, 4 = 100 (need to convert value into binary)
804
+ if (value >= 1 && value <= 4 ) {
805
+ // If value is not on of those vales, then ignore
806
+ unsigned char rssd_value = value * 25 ;
807
+ set_aqualink_rssadapter_aux_extended_state (light -> button , rssd_value );
808
+ } else {
809
+ LOG (PANL_LOG ,LOG_ERR , "Light mode %d is not valid for '%s'\n" ,value , light -> button -> label );
810
+ }
753
811
} else {
754
812
//sprintf(buf, "%-5s%-5d%-5d",value, button, light->lightType);
755
813
sprintf (buf , "%-5d%-5d%-5d" ,value , button , light -> lightType );
0 commit comments