Version 2.3.0

pull/94/head
sf 2023-05-14 17:03:35 -05:00
parent e38b8d85d3
commit 4159143a74
9 changed files with 33 additions and 6764 deletions

View File

@ -1,3 +1,19 @@
/*
* Copyright (c) 2017 Shaun Feakes - All rights reserved
*
* You may use redistribute and/or modify this code under the terms of
* the GNU General Public License version 2 as published by the
* Free Software Foundation. For the terms of this license,
* see <http://www.gnu.org/licenses/>.
*
* You are free to use this software under the terms of the GNU General
* Public License, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* https://github.com/sfeakes/aqualinkd
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,178 +0,0 @@
/*
* Copyright (c) 2017 Shaun Feakes - All rights reserved
*
* You may use redistribute and/or modify this code under the terms of
* the GNU General Public License version 2 as published by the
* Free Software Foundation. For the terms of this license,
* see <http://www.gnu.org/licenses/>.
*
* You are free to use this software under the terms of the GNU General
* Public License, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* https://github.com/sfeakes/aqualinkd
*/
#include <signal.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "aq_serial.h"
#include "utils.h"
void logiAqualinkMsg(unsigned char *packet_buffer, int packet_length) {
static int pumpIndex = 0;
/*
Pump type are like // Not sure how to read this accuratly.
"Jandy ePUMP 1"
"Intelliflo VS 1"
RPM message always comes after the above, so maybe saving last string
then when see RPM go back to get pump number.
' RPM: 2950'
' Watts: 1028'
*/
if (packet_buffer[9] == 'R' && packet_buffer[10] == 'P' && packet_buffer[11] == 'M' && packet_buffer[12] == ':')
printf("RPM = %d\n", atoi((char *) &packet_buffer[13]));
else if (packet_buffer[7] == 'W' && packet_buffer[8] == 'a' && packet_buffer[9] == 't' && packet_buffer[10] == 't' && packet_buffer[11] == 's' && packet_buffer[12] == ':')
printf("Watts = %d\n", atoi((char *) &packet_buffer[13]));
}
void read_bin_file(char *filename)
{
unsigned char packet_buffer[AQ_MAXPKTLEN];
int packet_length;
int i=0;
setLoggingPrms(LOG_DEBUG_SERIAL , false, NULL, NULL);
startPacketLogger(false,true);
int fd = open(filename, O_RDWR | O_NOCTTY | O_NONBLOCK | O_NDELAY);
if (fd < 0) {
logMessage(LOG_ERR, "Unable to open port: %s\n", filename);
return;
}
while ( (packet_length = get_packet_new(fd, packet_buffer)) > -1){
printf("----------------\n");
//logPacket(packet_buffer, packet_length);
}
}
void create_bin_file(FILE *in, FILE *out) {
char hex[6];
unsigned char byte;
while ( fgets ( hex, 6, in ) != NULL ) /* read a line */
{
byte = (int)strtol(hex, NULL, 16);
//printf("read 0x%02hhx, %s\n",byte,hex);
fwrite(&byte, 1,1, out);
//return;
}
}
int main(int argc, char *argv[]) {
//unsigned char packet_buffer[10];
unsigned char packet_buffer[AQ_MAXPKTLEN];
int packet_length = 0;
char hex[5];
int i;
FILE *outfile = NULL;
bool writeb = false;
//int num;
//int pi;
if (strcmp(argv[1], "-rb") == 0) {
read_bin_file(argv[2]);
return 0;
}
else if (argc < 1 || access( argv[1], F_OK ) == -1 ) {
fprintf(stderr, "ERROR, first param must be valid log file\n");
return 1;
}
else if (strcmp(argv[2], "-b") == 0) {
outfile = fopen ( argv[3], "w" );
if ( outfile == NULL )
{
fprintf(stderr, "ERROR, Couldn't open out file `%s`\n", argv[3]);
perror ( argv[3] ); /* why didn't the file open? */
return 1;
}
writeb = true;
}
FILE *file = fopen ( argv[1], "r" );
if ( file == NULL )
{
perror ( argv[1] ); /* why didn't the file open? */
return 1;
}
if (writeb) {
create_bin_file(file, outfile);
fclose ( file );
fclose ( outfile );
return 0;
}
char line [ 128 ]; /* or other suitable maximum line size */
while ( fgets ( line, sizeof line, file ) != NULL ) /* read a line */
{
packet_length=0;
for (i=0; i < strlen(line); i=i+5)
{
strncpy(hex, &line[i], 4);
hex[5] = '\0';
packet_buffer[packet_length] = (int)strtol(hex, NULL, 16);
//printf("%s = 0x%02hhx = %c\n", hex, packet_buffer[packet_length], packet_buffer[packet_length]);
packet_length++;
}
packet_length--;
if (packet_buffer[PKT_DEST] == 0x33 && packet_buffer[PKT_CMD] == 0x25)
logiAqualinkMsg(packet_buffer, packet_length);
//if (packet_buffer[PKT_CMD] == 0x24 || packet_buffer[PKT_CMD] == 0x25) {
printf("To 0x%02hhx, type %15.15s, length %2.2d\n", packet_buffer[PKT_DEST], get_packet_type(packet_buffer, packet_length),packet_length);
fputs ( line, stdout );
//printf("Message : '");
//fwrite(packet_buffer + 4, 1, packet_length-7, stdout);
//printf("'\n");
//}
}
fclose ( file );
return 0;
}
/*
*** NOTES ***
iAqualink is ID 0x33
Two TEXT Message Types 0x24 & 0x25
0x24 seems to be menu options
0x25 seems to be status messages
*/

BIN
rs-test

Binary file not shown.

View File

@ -1 +0,0 @@
./touch/touch.c

View File

@ -1,794 +0,0 @@
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[7-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_PUMP):BTN_PDA_PUMP;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_PUMP;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_PUMP;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[6-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_SPA):BTN_PDA_SPA;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_SPA;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_SPA;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[5-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_AUX1):BTN_PDA_AUX1;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUX1;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUX1;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[4-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_AUX2):BTN_PDA_AUX2;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUX2;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUX2;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[3-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_AUX3):BTN_PDA_AUX3;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUX3;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUX3;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[9-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_AUX4):BTN_PDA_AUX4;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUX4;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUX4;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[8-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_AUX5):BTN_PDA_AUX5;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUX5;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUX5;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[12-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_AUX6):BTN_PDA_AUX6;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUX6;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUX6;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[1-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_AUX7):BTN_PDA_AUX7;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUX7;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUX7;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index-4].led = &aqdata->aqualinkleds[2-1]; // Change
aq_panel.c: aqdata->aqbuttons[index-4].code = KEY_RS16_AUX4;
aq_panel.c: aqdata->aqbuttons[index-3].led = &aqdata->aqualinkleds[11-1]; // Change
aq_panel.c: aqdata->aqbuttons[index-3].code = KEY_RS16_AUX5;
aq_panel.c: aqdata->aqbuttons[index-2].led = &aqdata->aqualinkleds[10-1]; // Change
aq_panel.c: aqdata->aqbuttons[index-2].code = KEY_RS16_AUX6;
aq_panel.c: aqdata->aqbuttons[index-1].led = &aqdata->aqualinkleds[9-1]; // change
aq_panel.c: aqdata->aqbuttons[index-1].code = KEY_RS16_AUX7;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[8-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUXB1); // AUX8
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUXB1;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUXB1;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[12-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUXB2); // AUX9
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUXB2;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUXB2;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[1-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUXB3); // AUX10
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUXB3;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUXB3;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[13-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUXB4); // AUX11
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUXB4;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUXB4;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[21-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[index].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUXB5);
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUXB5;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUXB5;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[22-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[index].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUXB6);
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUXB6;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUXB6;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[23-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[index].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUXB7);
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUXB7;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUXB7;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[24-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[index].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUXB8);
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUXB8;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUXB8;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[12-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = name2label(BTN_AUX6);
aq_panel.c: aqdata->aqbuttons[index].name = BTN_AUX6;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_AUX6;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[i].name = aqdata->aqbuttons[i+1].name;
aq_panel.c: aqdata->aqbuttons[i].label = aqdata->aqbuttons[i+1].label;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[15-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(combo?BTN_POOL_HTR:BTN_TEMP1_HTR):BTN_PDA_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[17-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(combo?BTN_SPA_HTR:BTN_TEMP2_HTR):BTN_PDA_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->aqbuttons[index].led = &aqdata->aqualinkleds[19-1];
aq_panel.c: aqdata->aqbuttons[index].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[index].label = rs?name2label(BTN_SOLAR_HTR):BTN_PDA_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[index].name = BTN_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[index].code = KEY_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[index].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[index].special_mask = 0;
aq_panel.c: aqdata->total_buttons = index;
aq_panel.c: //aqdata->single_device = !combo;
aq_panel.c: aqdata->rs16_vbutton_start = 13 - (combo?0:1);
aq_panel.c: aqdata->rs16_vbutton_end = 16 - (combo?0:1);
aq_panel.c: aqdata->pool_heater_index = index-3;
aq_panel.c: aqdata->spa_heater_index = index-2;
aq_panel.c: aqdata->solar_heater_index = index-1;
aq_panel.c: aqdata->aqbuttons[0].led = &aqdata->aqualinkleds[7-1];
aq_panel.c: aqdata->aqbuttons[0].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[0].label = name2label(BTN_PUMP);
aq_panel.c: aqdata->aqbuttons[0].name = BTN_PUMP;
aq_panel.c: aqdata->aqbuttons[0].code = KEY_PUMP;
aq_panel.c: aqdata->aqbuttons[0].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[1].led = &aqdata->aqualinkleds[6-1];
aq_panel.c: aqdata->aqbuttons[1].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[1].label = name2label(BTN_SPA);
aq_panel.c: aqdata->aqbuttons[1].name = BTN_SPA;
aq_panel.c: aqdata->aqbuttons[1].code = KEY_SPA;
aq_panel.c: aqdata->aqbuttons[1].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[2].led = &aqdata->aqualinkleds[5-1];
aq_panel.c: aqdata->aqbuttons[2].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[2].label = name2label(BTN_AUX1);
aq_panel.c: aqdata->aqbuttons[2].name = BTN_AUX1;
aq_panel.c: aqdata->aqbuttons[2].code = KEY_AUX1;
aq_panel.c: aqdata->aqbuttons[2].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[3].led = &aqdata->aqualinkleds[4-1];
aq_panel.c: aqdata->aqbuttons[3].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[3].label = name2label(BTN_AUX2);
aq_panel.c: aqdata->aqbuttons[3].name = BTN_AUX2;
aq_panel.c: aqdata->aqbuttons[3].code = KEY_AUX2;
aq_panel.c: aqdata->aqbuttons[3].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[4].led = &aqdata->aqualinkleds[3-1];
aq_panel.c: aqdata->aqbuttons[4].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[4].label = name2label(BTN_AUX3);
aq_panel.c: aqdata->aqbuttons[4].name = BTN_AUX3;
aq_panel.c: aqdata->aqbuttons[4].code = KEY_AUX3;
aq_panel.c: aqdata->aqbuttons[4].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[5].led = &aqdata->aqualinkleds[9-1];
aq_panel.c: aqdata->aqbuttons[5].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[5].label = name2label(BTN_AUX4);
aq_panel.c: aqdata->aqbuttons[5].name = BTN_AUX4;
aq_panel.c: aqdata->aqbuttons[5].code = KEY_AUX4;
aq_panel.c: aqdata->aqbuttons[5].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[6].led = &aqdata->aqualinkleds[8-1];
aq_panel.c: aqdata->aqbuttons[6].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[6].label = name2label(BTN_AUX5);
aq_panel.c: aqdata->aqbuttons[6].name = BTN_AUX5;
aq_panel.c: aqdata->aqbuttons[6].code = KEY_AUX5;
aq_panel.c: aqdata->aqbuttons[6].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[7].led = &aqdata->aqualinkleds[12-1];
aq_panel.c: aqdata->aqbuttons[7].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[7].label = name2label(BTN_AUX6);
aq_panel.c: aqdata->aqbuttons[7].name = BTN_AUX6;
aq_panel.c: aqdata->aqbuttons[7].code = KEY_AUX6;
aq_panel.c: aqdata->aqbuttons[7].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[8].led = &aqdata->aqualinkleds[1-1];
aq_panel.c: aqdata->aqbuttons[8].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[8].label = name2label(BTN_AUX7);
aq_panel.c: aqdata->aqbuttons[8].name = BTN_AUX7;
aq_panel.c: aqdata->aqbuttons[8].code = KEY_AUX7;
aq_panel.c: aqdata->aqbuttons[8].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[9].led = &aqdata->aqualinkleds[15-1];
aq_panel.c: aqdata->aqbuttons[9].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[9].label = name2label(BTN_POOL_HTR);
aq_panel.c: aqdata->aqbuttons[9].name = BTN_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[9].code = KEY_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[9].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[10].led = &aqdata->aqualinkleds[17-1];
aq_panel.c: aqdata->aqbuttons[10].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[10].label = name2label(BTN_SPA_HTR);
aq_panel.c: aqdata->aqbuttons[10].name = BTN_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[10].code = KEY_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[10].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[11].led = &aqdata->aqualinkleds[19-1];
aq_panel.c: aqdata->aqbuttons[11].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[11].label = name2label(BTN_SOLAR_HTR);
aq_panel.c: aqdata->aqbuttons[11].name = BTN_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[11].code = KEY_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[11].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[0].pda_label = BTN_PDA_PUMP;
aq_panel.c: aqdata->aqbuttons[1].pda_label = BTN_PDA_SPA;
aq_panel.c: aqdata->aqbuttons[2].pda_label = BTN_PDA_AUX1;
aq_panel.c: aqdata->aqbuttons[3].pda_label = BTN_PDA_AUX2;
aq_panel.c: aqdata->aqbuttons[4].pda_label = BTN_PDA_AUX3;
aq_panel.c: aqdata->aqbuttons[5].pda_label = BTN_PDA_AUX4;
aq_panel.c: aqdata->aqbuttons[6].pda_label = BTN_PDA_AUX5;
aq_panel.c: aqdata->aqbuttons[7].pda_label = BTN_PDA_AUX6;
aq_panel.c: aqdata->aqbuttons[7].pda_label = BTN_PDA_AUX6;
aq_panel.c: aqdata->aqbuttons[8].pda_label = BTN_PDA_AUX7;
aq_panel.c: aqdata->aqbuttons[9].pda_label = BTN_PDA_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[10].pda_label = BTN_PDA_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[11].pda_label = BTN_PDA_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[5].led = &aqdata->aqualinkleds[2-1]; // Change
aq_panel.c: aqdata->aqbuttons[5].code = KEY_RS16_AUX4;
aq_panel.c: aqdata->aqbuttons[6].led = &aqdata->aqualinkleds[11-1]; // Change
aq_panel.c: aqdata->aqbuttons[6].code = KEY_RS16_AUX5;
aq_panel.c: aqdata->aqbuttons[7].led = &aqdata->aqualinkleds[10-1]; // Change
aq_panel.c: aqdata->aqbuttons[7].code = KEY_RS16_AUX6;
aq_panel.c: aqdata->aqbuttons[8].led = &aqdata->aqualinkleds[9-1]; // change
aq_panel.c: aqdata->aqbuttons[8].code = KEY_RS16_AUX7;
aq_panel.c: aqdata->aqbuttons[9].led = &aqdata->aqualinkleds[8-1];
aq_panel.c: aqdata->aqbuttons[9].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[9].label = name2label(BTN_AUXB1); // AUX8
aq_panel.c: aqdata->aqbuttons[9].name = BTN_AUXB1;
aq_panel.c: aqdata->aqbuttons[9].code = KEY_AUXB1;
aq_panel.c: aqdata->aqbuttons[9].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[10].led = &aqdata->aqualinkleds[12-1];
aq_panel.c: aqdata->aqbuttons[10].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[10].label = name2label(BTN_AUXB2); // AUX9
aq_panel.c: aqdata->aqbuttons[10].name = BTN_AUXB2;
aq_panel.c: aqdata->aqbuttons[10].code = KEY_AUXB2;
aq_panel.c: aqdata->aqbuttons[10].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[11].led = &aqdata->aqualinkleds[1-1];
aq_panel.c: aqdata->aqbuttons[11].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[11].label = name2label(BTN_AUXB3); // AUX10
aq_panel.c: aqdata->aqbuttons[11].name = BTN_AUXB3;
aq_panel.c: aqdata->aqbuttons[11].code = KEY_AUXB3;
aq_panel.c: aqdata->aqbuttons[11].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[12].led = &aqdata->aqualinkleds[13-1];
aq_panel.c: aqdata->aqbuttons[12].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[12].label = name2label(BTN_AUXB4); // AUX11
aq_panel.c: aqdata->aqbuttons[12].name = BTN_AUXB4;
aq_panel.c: aqdata->aqbuttons[12].code = KEY_AUXB4;
aq_panel.c: aqdata->aqbuttons[12].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[13].led = &aqdata->aqualinkleds[21-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[13].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
aq_panel.c: aqdata->aqbuttons[13].label = name2label(BTN_AUXB5);
aq_panel.c: aqdata->aqbuttons[13].name = BTN_AUXB5;
aq_panel.c: aqdata->aqbuttons[13].code = KEY_AUXB5;
aq_panel.c: aqdata->aqbuttons[13].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[14].led = &aqdata->aqualinkleds[22-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[14].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
aq_panel.c: aqdata->aqbuttons[14].label = name2label(BTN_AUXB6);
aq_panel.c: aqdata->aqbuttons[14].name = BTN_AUXB6;
aq_panel.c: aqdata->aqbuttons[14].code = KEY_AUXB6;
aq_panel.c: aqdata->aqbuttons[14].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[15].led = &aqdata->aqualinkleds[23-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[15].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
aq_panel.c: aqdata->aqbuttons[15].label = name2label(BTN_AUXB7);
aq_panel.c: aqdata->aqbuttons[15].name = BTN_AUXB7;
aq_panel.c: aqdata->aqbuttons[15].code = KEY_AUXB7;
aq_panel.c: aqdata->aqbuttons[15].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[16].led = &aqdata->aqualinkleds[24-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[16].led->state = OFF; // Since there is no LED in data, set to off and allow messages to turn it on
aq_panel.c: aqdata->aqbuttons[16].label = name2label(BTN_AUXB8);
aq_panel.c: aqdata->aqbuttons[16].name = BTN_AUXB8;
aq_panel.c: aqdata->aqbuttons[16].code = KEY_AUXB8;
aq_panel.c: aqdata->aqbuttons[16].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[17].led = &aqdata->aqualinkleds[15-1];
aq_panel.c: aqdata->aqbuttons[17].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[17].label = name2label(BTN_POOL_HTR);
aq_panel.c: aqdata->aqbuttons[17].name = BTN_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[17].code = KEY_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[17].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[18].led = &aqdata->aqualinkleds[17-1];
aq_panel.c: aqdata->aqbuttons[18].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[18].label = name2label(BTN_SPA_HTR);
aq_panel.c: aqdata->aqbuttons[18].name = BTN_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[18].code = KEY_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[18].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[19].led = &aqdata->aqualinkleds[19-1];
aq_panel.c: aqdata->aqbuttons[19].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[19].label = name2label(BTN_SOLAR_HTR);
aq_panel.c: aqdata->aqbuttons[19].name = BTN_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[19].code = KEY_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[19].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[9].pda_label = BTN_PDA_AUX1;
aq_panel.c: aqdata->aqbuttons[10].pda_label = BTN_PDA_AUX2;
aq_panel.c: aqdata->aqbuttons[11].pda_label = BTN_PDA_AUX3;
aq_panel.c: aqdata->aqbuttons[12].pda_label = BTN_PDA_AUX4;
aq_panel.c: aqdata->aqbuttons[13].pda_label = BTN_PDA_AUX5;
aq_panel.c: aqdata->aqbuttons[14].pda_label = BTN_PDA_AUX6;
aq_panel.c: aqdata->aqbuttons[15].pda_label = BTN_PDA_AUX7;
aq_panel.c: aqdata->aqbuttons[16].pda_label = BTN_PDA_AUX7;
aq_panel.c: aqdata->aqbuttons[17].pda_label = BTN_PDA_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[18].pda_label = BTN_PDA_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[19].pda_label = BTN_PDA_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[0].led = &aqdata->aqualinkleds[7-1];
aq_panel.c: aqdata->aqbuttons[0].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[0].label = name2label(BTN_PUMP);
aq_panel.c: aqdata->aqbuttons[0].name = BTN_PUMP;
aq_panel.c: aqdata->aqbuttons[0].code = KEY_PUMP;
aq_panel.c: aqdata->aqbuttons[0].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[0].pda_label = BTN_PDA_PUMP;
aq_panel.c: aqdata->aqbuttons[1].led = &aqdata->aqualinkleds[6-1];
aq_panel.c: aqdata->aqbuttons[1].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[1].label = name2label(BTN_SPA);
aq_panel.c: aqdata->aqbuttons[1].name = BTN_SPA;
aq_panel.c: aqdata->aqbuttons[1].code = KEY_SPA;
aq_panel.c: aqdata->aqbuttons[1].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[1].pda_label = BTN_PDA_SPA;
aq_panel.c: aqdata->aqbuttons[2].led = &aqdata->aqualinkleds[5-1];
aq_panel.c: aqdata->aqbuttons[2].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[2].label = name2label(BTN_AUX1);
aq_panel.c: aqdata->aqbuttons[2].name = BTN_AUX1;
aq_panel.c: aqdata->aqbuttons[2].code = KEY_AUX1;
aq_panel.c: aqdata->aqbuttons[2].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[2].pda_label = BTN_PDA_AUX1;
aq_panel.c: aqdata->aqbuttons[3].led = &aqdata->aqualinkleds[4-1];
aq_panel.c: aqdata->aqbuttons[3].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[3].label = name2label(BTN_AUX2);
aq_panel.c: aqdata->aqbuttons[3].name = BTN_AUX2;
aq_panel.c: aqdata->aqbuttons[3].code = KEY_AUX2;
aq_panel.c: aqdata->aqbuttons[3].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[3].pda_label = BTN_PDA_AUX2;
aq_panel.c: aqdata->aqbuttons[4].led = &aqdata->aqualinkleds[3-1];
aq_panel.c: aqdata->aqbuttons[4].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[4].label = BTN_AUX3;
aq_panel.c: aqdata->aqbuttons[4].name = BTN_AUX3;
aq_panel.c: aqdata->aqbuttons[4].code = KEY_AUX3;
aq_panel.c: aqdata->aqbuttons[4].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[4].pda_label = BTN_PDA_AUX3;
aq_panel.c: aqdata->aqbuttons[5].led = &aqdata->aqualinkleds[2-1]; // Change
aq_panel.c: aqdata->aqbuttons[5].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[5].label = name2label(BTN_AUX4);
aq_panel.c: aqdata->aqbuttons[5].name = BTN_AUX4;
aq_panel.c: aqdata->aqbuttons[5].code = KEY_AUX4;
aq_panel.c: aqdata->aqbuttons[5].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[5].pda_label = BTN_PDA_AUX4;
aq_panel.c: aqdata->aqbuttons[6].led = &aqdata->aqualinkleds[11-1]; // Change
aq_panel.c: aqdata->aqbuttons[6].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[6].label = name2label(BTN_AUX5);
aq_panel.c: aqdata->aqbuttons[6].name = BTN_AUX5;
aq_panel.c: aqdata->aqbuttons[6].code = KEY_AUX5;
aq_panel.c: aqdata->aqbuttons[6].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[6].pda_label = BTN_PDA_AUX5;
aq_panel.c: aqdata->aqbuttons[7].led = &aqdata->aqualinkleds[10-1]; // Change
aq_panel.c: aqdata->aqbuttons[7].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[7].label = name2label(BTN_AUX6);
aq_panel.c: aqdata->aqbuttons[7].name = BTN_AUX6;
aq_panel.c: aqdata->aqbuttons[7].code = KEY_AUX6;
aq_panel.c: aqdata->aqbuttons[7].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[7].pda_label = BTN_PDA_AUX6;
aq_panel.c: aqdata->aqbuttons[8].led = &aqdata->aqualinkleds[9-1]; // change
aq_panel.c: aqdata->aqbuttons[8].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[8].label = name2label(BTN_AUX7);
aq_panel.c: aqdata->aqbuttons[8].name = BTN_AUX7;
aq_panel.c: aqdata->aqbuttons[8].code = KEY_AUX7;
aq_panel.c: aqdata->aqbuttons[8].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[8].pda_label = BTN_PDA_AUX7;
aq_panel.c: aqdata->aqbuttons[9].led = &aqdata->aqualinkleds[8-1];
aq_panel.c: aqdata->aqbuttons[9].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[9].label = name2label(BTN_AUXB1); // AUX8
aq_panel.c: aqdata->aqbuttons[9].name = BTN_AUXB1;
aq_panel.c: aqdata->aqbuttons[9].code = KEY_AUXB1;
aq_panel.c: aqdata->aqbuttons[9].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[9].pda_label = BTN_PDA_AUX1;
aq_panel.c: aqdata->aqbuttons[10].led = &aqdata->aqualinkleds[12-1];
aq_panel.c: aqdata->aqbuttons[10].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[10].label = name2label(BTN_AUXB2); // AUX9
aq_panel.c: aqdata->aqbuttons[10].name = BTN_AUXB2;
aq_panel.c: aqdata->aqbuttons[10].code = KEY_AUXB2;
aq_panel.c: aqdata->aqbuttons[10].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[10].pda_label = BTN_PDA_AUX2;
aq_panel.c: aqdata->aqbuttons[11].led = &aqdata->aqualinkleds[1-1];
aq_panel.c: aqdata->aqbuttons[11].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[11].label = name2label(BTN_AUXB3); // AUX10
aq_panel.c: aqdata->aqbuttons[11].name = BTN_AUXB3;
aq_panel.c: aqdata->aqbuttons[11].code = KEY_AUXB3;
aq_panel.c: aqdata->aqbuttons[11].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[11].pda_label = BTN_PDA_AUX3;
aq_panel.c: aqdata->aqbuttons[12].led = &aqdata->aqualinkleds[13-1];
aq_panel.c: aqdata->aqbuttons[12].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[12].label = name2label(BTN_AUXB4); // AUX11
aq_panel.c: aqdata->aqbuttons[12].name = BTN_AUXB4;
aq_panel.c: aqdata->aqbuttons[12].code = KEY_AUXB4;
aq_panel.c: aqdata->aqbuttons[12].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[12].pda_label = BTN_PDA_AUX4;
aq_panel.c: aqdata->aqbuttons[13].led = &aqdata->aqualinkleds[21-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[13].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[13].label = name2label(BTN_AUXB5);
aq_panel.c: aqdata->aqbuttons[13].name = BTN_AUXB5;
aq_panel.c: aqdata->aqbuttons[13].code = KEY_AUXB5;
aq_panel.c: aqdata->aqbuttons[13].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[13].pda_label = BTN_PDA_AUX5;
aq_panel.c: aqdata->aqbuttons[14].led = &aqdata->aqualinkleds[22-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[14].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[14].label = name2label(BTN_AUXB6);
aq_panel.c: aqdata->aqbuttons[14].name = BTN_AUXB6;
aq_panel.c: aqdata->aqbuttons[14].code = KEY_AUXB6;
aq_panel.c: aqdata->aqbuttons[14].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[14].pda_label = BTN_PDA_AUX6;
aq_panel.c: aqdata->aqbuttons[15].led = &aqdata->aqualinkleds[23-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[15].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[15].label = name2label(BTN_AUXB7);
aq_panel.c: aqdata->aqbuttons[15].name = BTN_AUXB7;
aq_panel.c: aqdata->aqbuttons[15].code = KEY_AUXB7;
aq_panel.c: aqdata->aqbuttons[15].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[15].pda_label = BTN_PDA_AUX7;
aq_panel.c: aqdata->aqbuttons[16].led = &aqdata->aqualinkleds[24-1]; // doesn't actually exist
aq_panel.c: aqdata->aqbuttons[16].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[16].label = name2label(BTN_AUXB8);
aq_panel.c: aqdata->aqbuttons[16].name = BTN_AUXB8;
aq_panel.c: aqdata->aqbuttons[16].code = KEY_AUXB8;
aq_panel.c: aqdata->aqbuttons[16].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[16].pda_label = BTN_PDA_AUX7;
aq_panel.c: aqdata->aqbuttons[17].led = &aqdata->aqualinkleds[15-1];
aq_panel.c: aqdata->aqbuttons[17].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[17].label = name2label(BTN_POOL_HTR);
aq_panel.c: aqdata->aqbuttons[17].name = BTN_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[17].code = KEY_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[17].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[17].pda_label = BTN_PDA_POOL_HTR;
aq_panel.c: aqdata->aqbuttons[18].led = &aqdata->aqualinkleds[17-1];
aq_panel.c: aqdata->aqbuttons[18].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[18].label = name2label(BTN_SPA_HTR);
aq_panel.c: aqdata->aqbuttons[18].name = BTN_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[18].code = KEY_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[18].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[18].pda_label = BTN_PDA_SPA_HTR;
aq_panel.c: aqdata->aqbuttons[19].led = &aqdata->aqualinkleds[19-1];
aq_panel.c: aqdata->aqbuttons[19].led->state = LED_S_UNKNOWN;
aq_panel.c: aqdata->aqbuttons[19].label = name2label(BTN_SOLAR_HTR);
aq_panel.c: aqdata->aqbuttons[19].name = BTN_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[19].code = KEY_SOLAR_HTR;
aq_panel.c: aqdata->aqbuttons[19].dz_idx = DZ_NULL_IDX;
aq_panel.c: aqdata->aqbuttons[19].pda_label = BTN_PDA_SOLAR_HTR;
aq_programmer.c: if ( aqdata->temp_units == CELSIUS ) {
aq_programmer.c: aqdata->spa_htr_set_point != TEMP_UNKNOWN &&
aq_programmer.c: min <= aqdata->spa_htr_set_point)
aq_programmer.c: min = aqdata->spa_htr_set_point + 1;
aq_programmer.c: if ( aqdata->temp_units == CELSIUS ) {
aq_programmer.c: aqdata->pool_htr_set_point != TEMP_UNKNOWN &&
aq_programmer.c: max >= aqdata->pool_htr_set_point)
aq_programmer.c: max = aqdata->pool_htr_set_point - 1;
aq_programmer.c: if ( aqdata->temp_units == CELSIUS ) {
aqualinkd.c: // Loop over only aqdata->aqbuttons[13] to aqdata->aqbuttons[16]
config.c: aqdata->aqbuttons[num].label = cleanalloc(indx+1);
config.c: aqdata->aqbuttons[num].dz_idx = strtoul(indx+1, NULL, 10);
config.c: aqdata->aqbuttons[num].pda_label = cleanalloc(indx+1);
config.c: aqdata->aqbuttons[num].label = cleanalloc(value);
config.c: aqdata->aqbuttons[num].dz_idx = strtoul(value, NULL, 10);
config.c: //aqdata->aqbuttons[num].pda_label = cleanalloc(value);
config.c: aqdata->aqbuttons[num].label = cleanalloc(value);
config.c: if (aqdata->num_lights < MAX_LIGHTS) {
config.c: aqdata->lights[aqdata->num_lights].button = &aqdata->aqbuttons[num];
config.c: aqdata->lights[aqdata->num_lights].lightType = type;
config.c: aqdata->num_lights++;
config.c: aqdata->aqbuttons[num].special_mask |= PROGRAM_LIGHT;
config.c: //aqdata->aqbuttons[num].pda_label = cleanalloc(value);
config.c: aqdata->pumps[pi].button = &aqdata->aqbuttons[num];
config.c: aqdata->pumps[pi].pumpID = strtoul(cleanalloc(value), NULL, 16);
config.c: aqdata->pumps[pi].pumpIndex = pi+1;
config.c: //aqdata->pumps[pi].buttonID = num;
config.c: if (aqdata->pumps[pi].pumpID < 119)
config.c: aqdata->pumps[pi].ptype = PENTAIR;
config.c: aqdata->pumps[pi].ptype = JANDY;
config.c: //aqdata->num_pumps
config.c: for (pi=0; pi < aqdata->num_pumps; pi++) {
config.c: if (aqdata->pumps[pi].button == &aqdata->aqbuttons[button]) {
config.c: return &aqdata->pumps[pi];
config.c: if (aqdata->num_pumps < MAX_PUMPS) {
config.c: aqdata->aqbuttons[button].special_mask |= VS_PUMP;
config.c: aqdata->pumps[aqdata->num_pumps].button = &aqdata->aqbuttons[button];
config.c: aqdata->pumps[aqdata->num_pumps].pumpType = PT_UNKNOWN;
config.c: aqdata->pumps[aqdata->num_pumps].rpm = TEMP_UNKNOWN;
config.c: aqdata->pumps[aqdata->num_pumps].watts = TEMP_UNKNOWN;
config.c: aqdata->pumps[aqdata->num_pumps].gpm = TEMP_UNKNOWN;
config.c: aqdata->num_pumps++;
config.c: return &aqdata->pumps[aqdata->num_pumps-1];
config.c: fprintf(fp, "button_%.2d_label = %s\n", i+1, aqdata->aqbuttons[i].label);
config.c: if (aqdata->aqbuttons[i].dz_idx > 0)
config.c: fprintf(fp, "button_%.2d_dzidx = %d\n", i+1, aqdata->aqbuttons[i].dz_idx);
config.c: if (aqdata->aqbuttons[i].pda_label != NULL)
config.c: fprintf(fp, "button_%.2d_PDA_label = %s\n", i+1, aqdata->aqbuttons[i].pda_label);
config_new.c: indx = sprintf(bufr, "button_%.2d_label = %s\n", i+1, aqdata->aqbuttons[i].label);
config_new.c: indx += sprintf(&bufr[indx], "button_%.2d_dzidx = %d\n", i+1, aqdata->aqbuttons[i].dz_idx);
config_new.c: if (aqdata->aqbuttons[i].pda_label != NULL)
config_new.c: indx += sprintf(&bufr[indx], "button_%.2d_PDA_label = %s\n", i+1, aqdata->aqbuttons[i].pda_label);
config_new.c: if ( aqdata->pumps[pi].button == &aqdata->aqbuttons[i] ) {
config_new.c: indx += sprintf(&bufr[indx],"button_%.2d_pumpID = 0x%02hhx\n", i+1, aqdata->pumps[pi].pumpID);
config_new.c: indx += sprintf(&bufr[indx],"button_%.2d_pumpIndex = %d\n", i+1, aqdata->pumps[pi].pumpIndex);
config_new.c: for (j = 0; j < aqdata->num_pumps; j++) {
config_new.c: if (aqdata->pumps[j].button == &aqdata->aqbuttons[i]) {
config_new.c: sprintf(vsp,"0x%02hhx",aqdata->pumps[j].pumpID);
config_new.c: alid = aqdata->pumps[j].pumpIndex;
config_new.c: aqdata->aqbuttons[i].name, aqdata->aqbuttons[i].label, vsp, alid, aqdata->aqbuttons[i].dz_idx,
config_new.c: aqdata->aqbuttons[i].name, aqdata->aqbuttons[i].label, vsp, alid,
config_new.c: aqdata->aqbuttons[i].pda_label, aqdata->aqbuttons[i].dz_idx );
config_new.c: for (j = 0; j < aqdata->num_pumps; j++) {
config_new.c: if (aqdata->pumps[j].button == &aqdata->aqbuttons[i]) {
config_new.c: vsp = aqdata->pumps[j].pumpID;
config_new.c: alid = aqdata->pumps[j].pumpIndex;
config_new.c: indx += sprintf(&bufr[indx], "{\"button\":\"%d\",\"label\":\"%s\",\"dzidx\":\"%d\"",i,aqdata->aqbuttons[i].label,aqdata->aqbuttons[i].dz_idx);
config_new.c: aqdata->aqbuttons[i].name, aqdata->aqbuttons[i].label, vsp, alid,
config_new.c: aqdata->aqbuttons[i].pda_label, aqdata->aqbuttons[i].dz_idx );
config_new.c: aqdata->aqbuttons[num].label = cleanalloc(value);
config_new.c: aqdata->aqbuttons[num].dz_idx = strtoul(value, NULL, 10);
config_new.c: aqdata->aqbuttons[num].pda_label = cleanalloc(value);
config_new.c: //aqdata->num_pumps
config_new.c: for (pi=0; pi < aqdata->num_pumps; pi++) {
config_new.c: if (aqdata->pumps[pi].button == &aqdata->aqbuttons[button]) {
config_new.c: return &aqdata->pumps[pi];
config_new.c: if (aqdata->num_pumps < MAX_PUMPS) {
config_new.c: aqdata->pumps[aqdata->num_pumps].button = &aqdata->aqbuttons[button];
config_new.c: aqdata->pumps[aqdata->num_pumps].pumpType = PT_UNKNOWN;
config_new.c: aqdata->pumps[aqdata->num_pumps].rpm = TEMP_UNKNOWN;
config_new.c: aqdata->pumps[aqdata->num_pumps].watts = TEMP_UNKNOWN;
config_new.c: aqdata->pumps[aqdata->num_pumps].gpm = TEMP_UNKNOWN;
config_new.c: aqdata->num_pumps++;
config_new.c: return &aqdata->pumps[aqdata->num_pumps-1];
devices_jandy.c: if (packet[3] == CMD_PERCENT && aqdata->active_thread.thread_id == 0 && packet[4] != 0xFF) {
devices_jandy.c: if (aqdata->swg_percent != (int)packet[4]) {
devices_jandy.c: aqdata->swg_percent = (int)packet[4];
devices_jandy.c: aqdata->updated = true;
devices_jandy.c: LOG(DJAN_LOG, LOG_DEBUG, "Set SWG %% to %d from control panel packet to SWG\n", aqdata->swg_percent);
devices_jandy.c: if (aqdata->swg_percent != (int)packet[4]) {
devices_jandy.c: aqdata->swg_percent = (int)packet[4];
devices_jandy.c: aqdata->updated = true;
devices_jandy.c: if (aqdata->swg_percent > 100)
devices_jandy.c: aqdata->boost = true;
devices_jandy.c: aqdata->boost = false;
devices_jandy.c: //aqdata->ar_swg_device_status = packet[5];
devices_jandy.c: if (aqdata->swg_delayed_percent != TEMP_UNKNOWN && aqdata->ar_swg_device_status == SWG_STATUS_ON) { // We have a delayed % to set.
devices_jandy.c: snprintf(sval, 9, "%d", aqdata->swg_delayed_percent);
devices_jandy.c: LOG(DJAN_LOG, LOG_NOTICE, "Setting SWG %% to %d, from delayed message\n", aqdata->swg_delayed_percent);
devices_jandy.c: aqdata->swg_delayed_percent = TEMP_UNKNOWN;
devices_jandy.c: if ( (packet[4] * 100) != aqdata->swg_ppm ) {
devices_jandy.c: aqdata->swg_ppm = packet[4] * 100;
devices_jandy.c: LOG(DJAN_LOG, LOG_DEBUG, "Set SWG PPM to %d from SWG packet\n", aqdata->swg_ppm);
devices_jandy.c: aqdata->updated = true;
devices_jandy.c: if ( aqdata->ar_swg_device_status != SWG_STATUS_UNKNOWN && isIAQT_ENABLED == false && isONET_ENABLED == false )
devices_jandy.c: if (aqdata->ar_swg_device_status == status)
devices_jandy.c: if (aqdata->ar_swg_device_status > SWG_STATUS_ON &&
devices_jandy.c: aqdata->ar_swg_device_status < SWG_STATUS_TURNING_OFF) {
devices_jandy.c: LOG(DJAN_LOG, LOG_DEBUG, "Ignoreing set SWG device state to '0x%02hhx', request from %d\n", aqdata->ar_swg_device_status, requester);
devices_jandy.c: aqdata->ar_swg_device_status = status;
devices_jandy.c: aqdata->swg_led_state = isSWGDeviceErrorState(status)?ENABLE:ON;
devices_jandy.c: aqdata->ar_swg_device_status = status;
devices_jandy.c: aqdata->swg_led_state = OFF;
devices_jandy.c: LOG(DJAN_LOG, LOG_DEBUG, "Set SWG device state to '0x%02hhx', request from %d\n", aqdata->ar_swg_device_status, requester);
devices_jandy.c: aqdata->boost = false;
devices_jandy.c: aqdata->boost_msg[0] = '\0';
devices_jandy.c: aqdata->swg_percent = 0;
devices_jandy.c: aqdata->boost = true;
devices_jandy.c: aqdata->swg_percent = 101;
devices_jandy.c: LOG(DJAN_LOG, LOG_DEBUG, "Ignoring set SWG %% to %d due to programming SWG\n", aqdata->swg_percent);
devices_jandy.c: if (aqdata->ar_swg_device_status != SWG_STATUS_OFF || aqdata->swg_led_state != OFF)
devices_jandy.c: aqdata->updated = true;
devices_jandy.c: aqdata->ar_swg_device_status = SWG_STATUS_OFF;
devices_jandy.c: aqdata->swg_led_state = OFF;
devices_jandy.c: if (aqdata->swg_led_state != ENABLE) {
devices_jandy.c: aqdata->updated = true;
devices_jandy.c: aqdata->swg_led_state = ENABLE;
devices_jandy.c: aqdata->swg_percent = percent;
devices_jandy.c: aqdata->updated = true;
devices_jandy.c: if (aqdata->swg_percent > 0) {
devices_jandy.c: if (aqdata->swg_led_state == OFF || (aqdata->swg_led_state == ENABLE && ! isSWGDeviceErrorState(aqdata->ar_swg_device_status)) ) // Don't change ENABLE / FLASH
devices_jandy.c: aqdata->swg_led_state = ON;
devices_jandy.c: if (aqdata->ar_swg_device_status == SWG_STATUS_UNKNOWN)
devices_jandy.c: aqdata->ar_swg_device_status = SWG_STATUS_ON;
devices_jandy.c: } if ( aqdata->swg_percent == 0 ) {
devices_jandy.c: if (aqdata->swg_led_state == ON)
devices_jandy.c: aqdata->swg_led_state = ENABLE; // Don't change OFF
devices_jandy.c: if (aqdata->ar_swg_device_status == SWG_STATUS_UNKNOWN)
devices_jandy.c: aqdata->ar_swg_device_status = SWG_STATUS_ON; // Maybe this should be off
devices_jandy.c: LOG(DJAN_LOG, LOG_DEBUG, "Set SWG %% to %d, LED=%d, FullStatus=0x%02hhx\n", aqdata->swg_percent, aqdata->swg_led_state, aqdata->ar_swg_device_status);
devices_jandy.c: switch (aqdata->ar_swg_device_status) {
devices_jandy.c: return (aqdata->swg_percent > 0?ON:ENABLE);
devices_jandy.c: return (aqdata->swg_percent > 0?ON:ENABLE);
devices_jandy.c: return (aqdata->swg_percent > 0?ON:ENABLE);
devices_jandy.c: return (aqdata->swg_percent > 0?ON:ENABLE);
devices_jandy.c: return (aqdata->swg_percent > 0?ON:ENABLE);
devices_jandy.c: return (aqdata->swg_percent > 0?ON:ENABLE);
devices_jandy.c: switch (aqdata->ar_swg_device_status) {
devices_jandy.c: *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
devices_jandy.c: *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
devices_jandy.c: *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
devices_jandy.c: *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
devices_jandy.c: *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
devices_jandy.c: *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
devices_jandy.c: *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
devices_jandy.c: for (i=0; i < aqdata->num_pumps; i++) {
devices_jandy.c: if (aqdata->pumps[i].pumpID == packet_buffer[PKT_DEST]) {
devices_jandy.c: LOG(DJAN_LOG, LOG_DEBUG, "Last panel info RPM:%d GPM:%d WATTS:%d\n", aqdata->pumps[i].rpm, aqdata->pumps[i].gpm, aqdata->pumps[i].watts);
devices_pentair.c: if ( aqdata->pumps[i].prclType == PENTAIR && aqdata->pumps[i].pumpID == packet[PEN_PKT_FROM] ) {
devices_pentair.c: aqdata->pumps[i].rpm = (packet[PEN_HI_B_RPM] * 256) + packet[PEN_LO_B_RPM];
devices_pentair.c: aqdata->pumps[i].watts = (packet[PEN_HI_B_WAT] * 256) + packet[PEN_LO_B_WAT];
devices_pentair.c: if ( pumpIndex < aqdata->num_pumps && pumpIndex < 0) {
devices_pentair.c: aqdata->pumps[pumpIndex-1].rpm = atoi((char *) &packet_buffer[13]);
devices_pentair.c: aqdata->pumps[pumpIndex-1].gph = atoi((char *) &packet_buffer[13]);
devices_pentair.c: aqdata->pumps[pumpIndex-1].watts = atoi((char *) &packet_buffer[13]);
json_messages.c: if (aqdata->active_thread.thread_id != 0 && !aqdata->simulate_panel) {
json_messages.c: return programtypeDisplayName(aqdata->active_thread.ptype);
json_messages.c: //if (aqdata->last_message != NULL && stristr(aqdata->last_message, "SERVICE") != NULL ) {
json_messages.c: if (aqdata->service_mode_state == ON) {
json_messages.c: } else if (aqdata->service_mode_state == FLASH) {
json_messages.c: if (aqdata->last_display_message[0] != '\0') {
json_messages.c: for(i=0; i < strlen(aqdata->last_display_message); i++ ) {
json_messages.c: if (aqdata->last_display_message[i] <= 31 || aqdata->last_display_message[i] >= 127) {
json_messages.c: aqdata->last_display_message[i] = ' ';
json_messages.c: switch (aqdata->last_display_message[i]) {
json_messages.c: aqdata->last_display_message[i] = ' ';
json_messages.c: //printf("JSON Sending '%s'\n",aqdata->last_display_message);
json_messages.c: return aqdata->last_display_message;
json_messages.c: if (aqdata->display_last_message == true) {
json_messages.c: return aqdata->last_message;
json_messages.c: for (i=0; i < aqdata->num_pumps; i++) {
json_messages.c: if (button == aqdata->pumps[i].button) {
json_messages.c: aqdata->pumps[i].rpm,aqdata->pumps[i].gpm,aqdata->pumps[i].watts,
json_messages.c: (aqdata->pumps[i].pumpType==VFPUMP?"vfPump":(aqdata->pumps[i].pumpType==VSPUMP?"vsPump":"ePump")));
json_messages.c: for (i=0; i < aqdata->num_lights; i++) {
json_messages.c: if (button == aqdata->lights[i].button) {
json_messages.c: length += sprintf(buffer, ",\"type_ext\": \"switch_program\", \"Light_Type\":\"%d\"", aqdata->lights[i].lightType);
json_messages.c: bool homekit_f = (homekit && aqdata->temp_units==FAHRENHEIT);
json_messages.c: length += sprintf(buffer+length, ",\"date\":\"%s\"",aqdata->date );//"09/01/16 THU",
json_messages.c: length += sprintf(buffer+length, ",\"time\":\"%s\"",aqdata->time );//"1:16 PM",
json_messages.c: if ( aqdata->temp_units == FAHRENHEIT )
json_messages.c: else if ( aqdata->temp_units == CELSIUS )
json_messages.c: for (i=0; i < aqdata->total_buttons; i++)
json_messages.c: if ( strcmp(BTN_POOL_HTR,aqdata->aqbuttons[i].name) == 0 && aqdata->pool_htr_set_point != TEMP_UNKNOWN) {
json_messages.c: aqdata->aqbuttons[i].name,
json_messages.c: aqdata->aqbuttons[i].label,
json_messages.c: aqdata->aqbuttons[i].led->state==ON?JSON_ON:JSON_OFF,
json_messages.c: LED2text(aqdata->aqbuttons[i].led->state),
json_messages.c: ((homekit_f)?degFtoC(aqdata->pool_htr_set_point):aqdata->pool_htr_set_point),
json_messages.c: ((homekit_f)?degFtoC(aqdata->pool_temp):aqdata->pool_temp),
json_messages.c: LED2int(aqdata->aqbuttons[i].led->state));
json_messages.c: } else if ( strcmp(BTN_SPA_HTR,aqdata->aqbuttons[i].name)==0 && aqdata->spa_htr_set_point != TEMP_UNKNOWN) {
json_messages.c: aqdata->aqbuttons[i].name,
json_messages.c: aqdata->aqbuttons[i].label,
json_messages.c: aqdata->aqbuttons[i].led->state==ON?JSON_ON:JSON_OFF,
json_messages.c: LED2text(aqdata->aqbuttons[i].led->state),
json_messages.c: ((homekit_f)?degFtoC(aqdata->spa_htr_set_point):aqdata->spa_htr_set_point),
json_messages.c: ((homekit_f)?degFtoC(aqdata->spa_temp):aqdata->spa_temp),
json_messages.c: LED2int(aqdata->aqbuttons[i].led->state));
json_messages.c: get_aux_information(&aqdata->aqbuttons[i], aqdata, aux_info);
json_messages.c: aqdata->aqbuttons[i].name,
json_messages.c: aqdata->aqbuttons[i].label,
json_messages.c: aqdata->aqbuttons[i].led->state==ON?JSON_ON:JSON_OFF,
json_messages.c: LED2text(aqdata->aqbuttons[i].led->state),
json_messages.c: LED2int(aqdata->aqbuttons[i].led->state),
json_messages.c: aqdata->aqbuttons[i].name,
json_messages.c: aqdata->aqbuttons[i].label,
json_messages.c: aqdata->aqbuttons[i].led->state==ON?JSON_ON:JSON_OFF,
json_messages.c: LED2text(aqdata->aqbuttons[i].led->state),
json_messages.c: LED2int(aqdata->aqbuttons[i].led->state));
json_messages.c: if ( get_aux_information(&aqdata->aqbuttons[i], aqdata, aux_info)[0] == '\0' ) {
json_messages.c: aqdata->aqbuttons[i].name,
json_messages.c: aqdata->aqbuttons[i].label,
json_messages.c: aqdata->aqbuttons[i].led->state==ON?JSON_ON:JSON_OFF,
json_messages.c: LED2text(aqdata->aqbuttons[i].led->state),
json_messages.c: LED2int(aqdata->aqbuttons[i].led->state));
json_messages.c: aqdata->aqbuttons[i].name,
json_messages.c: aqdata->aqbuttons[i].label,
json_messages.c: aqdata->aqbuttons[i].led->state==ON?JSON_ON:JSON_OFF,
json_messages.c: LED2text(aqdata->aqbuttons[i].led->state),
json_messages.c: LED2int(aqdata->aqbuttons[i].led->state),
json_messages.c: //get_aux_information(&aqdata->aqbuttons[i], aqdata, aux_info));
json_messages.c: if ( aqdata->frz_protect_set_point != TEMP_UNKNOWN && aqdata->air_temp != TEMP_UNKNOWN) {
json_messages.c: aqdata->frz_protect_state==ON?JSON_ON:JSON_OFF,
json_messages.c: aqdata->frz_protect_state==ON?LED2text(ON):LED2text(ENABLE),
json_messages.c: ((homekit_f)?degFtoC(aqdata->frz_protect_set_point):aqdata->frz_protect_set_point),
json_messages.c: ((homekit_f)?degFtoC(aqdata->air_temp):aqdata->air_temp),
json_messages.c: aqdata->frz_protect_state==ON?1:0);
json_messages.c: if (aqdata->swg_led_state != LED_S_UNKNOWN) {
json_messages.c: if ( aqdata->swg_percent != TEMP_UNKNOWN ) {
json_messages.c: //aqdata->ar_swg_status == SWG_STATUS_OFF?JSON_OFF:JSON_ON,
json_messages.c: aqdata->swg_led_state == OFF?JSON_OFF:JSON_ON,
json_messages.c: LED2text(aqdata->swg_led_state),
json_messages.c: ((homekit_f)?degFtoC(aqdata->swg_percent):aqdata->swg_percent),
json_messages.c: ((homekit_f)?degFtoC(aqdata->swg_percent):aqdata->swg_percent),
json_messages.c: LED2int(aqdata->swg_led_state) );
json_messages.c: //aqdata->ar_swg_status == SWG_STATUS_OFF?LED2int(OFF):LED2int(ON));
json_messages.c: ((homekit_f)?degFtoC(aqdata->swg_percent):aqdata->swg_percent));
json_messages.c: aqdata->boost?JSON_ON:JSON_OFF,
json_messages.c: aqdata->boost?JSON_ON:JSON_OFF,
json_messages.c: aqdata->boost?LED2int(ON):LED2int(OFF));
json_messages.c: if ( aqdata->swg_ppm != TEMP_UNKNOWN ) {
json_messages.c: ((homekit_f)?roundf(degFtoC(aqdata->swg_ppm)):aqdata->swg_ppm));
json_messages.c: aqdata->swg_ppm);
json_messages.c: if ( aqdata->ph != TEMP_UNKNOWN ) {
json_messages.c: ((homekit_f)?(degFtoC(aqdata->ph)):aqdata->ph));
json_messages.c: if ( aqdata->orp != TEMP_UNKNOWN ) {
json_messages.c: ((homekit_f)?(degFtoC(aqdata->orp)):aqdata->orp));
json_messages.c: ((homekit_f)?degFtoC(aqdata->air_temp):aqdata->air_temp));
json_messages.c: ((homekit_f)?degFtoC(aqdata->air_temp):aqdata->pool_temp));
json_messages.c: ((homekit_f)?degFtoC(aqdata->air_temp):aqdata->spa_temp));
json_messages.c: length += sprintf(buffer+length, ",\"panel_message\":\"%s\"",aqdata->last_message );
json_messages.c: //length += sprintf(buffer+length, ",\"message\":\"%s\"",aqdata->message );
json_messages.c: length += sprintf(buffer+length, ",\"version\":\"%s\"",aqdata->version );//8157 REV MMM",
json_messages.c: length += sprintf(buffer+length, ",\"date\":\"%s\"",aqdata->date );//"09/01/16 THU",
json_messages.c: length += sprintf(buffer+length, ",\"time\":\"%s\"",aqdata->time );//"1:16 PM",
json_messages.c: //length += sprintf(buffer+length, ",\"air_temp\":\"%d\"",aqdata->air_temp );//"96",
json_messages.c: //length += sprintf(buffer+length, ",\"pool_temp\":\"%d\"",aqdata->pool_temp );//"86",
json_messages.c: //length += sprintf(buffer+length, ",\"spa_temp\":\"%d\"",aqdata->spa_temp );//" ",
json_messages.c: length += sprintf(buffer+length, ",\"pool_htr_set_pnt\":\"%d\"",aqdata->pool_htr_set_point );//"85",
json_messages.c: length += sprintf(buffer+length, ",\"spa_htr_set_pnt\":\"%d\"",aqdata->spa_htr_set_point );//"99",
json_messages.c: //length += sprintf(buffer+length, ",\"freeze_protection":\"%s\"",aqdata->frz_protect_set_point );//"off",
json_messages.c: length += sprintf(buffer+length, ",\"frz_protect_set_pnt\":\"%d\"",aqdata->frz_protect_set_point );//"0",
json_messages.c: if ( aqdata->air_temp == TEMP_UNKNOWN )
json_messages.c: length += sprintf(buffer+length, ",\"air_temp\":\"%d\"",aqdata->air_temp );
json_messages.c: if ( aqdata->pool_temp == TEMP_UNKNOWN )
json_messages.c: length += sprintf(buffer+length, ",\"pool_temp\":\"%d\"",aqdata->pool_temp );
json_messages.c: if ( aqdata->spa_temp == TEMP_UNKNOWN )
json_messages.c: length += sprintf(buffer+length, ",\"spa_temp\":\"%d\"",aqdata->spa_temp );
json_messages.c: if (aqdata->swg_led_state != LED_S_UNKNOWN) {
json_messages.c: if ( aqdata->swg_percent != TEMP_UNKNOWN )
json_messages.c: length += sprintf(buffer+length, ",\"swg_percent\":\"%d\"",aqdata->swg_percent );
json_messages.c: if ( aqdata->swg_ppm != TEMP_UNKNOWN )
json_messages.c: length += sprintf(buffer+length, ",\"swg_ppm\":\"%d\"",aqdata->swg_ppm );
json_messages.c: if ( aqdata->temp_units == FAHRENHEIT )
json_messages.c: else if ( aqdata->temp_units == CELSIUS )
json_messages.c: if (aqdata->battery == OK)
json_messages.c: if ( aqdata->swg_percent == 101 )
json_messages.c: length += sprintf(buffer+length, ",\"swg_boost_msg\":\"%s\"",aqdata->boost_msg );
json_messages.c: if ( aqdata->ph != TEMP_UNKNOWN )
json_messages.c: length += sprintf(buffer+length, ",\"chem_ph\":\"%.1f\"",aqdata->ph );
json_messages.c: if ( aqdata->orp != TEMP_UNKNOWN )
json_messages.c: length += sprintf(buffer+length, ",\"chem_orp\":\"%d\"",aqdata->orp );
json_messages.c: for (i=0; i < aqdata->total_buttons; i++)
json_messages.c: char *state = LED2text(aqdata->aqbuttons[i].led->state);
json_messages.c: length += sprintf(buffer+length, "\"%s\": \"%s\"", aqdata->aqbuttons[i].name, state);
json_messages.c: if (i+1 < aqdata->total_buttons)
json_messages.c: if ( aqdata->swg_percent != TEMP_UNKNOWN && aqdata->swg_led_state != LED_S_UNKNOWN ) {
json_messages.c: length += sprintf(buffer+length, ", \"%s\": \"%s\"", SWG_TOPIC, LED2text(aqdata->swg_led_state));
json_messages.c: //length += sprintf(buffer+length, ", \"%s\": \"%s\"", SWG_TOPIC, aqdata->ar_swg_status == SWG_STATUS_OFF?JSON_OFF:JSON_ON);
json_messages.c: length += sprintf(buffer+length, ", \"%s\": \"%s\"", SWG_BOOST_TOPIC, aqdata->boost?JSON_ON:JSON_OFF);
json_messages.c: if ( aqdata->frz_protect_set_point != TEMP_UNKNOWN ) {
json_messages.c: length += sprintf(buffer+length, ", \"%s\": \"%s\"", FREEZE_PROTECT, aqdata->frz_protect_state==ON?JSON_ON:JSON_ENABLED);
json_messages.c: for (i=0; i < aqdata->num_pumps; i++) {
json_messages.c:printf("Pump Label %s\n",aqdata->pumps[i].button->label);
json_messages.c:printf("Pump Name %s\n",aqdata->pumps[i].button->name);
json_messages.c:printf("Pump RPM %d\n",aqdata->pumps[i].rpm);
json_messages.c:printf("Pump GPM %d\n",aqdata->pumps[i].gpm);
json_messages.c:printf("Pump GPM %d\n",aqdata->pumps[i].watts);
json_messages.c:printf("Pump Type %d\n",aqdata->pumps[i].pumpType);
json_messages.c: if (aqdata->pumps[i].pumpType != PT_UNKNOWN && (aqdata->pumps[i].rpm != TEMP_UNKNOWN || aqdata->pumps[i].gpm != TEMP_UNKNOWN || aqdata->pumps[i].watts != TEMP_UNKNOWN)) {
json_messages.c: i+1,aqdata->pumps[i].button->label,aqdata->pumps[i].button->name,aqdata->pumps[i].rpm,aqdata->pumps[i].gpm,aqdata->pumps[i].watts,
json_messages.c: (aqdata->pumps[i].pumpType==VFPUMP?"vfPump":(aqdata->pumps[i].pumpType==VSPUMP?"vsPump":"ePump")));
json_messages.c: for (i=0; i < aqdata->total_buttons; i++)
json_messages.c: length += sprintf(buffer+length, ",\"%s\": \"%s\"", aqdata->aqbuttons[i].name, aqdata->aqbuttons[i].label);
net_services.c: if (aqdata->updated == true /*|| _broadcast == true*/) {
net_services.c: aqdata->updated = false;
serialadapter.c: val = setpoint_check(POOL_HTR_SETOINT, aqdata->pool_htr_set_point + val, aqdata);
serialadapter.c: LOG(RSSA_LOG,LOG_DEBUG, "Increasing pool heater from %d to %d\n",aqdata->pool_htr_set_point,val);
serialadapter.c: val = setpoint_check(SPA_HTR_SETOINT, aqdata->spa_htr_set_point + val, aqdata);
serialadapter.c: LOG(RSSA_LOG,LOG_DEBUG, "Increasing spa heater from %d to %d\n",aqdata->spa_htr_set_point,val);

View File

@ -1,3 +1,20 @@
/*
* Copyright (c) 2017 Shaun Feakes - All rights reserved
*
* You may use redistribute and/or modify this code under the terms of
* the GNU General Public License version 2 as published by the
* Free Software Foundation. For the terms of this license,
* see <http://www.gnu.org/licenses/>.
*
* You are free to use this software under the terms of the GNU General
* Public License, but WITHOUT ANY WARRANTY; without even the implied
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* https://github.com/sfeakes/aqualinkd
*/
#include <stdio.h>
#include <string.h>