mirror of https://github.com/sfeakes/AqualinkD.git
Updates for Salt Water Generator support
parent
3265491d53
commit
71a9617d57
11
Makefile
11
Makefile
|
@ -18,6 +18,8 @@ $DBG =
|
|||
CFLAGS = -Wall $(DBG) $(LIBS) -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_AUTH -D MG_DISABLE_MD5 -D MG_DISABLE_JSON_RPC
|
||||
#CFLAGS = -Wall $(DBG) $(LIBS) -D MG_DISABLE_MQTT -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_AUTH -D MG_DISABLE_MD5 -D MG_DISABLE_JSON_RPC
|
||||
|
||||
INCLUDES = -I/nas/data/Development/Raspberry/aqualink/aqualinkd
|
||||
|
||||
# Add inputs and outputs from these tool invocations to the build variables
|
||||
|
||||
# define the C source files
|
||||
|
@ -25,15 +27,18 @@ SRCS = aqualinkd.c utils.c config.c aq_serial.c init_buttons.c aq_programmer.c n
|
|||
|
||||
SL_SRC = serial_logger.c aq_serial.c utils.c
|
||||
AL_SRC = aquarite_logger.c aq_serial.c utils.c
|
||||
AR_SRC = aquarite/aquarited.c aquarite/ar_net_services.c aquarite/ar_config.c aq_serial.c utils.c mongoose.c json_messages.c config.c
|
||||
|
||||
OBJS = $(SRCS:.c=.o)
|
||||
SL_OBJS = $(SL_SRC:.c=.o)
|
||||
AL_OBJS = $(AL_SRC:.c=.o)
|
||||
AR_OBJS = $(AR_SRC:.c=.o)
|
||||
|
||||
# define the executable file
|
||||
MAIN = ./release/aqualinkd
|
||||
SLOG = ./release/serial_logger
|
||||
AQUARITELOG = ./release/aquarite_logger
|
||||
AQUARITED = ./release/aquarited
|
||||
|
||||
all: $(MAIN)
|
||||
@echo: $(MAIN) have been compiled
|
||||
|
@ -54,6 +59,12 @@ aquaritelog: $(AQUARITELOG)
|
|||
$(AQUARITELOG): $(AL_OBJS)
|
||||
$(CC) $(CFLAGS) $(INCLUDES) -o $(AQUARITELOG) $(AL_OBJS)
|
||||
|
||||
aquarited: $(AQUARITED)
|
||||
@echo: $(AQUARITED) have been compiled
|
||||
|
||||
$(AQUARITED): $(AR_OBJS)
|
||||
$(CC) $(CFLAGS) $(INCLUDES) -o $(AQUARITED) $(AR_OBJS)
|
||||
|
||||
# this is a suffix replacement rule for building .o's from .c's
|
||||
# it uses automatic variables $<: the name of the prerequisite of
|
||||
# the rule(a .c file) and $@: the name of the target of the rule (a .o file)
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
To 0x50 of type Probe | HEX: 0x10|0x02|0x50|0x00|0x62|0x10|0x03|
|
||||
|
||||
To 0x50 of type Probe | HEX: 0x10|0x02|0x50|0x00|0x62|0x10|0x03|
|
||||
|
||||
To 0x50 of type Probe | HEX: 0x10|0x02|0x50|0x00|0x62|0x10|0x03|
|
||||
|
||||
To 0x50 of type Probe | HEX: 0x10|0x02|0x50|0x00|0x62|0x10|0x03|
|
||||
|
||||
To 0x50 of type Probe | HEX: 0x10|0x02|0x50|0x00|0x62|0x10|0x03|
|
||||
From 0x50 of type Message | HEX: 0x10|0x02|0x00|0x03|0x02|0x42|0x4f|0x4f|0x53|0x54|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x9e|0x10|0x03| Message : BOOST
|
|
@ -0,0 +1,24 @@
|
|||
|
||||
To 0x53 of type Probe | HEX: 0x10|0x02|0x53|0x00|0x65|0x10|0x03|
|
||||
|
||||
To 0x50 of type Probe | HEX: 0x10|0x02|0x50|0x00|0x62|0x10|0x03|
|
||||
|
||||
To 0x51 of type Probe | HEX: 0x10|0x02|0x51|0x00|0x63|0x10|0x03|
|
||||
|
||||
To 0x52 of type Probe | HEX: 0x10|0x02|0x52|0x00|0x64|0x10|0x03|
|
||||
|
||||
To 0x53 of type Probe | HEX: 0x10|0x02|0x53|0x00|0x65|0x10|0x03|
|
||||
|
||||
To 0x50 of type Probe | HEX: 0x10|0x02|0x50|0x00|0x62|0x10|0x03|
|
||||
|
||||
To 0x51 of type Probe | HEX: 0x10|0x02|0x51|0x00|0x63|0x10|0x03|
|
||||
|
||||
To 0x52 of type Probe | HEX: 0x10|0x02|0x52|0x00|0x64|0x10|0x03|
|
||||
|
||||
To 0x53 of type Probe | HEX: 0x10|0x02|0x53|0x00|0x65|0x10|0x03|
|
||||
|
||||
To 0x50 of type Probe | HEX: 0x10|0x02|0x50|0x00|0x62|0x10|0x03|
|
||||
From 0x50 of type Ack | HEX: 0x10|0x02|0x00|0x01|0x00|0x00|0x13|0x10|0x03|
|
||||
|
||||
To 0x50 of type GetID | HEX: 0x10|0x02|0x50|0x14|0x00|0x76|0x10|0x03|
|
||||
From 0x50 of type Message | HEX: 0x10|0x02|0x00|0x03|0x02|0x42|0x4f|0x4f|0x53|0x54|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x00|0x9e|0x10|0x03| Message : BOOST
|
10
aq_mqtt.h
10
aq_mqtt.h
|
@ -7,7 +7,12 @@
|
|||
#define POOL_TEMP_TOPIC "Temperature/Pool"
|
||||
#define SPA_TEMP_TOPIC "Temperature/Spa"
|
||||
#define SWG_PERCENT_TOPIC "SWG/Percent"
|
||||
#define SWG_PERCENT_F_TOPIC "SWG/Percent_f"
|
||||
#define SWG_PPM_TOPIC "SWG/PPM"
|
||||
#define SWG_TOPIC "SWG"
|
||||
|
||||
#define SWG_ON 1
|
||||
#define SWG_OFF 0
|
||||
|
||||
#define FREEZE_PROTECT "Freeze_Protect"
|
||||
|
||||
|
@ -18,5 +23,6 @@
|
|||
#define MEATER_MIN 36
|
||||
#define FREEZE_PT_MAX 42
|
||||
#define FREEZE_PT_MIN 36
|
||||
|
||||
#endif // AQ_MQTT_H_
|
||||
#define SWG_PERCENT_MAX 101
|
||||
#define SWG_PERCENT_MIN 0
|
||||
#endif // AQ_MQTT_H_
|
||||
|
|
106
aq_programmer.c
106
aq_programmer.c
|
@ -44,6 +44,7 @@ void *get_aqualink_diag_model( void *ptr );
|
|||
void *threadded_send_cmd( void *ptr );
|
||||
void *set_aqualink_light_colormode( void *ptr );
|
||||
void *set_aqualink_PDA_init( void *ptr );
|
||||
void *set_aqualink_SWG( void *ptr );
|
||||
|
||||
bool waitForButtonState(struct aqualinkdata *aq_data, aqkey* button, aqledstate state, int numMessageReceived);
|
||||
|
||||
|
@ -178,18 +179,25 @@ void aq_programmer(program_type type, char *args, struct aqualinkdata *aq_data)
|
|||
return;
|
||||
}
|
||||
break;
|
||||
case AQ_SET_COLORMODE:
|
||||
case AQ_SET_COLORMODE:
|
||||
if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_light_colormode, (void*)programmingthread) < 0) {
|
||||
logMessage (LOG_ERR, "could not create thread\n");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case AQ_PDA_INIT:
|
||||
case AQ_PDA_INIT:
|
||||
if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_PDA_init, (void*)programmingthread) < 0) {
|
||||
logMessage (LOG_ERR, "could not create thread\n");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case AQ_SET_SWG_PERCENT:
|
||||
if( pthread_create( &programmingthread->thread_id , NULL , set_aqualink_SWG, (void*)programmingthread) < 0) {
|
||||
logMessage (LOG_ERR, "could not create thread\n");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
logMessage (LOG_ERR, "Don't understand thread type\n");
|
||||
break;
|
||||
|
@ -234,8 +242,12 @@ void cleanAndTerminateThread(struct programmingThreadCtrl *threadCtrl)
|
|||
pthread_exit(0);
|
||||
}
|
||||
|
||||
|
||||
bool setAqualinkNumericField_new(struct aqualinkdata *aq_data, char *value_label, int value, int increment);
|
||||
bool setAqualinkNumericField(struct aqualinkdata *aq_data, char *value_label, int value)
|
||||
{
|
||||
return setAqualinkNumericField_new(aq_data, value_label, value, 1);
|
||||
}
|
||||
bool setAqualinkNumericField_new(struct aqualinkdata *aq_data, char *value_label, int value, int increment)
|
||||
{
|
||||
logMessage(LOG_DEBUG,"Setting menu item '%s' to %d\n",value_label, value);
|
||||
char leading[10]; // description of the field (POOL, SPA, FRZ)
|
||||
|
@ -248,13 +260,55 @@ bool setAqualinkNumericField(struct aqualinkdata *aq_data, char *value_label, in
|
|||
do
|
||||
{
|
||||
if (waitForMessage(aq_data, searchBuf, 3) != true) {
|
||||
logMessage(LOG_WARNING, "Could not set %s temp, current temp not found\n",value_label);
|
||||
logMessage(LOG_WARNING, "AQ_Programmer Could not set numeric input '%s', not found\n",value_label);
|
||||
cancel_menu(aq_data);
|
||||
return false;
|
||||
}
|
||||
//logMessage(LOG_DEBUG,"WAITING for kick value=%d\n",current_val);
|
||||
//sscanf(aq_data->last_message, "%s %d%s", leading, ¤t_val, trailing);
|
||||
sscanf(aq_data->last_message, "%*[^0123456789]%d", ¤t_val);
|
||||
logMessage(LOG_DEBUG, "%s set to %d, looking for %d\n",value_label,current_val,value);
|
||||
|
||||
if(value > current_val) {
|
||||
// Increment the field.
|
||||
sprintf(searchBuf, "%s %d", value_label, current_val+increment);
|
||||
send_cmd(KEY_RIGHT, aq_data);
|
||||
}
|
||||
else if(value < current_val) {
|
||||
// Decrement the field.
|
||||
sprintf(searchBuf, "%s %d", value_label, current_val-increment);
|
||||
send_cmd(KEY_LEFT, aq_data);
|
||||
}
|
||||
else {
|
||||
// Just send ENTER. We are at the right value.
|
||||
sprintf(searchBuf, "%s %d", value_label, current_val);
|
||||
send_cmd(KEY_ENTER, aq_data);
|
||||
}
|
||||
} while(value != current_val);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OLD_setAqualinkNumericField_OLD(struct aqualinkdata *aq_data, char *value_label, int value)
|
||||
{ // Works for everything but not SWG
|
||||
logMessage(LOG_DEBUG,"Setting menu item '%s' to %d\n",value_label, value);
|
||||
char leading[10]; // description of the field (POOL, SPA, FRZ)
|
||||
int current_val; // integer value of the current set point
|
||||
char trailing[10]; // the degrees and scale
|
||||
char searchBuf[20];
|
||||
|
||||
sprintf(searchBuf, "^%s", value_label);
|
||||
|
||||
do
|
||||
{
|
||||
if (waitForMessage(aq_data, searchBuf, 3) != true) {
|
||||
logMessage(LOG_WARNING, "AQ_Programmer Could not set numeric input '%s', not found\n",value_label);
|
||||
cancel_menu(aq_data);
|
||||
return false;
|
||||
}
|
||||
//logMessage(LOG_DEBUG,"WAITING for kick value=%d\n",current_val);
|
||||
sscanf(aq_data->last_message, "%s %d%s", leading, ¤t_val, trailing);
|
||||
// logMessage(LOG_DEBUG, "%s set to %d, looking for %d\n",value_label,current_val,value);
|
||||
logMessage(LOG_DEBUG, "%s set to %d, looking for %d\n",value_label,current_val,value);
|
||||
|
||||
if(value > current_val) {
|
||||
// Increment the field.
|
||||
|
@ -292,6 +346,48 @@ void *threadded_send_cmd( void *ptr )
|
|||
}
|
||||
*/
|
||||
|
||||
|
||||
void *set_aqualink_SWG( void *ptr )
|
||||
{
|
||||
struct programmingThreadCtrl *threadCtrl;
|
||||
threadCtrl = (struct programmingThreadCtrl *) ptr;
|
||||
struct aqualinkdata *aq_data = threadCtrl->aq_data;
|
||||
|
||||
waitForSingleThreadOrTerminate(threadCtrl, AQ_SET_SWG_PERCENT);
|
||||
|
||||
int val = atoi((char*)threadCtrl->thread_args);
|
||||
|
||||
// Just recheck it's in multiple of 5.
|
||||
if (0 != (val % 5) )
|
||||
val = ((val + 5) / 10) * 10;
|
||||
|
||||
logMessage(LOG_DEBUG, "programming SWG percent to %d\n", val);
|
||||
|
||||
if ( select_menu_item(aq_data, "SET AQUAPURE") != true ) {
|
||||
logMessage(LOG_WARNING, "Could not select SET TEMP menu\n");
|
||||
cancel_menu(aq_data);
|
||||
cleanAndTerminateThread(threadCtrl);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
if (select_sub_menu_item(aq_data, "SET POOL SP") != true) {
|
||||
logMessage(LOG_WARNING, "Could not select SET POOL TEMP menu\n");
|
||||
cancel_menu(aq_data);
|
||||
cleanAndTerminateThread(threadCtrl);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
setAqualinkNumericField_new(aq_data, "POOL SP", val, 5);
|
||||
|
||||
// usually miss this message, not sure why, but wait anyway to make sure programming has ended
|
||||
waitForMessage(threadCtrl->aq_data, "POOL SP IS SET TO", 1);
|
||||
|
||||
cleanAndTerminateThread(threadCtrl);
|
||||
|
||||
// just stop compiler error, ptr is not valid as it's just been freed
|
||||
return ptr;
|
||||
}
|
||||
|
||||
void *set_aqualink_PDA_init( void *ptr )
|
||||
{
|
||||
struct programmingThreadCtrl *threadCtrl;
|
||||
|
|
|
@ -15,6 +15,7 @@ typedef enum {
|
|||
AQ_GET_PROGRAMS,
|
||||
AQ_SET_COLORMODE,
|
||||
AQ_PDA_INIT,
|
||||
AQ_SET_SWG_PERCENT
|
||||
} program_type;
|
||||
|
||||
struct programmingThreadCtrl {
|
||||
|
@ -37,4 +38,4 @@ unsigned char pop_aq_cmd(struct aqualinkdata *aq_data);
|
|||
//void *set_aqualink_time( void *ptr );
|
||||
//void *get_aqualink_pool_spa_heater_temps( void *ptr );
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
88
aq_serial.c
88
aq_serial.c
|
@ -36,7 +36,7 @@ static struct termios _oldtio;
|
|||
|
||||
void log_packet(char *init_str, unsigned char* packet, int length)
|
||||
{
|
||||
if ( getLogLevel() < LOG_DEBUG)
|
||||
if ( getLogLevel() < LOG_DEBUG_SERIAL)
|
||||
return;
|
||||
|
||||
int cnt;
|
||||
|
@ -50,7 +50,7 @@ void log_packet(char *init_str, unsigned char* packet, int length)
|
|||
cnt += sprintf(buff+cnt, "0x%02hhx|",packet[i]);
|
||||
|
||||
cnt += sprintf(buff+cnt, "\n");
|
||||
logMessage(LOG_DEBUG, buff);
|
||||
logMessage(LOG_DEBUG_SERIAL, buff);
|
||||
/*
|
||||
int i;
|
||||
char temp_string[64];
|
||||
|
@ -90,6 +90,15 @@ const char* get_packet_type(unsigned char* packet, int length)
|
|||
case CMD_PROBE:
|
||||
return "Probe";
|
||||
break;
|
||||
case CMD_GETID:
|
||||
return "GetID";
|
||||
break;
|
||||
case CMD_PERCENT:
|
||||
return "AR %%";
|
||||
break;
|
||||
case CMD_PPM:
|
||||
return "AR PPM";
|
||||
break;
|
||||
default:
|
||||
sprintf(buf, "Unknown '0x%02hhx'", packet[PKT_CMD]);
|
||||
return buf;
|
||||
|
@ -228,8 +237,36 @@ void send_test_cmd(int fd, unsigned char destination, unsigned char b1, unsigned
|
|||
ackPacket[6] = b3;
|
||||
ackPacket[7] = generate_checksum(ackPacket, length-1);
|
||||
|
||||
#ifdef BLOCKING_MODE
|
||||
write(fd, ackPacket, length);
|
||||
#else
|
||||
int nwrite, i;
|
||||
for (i=0; i<length; i += nwrite) {
|
||||
nwrite = write(fd, ackPacket + i, length - i);
|
||||
if (nwrite < 0)
|
||||
logMessage(LOG_ERR, "write to serial port failed\n");
|
||||
}
|
||||
//logMessage(LOG_DEBUG_SERIAL, "Send %d bytes to serial\n",length);
|
||||
//tcdrain(fd);
|
||||
//logMessage(LOG_DEBUG, "Send '0x%02hhx' to '0x%02hhx'\n", command, destination);
|
||||
#endif
|
||||
|
||||
log_packet("Sent ", ackPacket, length);
|
||||
|
||||
}
|
||||
void send_command(int fd, unsigned char destination, unsigned char b1, unsigned char b2, unsigned char b3)
|
||||
{
|
||||
const int length = 11;
|
||||
unsigned char ackPacket[] = { NUL, DLE, STX, DEV_MASTER, CMD_ACK, NUL, NUL, 0x13, DLE, ETX, NUL };
|
||||
//unsigned char ackPacket[] = { NUL, DLE, STX, DEV_MASTER, NUL, NUL, NUL, 0x13, DLE, ETX, NUL };
|
||||
|
||||
// Update the packet and checksum if command argument is not NUL.
|
||||
ackPacket[3] = destination;
|
||||
ackPacket[4] = b1;
|
||||
ackPacket[5] = b2;
|
||||
ackPacket[6] = b3;
|
||||
ackPacket[7] = generate_checksum(ackPacket, length-1);
|
||||
|
||||
#ifdef BLOCKING_MODE
|
||||
write(fd, ackPacket, length);
|
||||
#else
|
||||
|
@ -243,7 +280,44 @@ void send_test_cmd(int fd, unsigned char destination, unsigned char b1, unsigned
|
|||
//tcdrain(fd);
|
||||
//logMessage(LOG_DEBUG, "Send '0x%02hhx' to '0x%02hhx'\n", command, destination);
|
||||
#endif
|
||||
|
||||
|
||||
if ( getLogLevel() >= LOG_DEBUG_SERIAL) {
|
||||
char buf[30];
|
||||
sprintf(buf, "Sent %8.8s ", get_packet_type(ackPacket+1, length));
|
||||
log_packet(buf, ackPacket, length);
|
||||
}
|
||||
}
|
||||
|
||||
void send_messaged(int fd, unsigned char destination, char *message)
|
||||
{
|
||||
const int length = 24;
|
||||
int i;
|
||||
//unsigned char ackPacket[] = { NUL, DLE, STX, DEV_MASTER, CMD_ACK, NUL, NUL, 0x13, DLE, ETX, NUL };
|
||||
unsigned char msgPacket[] = { DLE,STX,DEV_MASTER,CMD_MSG,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,NUL,DLE,ETX };
|
||||
//unsigned char ackPacket[] = { NUL, DLE, STX, DEV_MASTER, NUL, NUL, NUL, 0x13, DLE, ETX, NUL };
|
||||
|
||||
// Update the packet and checksum if command argument is not NUL.
|
||||
msgPacket[2] = destination;
|
||||
for (i=0; i < strlen(message) && i < AQ_MSGLEN; i++)
|
||||
msgPacket[4+i] = message[i];
|
||||
|
||||
msgPacket[length-3] = generate_checksum(msgPacket, length-1);
|
||||
|
||||
#ifdef BLOCKING_MODE
|
||||
write(fd, msgPacket, length);
|
||||
#else
|
||||
int nwrite;
|
||||
for (i=0; i<length; i += nwrite) {
|
||||
nwrite = write(fd, msgPacket + i, length - i);
|
||||
if (nwrite < 0)
|
||||
logMessage(LOG_ERR, "write to serial port failed\n");
|
||||
}
|
||||
//logMessage(LOG_DEBUG_SERIAL, "Send %d bytes to serial\n",length);
|
||||
//tcdrain(fd);
|
||||
//logMessage(LOG_DEBUG, "Send '0x%02hhx' to '0x%02hhx'\n", command, destination);
|
||||
#endif
|
||||
|
||||
log_packet("Sent ", msgPacket, length);
|
||||
}
|
||||
|
||||
void send_ack(int fd, unsigned char command)
|
||||
|
@ -264,7 +338,7 @@ void send_ack(int fd, unsigned char command)
|
|||
aqualink_cmd = NUL;
|
||||
}
|
||||
*/
|
||||
log_packet("Sent ", ackPacket, length);
|
||||
|
||||
// In debug mode, log the packet to the private log file.
|
||||
//log_packet(ackPacket, length);
|
||||
}
|
||||
|
@ -286,6 +360,7 @@ void send_ack(int fd, unsigned char command)
|
|||
//tcdrain(fd);
|
||||
#endif
|
||||
|
||||
log_packet("Sent ", ackPacket, length);
|
||||
}
|
||||
|
||||
// Reads the bytes of the next incoming packet, and
|
||||
|
@ -302,6 +377,7 @@ int get_packet(int fd, unsigned char* packet)
|
|||
int packetStarted = FALSE;
|
||||
int foundDLE = FALSE;
|
||||
bool started = FALSE;
|
||||
int retry=0;
|
||||
|
||||
while (!endOfPacket) {
|
||||
//printf("Read loop %d\n",++i);
|
||||
|
@ -312,6 +388,10 @@ int get_packet(int fd, unsigned char* packet)
|
|||
return 0;
|
||||
} else if (bytesRead < 0 && errno == EAGAIN) {
|
||||
// If we are in the middle of reading a packet, keep going
|
||||
if (retry > 10)
|
||||
return 0;
|
||||
|
||||
retry++;
|
||||
delay(10);
|
||||
} else if (bytesRead == 1) {
|
||||
started = TRUE;
|
||||
|
|
|
@ -34,6 +34,11 @@
|
|||
#define CMD_MSG 0x03
|
||||
#define CMD_MSG_LONG 0x04
|
||||
|
||||
/* AquaRite commands */
|
||||
#define CMD_GETID 0x14 // May be remote control control
|
||||
#define CMD_PERCENT 0x11 // Set Percent
|
||||
#define CMD_PPM 0x16 // Received PPM
|
||||
|
||||
/* PDA KEY CODES */ // Just plating at the moment
|
||||
#define KEY_PDA_UP 0x06
|
||||
#define KEY_PDA_DOWN 0x05
|
||||
|
@ -138,5 +143,6 @@ int get_packet(int file_descriptor, unsigned char* packet);
|
|||
void process_status(unsigned char* ptr);
|
||||
const char* get_packet_type(unsigned char* packet, int length);
|
||||
void send_test_cmd(int fd, unsigned char destination, unsigned char b1, unsigned char b2, unsigned char b3);
|
||||
|
||||
void send_command(int fd, unsigned char destination, unsigned char b1, unsigned char b2, unsigned char b3);
|
||||
void send_messaged(int fd, unsigned char destination, char *message);
|
||||
#endif // AQ_SERIAL_H_
|
||||
|
|
|
@ -50,6 +50,7 @@ typedef enum action_type {
|
|||
POOL_HTR_SETOINT,
|
||||
SPA_HTR_SETOINT,
|
||||
FREEZE_SETPOINT,
|
||||
SWG_SETPOINT
|
||||
} action_type;
|
||||
|
||||
struct action {
|
||||
|
@ -86,7 +87,10 @@ struct aqualinkdata
|
|||
struct action unactioned;
|
||||
int swg_percent;
|
||||
int swg_ppm;
|
||||
unsigned char ar_swg_status;
|
||||
int swg_delayed_percent;
|
||||
//bool ar_swg_connected;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
39
aqualinkd.c
39
aqualinkd.c
|
@ -529,6 +529,20 @@ void action_delayed_request()
|
|||
} else {
|
||||
logMessage(LOG_NOTICE, "Freeze setpoint is already %d, not changing\n",_aqualink_data.unactioned.value);
|
||||
}
|
||||
} else if (_aqualink_data.unactioned.type == SWG_SETPOINT) {
|
||||
if (_aqualink_data.ar_swg_status != 0x00 ) {
|
||||
// SWG is off, can't set %, so delay the set until it's on.
|
||||
_aqualink_data.swg_delayed_percent = _aqualink_data.unactioned.value;
|
||||
} else {
|
||||
if ( _aqualink_data.swg_percent != _aqualink_data.unactioned.value ) {
|
||||
aq_programmer(AQ_SET_SWG_PERCENT, sval, &_aqualink_data);
|
||||
logMessage(LOG_NOTICE, "Setting SWG % to %d\n",_aqualink_data.unactioned.value);
|
||||
} else {
|
||||
logMessage(LOG_NOTICE, "SWG % is already %d, not changing\n",_aqualink_data.unactioned.value);
|
||||
}
|
||||
}
|
||||
// Let's just tell everyone we set it, before we actually did. Makes homekit happy, and it will re-correct on error.
|
||||
_aqualink_data.swg_percent = _aqualink_data.unactioned.value;
|
||||
}
|
||||
|
||||
_aqualink_data.unactioned.type = NO_ACTION;
|
||||
|
@ -667,6 +681,7 @@ void main_loop() {
|
|||
int rs_fd;
|
||||
int packet_length;
|
||||
unsigned char packet_buffer[AQ_MAXPKTLEN];
|
||||
bool interestedInNextAck;
|
||||
|
||||
// NSF need to find a better place to init this.
|
||||
//_aqualink_data.aq_command = 0x00;
|
||||
|
@ -680,6 +695,8 @@ void main_loop() {
|
|||
_aqualink_data.unactioned.type = NO_ACTION;
|
||||
_aqualink_data.swg_percent = TEMP_UNKNOWN;
|
||||
_aqualink_data.swg_ppm = TEMP_UNKNOWN;
|
||||
_aqualink_data.ar_swg_status = 0xFF;
|
||||
_aqualink_data.swg_delayed_percent = TEMP_UNKNOWN;
|
||||
|
||||
|
||||
if (!start_net_services(&mgr, &_aqualink_data, &_config_parameters)) {
|
||||
|
@ -738,7 +755,27 @@ void main_loop() {
|
|||
broadcast_aqualinkstate(mgr.active_connections);
|
||||
}
|
||||
} else if (packet_length > 0) {
|
||||
// printf("packet not for us %02x\n",packet_buffer[PKT_DEST]);
|
||||
// printf("packet not for us %02x\n",packet_buffer[PKT_DEST]);
|
||||
if (packet_buffer[PKT_DEST] == 0x00 && interestedInNextAck == true) {
|
||||
if ( packet_buffer[PKT_CMD] == CMD_PPM ) {
|
||||
_aqualink_data.ar_swg_status = packet_buffer[5];
|
||||
if (_aqualink_data.swg_delayed_percent != TEMP_UNKNOWN && _aqualink_data.ar_swg_status == 0x00) { // We have a delayed % to set.
|
||||
char sval[10];
|
||||
snprintf(sval, 9, "%d", _aqualink_data.swg_delayed_percent);
|
||||
aq_programmer(AQ_SET_SWG_PERCENT, sval, &_aqualink_data);
|
||||
logMessage(LOG_NOTICE, "Setting SWG % to %d, from delayed message\n",_aqualink_data.swg_delayed_percent);
|
||||
_aqualink_data.swg_delayed_percent = TEMP_UNKNOWN;
|
||||
}
|
||||
}
|
||||
interestedInNextAck = false;
|
||||
} else if (interestedInNextAck == true && packet_buffer[PKT_DEST] != 0x00) {
|
||||
_aqualink_data.ar_swg_status = 0xFF;
|
||||
interestedInNextAck = false;
|
||||
} else if (packet_buffer[PKT_DEST] == 0x50) {
|
||||
interestedInNextAck = true;
|
||||
} else {
|
||||
interestedInNextAck = false;
|
||||
}
|
||||
}
|
||||
if (getLogLevel() >= LOG_DEBUG_SERIAL) {
|
||||
logMessage(LOG_DEBUG_SERIAL, "Received Packet for ID 0x%02hhx of type %s %s\n",packet_buffer[PKT_DEST], get_packet_type(packet_buffer, packet_length),
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include "utils.h"
|
||||
|
||||
#define SLOG_MAX 80
|
||||
#define PACKET_MAX 10000
|
||||
#define PACKET_MAX 10000000000
|
||||
|
||||
bool _keepRunning = true;
|
||||
|
||||
|
@ -83,6 +83,7 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
|
||||
packet_length = get_packet(rs_fd, packet_buffer);
|
||||
received_packets++;
|
||||
|
||||
if (packet_length == -1) {
|
||||
// Unrecoverable read error. Force an attempt to reconnect.
|
||||
|
@ -90,10 +91,8 @@ int main(int argc, char *argv[]) {
|
|||
_keepRunning = false;
|
||||
} else if (packet_length == 0) {
|
||||
// Nothing read
|
||||
|
||||
} else if (packet_length > 0) {
|
||||
|
||||
//printPacket(lastID, packet_buffer, packet_length);
|
||||
|
||||
if ((packet_buffer[PKT_DEST] == DEV_MASTER && (lastID == 0x50 || lastID == 0x58))
|
||||
|| packet_buffer[PKT_DEST] == 0x50 || packet_buffer[PKT_DEST] == 0x58)
|
||||
printPacket(lastID, packet_buffer, packet_length);
|
||||
|
@ -101,7 +100,11 @@ int main(int argc, char *argv[]) {
|
|||
printf(" To 0x%02hhx of Type Message | ",packet_buffer[PKT_DEST]);
|
||||
fwrite(packet_buffer + 4, 1, packet_length-7, stdout);
|
||||
printf("\n");
|
||||
} else {
|
||||
printPacket(lastID, packet_buffer, packet_length);
|
||||
}
|
||||
|
||||
//send_messaged(0, 0x00, "AquaPure");
|
||||
|
||||
/*
|
||||
if (received_packets == 10 || received_packets == 20) {
|
||||
|
@ -119,7 +122,10 @@ int main(int argc, char *argv[]) {
|
|||
}
|
||||
*/
|
||||
lastID = packet_buffer[PKT_DEST];
|
||||
received_packets++;
|
||||
//received_packets++;
|
||||
|
||||
//delay(100);
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
|
||||
|
|
2
config.c
2
config.c
|
@ -241,6 +241,8 @@ void readCfg (struct aqconfig *config_parameters, struct aqualinkdata *aqdata, c
|
|||
config_parameters->dzidx_swg_percent = strtoul(indx+1, NULL, 10);
|
||||
} else if (strncasecmp (b_ptr, "SWG_PPM_dzidx", 13) == 0) {
|
||||
config_parameters->dzidx_swg_ppm = strtoul(indx+1, NULL, 10);
|
||||
} else if (strncasecmp (b_ptr, "SWG_Status_dzidx", 14) == 0) {
|
||||
config_parameters->dzidx_swg_status = strtoul(indx+1, NULL, 10);
|
||||
} else if (strncasecmp (b_ptr, "override_freeze_protect", 23) == 0) {
|
||||
config_parameters->override_freeze_protect = text2bool(indx+1);
|
||||
} else if (strncasecmp (b_ptr, "pda_mode", 8) == 0) {
|
||||
|
|
1
config.h
1
config.h
|
@ -42,6 +42,7 @@ struct aqconfig
|
|||
int dzidx_spa_water_temp;
|
||||
int dzidx_swg_percent;
|
||||
int dzidx_swg_ppm;
|
||||
int dzidx_swg_status;
|
||||
float light_programming_mode;
|
||||
bool override_freeze_protect;
|
||||
bool pda_mode;
|
||||
|
|
|
@ -66,6 +66,18 @@ int build_mqtt_status_JSON(char* buffer, int size, int idx, int nvalue, float tv
|
|||
return strlen(buffer);
|
||||
}
|
||||
|
||||
int build_mqtt_status_message_JSON(char* buffer, int size, int idx, int nvalue, char *svalue)
|
||||
{
|
||||
memset(&buffer[0], 0, size);
|
||||
int length = 0;
|
||||
//json.htm?type=command¶m=udevice&idx=IDX&nvalue=LEVEL&svalue=TEXT
|
||||
|
||||
length = sprintf(buffer, "{\"idx\":%d,\"nvalue\":%d,\"svalue\":\"%s\"}", idx, nvalue, svalue);
|
||||
|
||||
buffer[length] = '\0';
|
||||
return strlen(buffer);
|
||||
}
|
||||
|
||||
int build_aqualink_error_status_JSON(char* buffer, int size, char *msg)
|
||||
{
|
||||
//return snprintf(buffer, size, "{\"type\": \"error\",\"status\":\"%s\"}", msg);
|
||||
|
|
|
@ -39,6 +39,7 @@ bool parseJSONwebrequest(char *buffer, struct JSONwebrequest *request);
|
|||
int build_mqtt_status_JSON(char* buffer, int size, int idx, int nvalue, float setpoint/*char *svalue*/);
|
||||
bool parseJSONmqttrequest(const char *str, size_t len, int *idx, int *nvalue, char *svalue);
|
||||
int build_aqualink_error_status_JSON(char* buffer, int size, char *msg);
|
||||
int build_mqtt_status_message_JSON(char* buffer, int size, int idx, int nvalue, char *svalue);
|
||||
|
||||
|
||||
#endif /* JSON_MESSAGES_H_ */
|
||||
|
|
124
net_services.c
124
net_services.c
|
@ -172,6 +172,15 @@ void send_domoticz_mqtt_numeric_msg(struct mg_connection *nc, int idx, int value
|
|||
build_mqtt_status_JSON(mqtt_msg ,JSON_MQTT_MSG_SIZE, idx, 0, value);
|
||||
send_mqtt(nc, _aqualink_config->mqtt_dz_pub_topic, mqtt_msg);
|
||||
}
|
||||
void send_domoticz_mqtt_status_message(struct mg_connection *nc, int idx, int value, char *svalue) {
|
||||
if (idx <= 0)
|
||||
return;
|
||||
|
||||
char mqtt_msg[JSON_MQTT_MSG_SIZE];
|
||||
build_mqtt_status_message_JSON(mqtt_msg, JSON_MQTT_MSG_SIZE, idx, value, svalue);
|
||||
|
||||
send_mqtt(nc, _aqualink_config->mqtt_dz_pub_topic, mqtt_msg);
|
||||
}
|
||||
|
||||
void send_mqtt_state_msg(struct mg_connection *nc, char *dev_name, aqledstate state)
|
||||
{
|
||||
|
@ -207,10 +216,36 @@ void send_mqtt_numeric_msg(struct mg_connection *nc, char *dev_name, int value)
|
|||
sprintf(mqtt_pub_topic, "%s/%s", _aqualink_config->mqtt_aq_topic, dev_name);
|
||||
send_mqtt(nc, mqtt_pub_topic, msg);
|
||||
}
|
||||
void send_mqtt_float_msg(struct mg_connection *nc, char *dev_name, float value) {
|
||||
static char mqtt_pub_topic[250];
|
||||
static char msg[10];
|
||||
|
||||
sprintf(msg, "%f", value);
|
||||
sprintf(mqtt_pub_topic, "%s/%s", _aqualink_config->mqtt_aq_topic, dev_name);
|
||||
send_mqtt(nc, mqtt_pub_topic, msg);
|
||||
}
|
||||
void send_mqtt_int_msg(struct mg_connection *nc, char *dev_name, int value) {
|
||||
static char mqtt_pub_topic[250];
|
||||
static char msg[10];
|
||||
|
||||
sprintf(msg, "%d", value);
|
||||
sprintf(mqtt_pub_topic, "%s/%s", _aqualink_config->mqtt_aq_topic, dev_name);
|
||||
send_mqtt(nc, mqtt_pub_topic, msg);
|
||||
}
|
||||
|
||||
|
||||
void mqtt_broadcast_aqualinkstate(struct mg_connection *nc)
|
||||
{
|
||||
static int cnt=0;
|
||||
bool force_update = false;
|
||||
|
||||
if (cnt > 300) { // 100 = about every 2 minutes.
|
||||
force_update = true;
|
||||
cnt = 0;
|
||||
} else {
|
||||
cnt++;
|
||||
force_update = false;
|
||||
}
|
||||
int i;
|
||||
|
||||
//logMessage(LOG_INFO, "mqtt_broadcast_aqualinkstate: START\n");
|
||||
|
@ -252,15 +287,71 @@ void mqtt_broadcast_aqualinkstate(struct mg_connection *nc)
|
|||
send_mqtt_setpoint_msg(nc, FREEZE_PROTECT, _aqualink_data->frz_protect_set_point);
|
||||
//send_domoticz_mqtt_temp_msg(nc, _aqualink_config->dzidx_rfz_protect, _aqualink_data->frz_protect_set_point);
|
||||
}
|
||||
if (_aqualink_data->swg_percent != TEMP_UNKNOWN && _aqualink_data->swg_percent != _last_mqtt_aqualinkdata.swg_percent) {
|
||||
_last_mqtt_aqualinkdata.swg_percent = _aqualink_data->swg_percent;
|
||||
send_mqtt_numeric_msg(nc, SWG_PERCENT_TOPIC, _aqualink_data->swg_percent);
|
||||
send_domoticz_mqtt_numeric_msg(nc, _aqualink_config->dzidx_swg_percent, _aqualink_data->swg_percent);
|
||||
if (_aqualink_data->ar_swg_status == 0x00) { // If the SWG is actually on
|
||||
if (_aqualink_data->swg_percent != TEMP_UNKNOWN && (force_update || _aqualink_data->swg_percent != _last_mqtt_aqualinkdata.swg_percent)) {
|
||||
_last_mqtt_aqualinkdata.swg_percent = _aqualink_data->swg_percent;
|
||||
send_mqtt_numeric_msg(nc, SWG_PERCENT_TOPIC, _aqualink_data->swg_percent);
|
||||
send_mqtt_float_msg(nc, SWG_PERCENT_F_TOPIC, roundf(degFtoC(_aqualink_data->swg_percent)));
|
||||
send_domoticz_mqtt_numeric_msg(nc, _aqualink_config->dzidx_swg_percent, _aqualink_data->swg_percent);
|
||||
}
|
||||
if (_aqualink_data->swg_ppm != TEMP_UNKNOWN && ( force_update || _aqualink_data->swg_ppm != _last_mqtt_aqualinkdata.swg_ppm)) {
|
||||
_last_mqtt_aqualinkdata.swg_ppm = _aqualink_data->swg_ppm;
|
||||
send_mqtt_numeric_msg(nc, SWG_PPM_TOPIC, _aqualink_data->swg_ppm);
|
||||
send_domoticz_mqtt_numeric_msg(nc, _aqualink_config->dzidx_swg_ppm, _aqualink_data->swg_ppm);
|
||||
}
|
||||
}
|
||||
if (_aqualink_data->swg_ppm != TEMP_UNKNOWN && _aqualink_data->swg_ppm != _last_mqtt_aqualinkdata.swg_ppm) {
|
||||
_last_mqtt_aqualinkdata.swg_ppm = _aqualink_data->swg_ppm;
|
||||
send_mqtt_numeric_msg(nc, SWG_PPM_TOPIC, _aqualink_data->swg_ppm);
|
||||
send_domoticz_mqtt_numeric_msg(nc, _aqualink_config->dzidx_swg_ppm, _aqualink_data->swg_ppm);
|
||||
if (_aqualink_data->ar_swg_status != _last_mqtt_aqualinkdata.ar_swg_status) {
|
||||
switch (_aqualink_data->ar_swg_status) {
|
||||
// Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
|
||||
case 0x00:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 1, "GENERATING CHLORINE");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_ON);
|
||||
break;
|
||||
case 0x01:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 2, "NO FLOW");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_OFF);
|
||||
break;
|
||||
case 0x02:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 2, "LOW SALT");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_ON);
|
||||
break;
|
||||
case 0x04:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 3, "VERY LOW SALT");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_OFF);
|
||||
break;
|
||||
case 0x08:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 4, "HIGH CURRENT");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_ON);
|
||||
break;
|
||||
case 0x09:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 0, "TURNING OFF");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_OFF);
|
||||
break;
|
||||
case 0x10:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 2, "CLEAN CELL");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_ON);
|
||||
break;
|
||||
case 0x20:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 3, "LOW VOLTAGE");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_ON);
|
||||
break;
|
||||
case 0x40:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 2, "WATER TEMP LOW");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_OFF);
|
||||
break;
|
||||
case 0x80:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 4, "CHECK PCB");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_OFF);
|
||||
break;
|
||||
case 0xFF: // THIS IS OUR OFF STATUS, NOT AQUAPURE
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 0, "OFF");
|
||||
send_mqtt_int_msg(nc, SWG_TOPIC, SWG_OFF);
|
||||
break;
|
||||
default:
|
||||
send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 4, "Unknown");
|
||||
break;
|
||||
}
|
||||
_last_mqtt_aqualinkdata.ar_swg_status = _aqualink_data->ar_swg_status;
|
||||
}
|
||||
|
||||
//logMessage(LOG_INFO, "mqtt_broadcast_aqualinkstate: START LEDs\n");
|
||||
|
@ -495,6 +586,7 @@ void action_mqtt_message(struct mg_connection *nc, struct mg_mqtt_message *msg)
|
|||
//aqualinkd/Filter_Pump/set
|
||||
//aqualinkd/Pool_Heater/setpoint/set
|
||||
//aqualinkd/Pool_Heater/set
|
||||
//aqualinkd/SWG/Percent_f/set
|
||||
|
||||
if (pt3 != NULL && (strncmp(pt2, "setpoint", 8) == 0) && (strncmp(pt3, "set", 3) == 0)) {
|
||||
int val = _aqualink_data->unactioned.value = (_aqualink_data->temp_units == FAHRENHEIT) ? round(degCtoF(value)) : round(value);
|
||||
|
@ -513,7 +605,7 @@ void action_mqtt_message(struct mg_connection *nc, struct mg_mqtt_message *msg)
|
|||
} else {
|
||||
logMessage(LOG_ERR, "MQTT: request to set spa heater setpoint to %.2fc is outside of range\n", value);
|
||||
send_mqtt_setpoint_msg(nc, BTN_SPA_HTR, _aqualink_data->spa_htr_set_point);
|
||||
}
|
||||
}
|
||||
} else if (strncmp(pt1, FREEZE_PROTECT, strlen(FREEZE_PROTECT)) == 0) {
|
||||
if (val <= FREEZE_PT_MAX && val >= FREEZE_PT_MIN) {
|
||||
logMessage(LOG_INFO, "MQTT: request to set freeze protect to %.2fc\n", value);
|
||||
|
@ -528,7 +620,19 @@ void action_mqtt_message(struct mg_connection *nc, struct mg_mqtt_message *msg)
|
|||
}
|
||||
// logMessage(LOG_INFO, "MQTT: topic %.*s %.2f, setting %s\n",msg->topic.len, msg->topic.p, value);
|
||||
time(&_aqualink_data->unactioned.requested);
|
||||
|
||||
} else if ((pt3 != NULL && (strncmp(pt1, "SWG", 3) == 0) && (strncmp(pt2, "Percent_f", 8) == 0) && (strncmp(pt3, "set", 3) == 0))) {
|
||||
int val = _aqualink_data->unactioned.value = (_aqualink_data->temp_units == FAHRENHEIT) ? round(degCtoF(value)) : round(value);
|
||||
// Convert number to nearest 5, since those are the incruments, NSF check 100 or 101
|
||||
if (0 != (val % 5) )
|
||||
val = _aqualink_data->unactioned.value = ((val + 5) / 10) * 10;
|
||||
|
||||
if (val > SWG_PERCENT_MAX) {
|
||||
_aqualink_data->unactioned.value = SWG_PERCENT_MAX;
|
||||
} else if ( val < SWG_PERCENT_MIN) {
|
||||
_aqualink_data->unactioned.value = SWG_PERCENT_MIN;
|
||||
}
|
||||
logMessage(LOG_INFO, "MQTT: request to set SWG to %.2fc, setting to %d\n", value, val);
|
||||
_aqualink_data->unactioned.type = SWG_SETPOINT;
|
||||
} else if (pt2 != NULL && (strncmp(pt2, "set", 3) == 0) && (strncmp(pt2, "setpoint", 8) != 0)) {
|
||||
// Must be a switch on / off
|
||||
for (i=0; i < TOTAL_BUTTONS; i++) {
|
||||
|
|
|
@ -0,0 +1,705 @@
|
|||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0x02|0x50|0x00|0x62|0x00|0xc4|0x10|0x03|0x00|
|
||||
Send get STATUS
|
||||
Sent | HEX: 0x00|0x10|0
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,88 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# ROOT=/nas/data/Development/Raspberry/gpiocrtl/test-install
|
||||
#
|
||||
|
||||
|
||||
BUILD="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
|
||||
SERVICE="aquarited"
|
||||
|
||||
BIN="aquarited"
|
||||
CFG="aquarited.conf"
|
||||
SRV="aquarited.service"
|
||||
DEF="aquarited"
|
||||
ARC="aquarited_cache.sh"
|
||||
|
||||
BINLocation="/usr/local/bin"
|
||||
CFGLocation="/etc"
|
||||
SRVLocation="/etc/systemd/system"
|
||||
DEFLocation="/etc/default"
|
||||
#WEBLocation="/var/www/aquarited/"
|
||||
#MDNSLocation="/etc/avahi/services/"
|
||||
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $(mount | grep " / " | grep "(ro,") ]]; then
|
||||
echo "Root filesystem is readonly, can't install"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Exit if we can't find systemctl
|
||||
command -v systemctl >/dev/null 2>&1 || { echo "This script needs systemd's systemctl manager, Please check path or install manually" >&2; exit 1; }
|
||||
|
||||
# stop service, hide any error, as the service may not be installed yet
|
||||
systemctl stop $SERVICE > /dev/null 2>&1
|
||||
SERVICE_EXISTS=$(echo $?)
|
||||
|
||||
# mount / rw since stopping deamon will set root_ro
|
||||
if [[ $(mount | grep " / " | grep "(ro,") ]]; then
|
||||
mount / -o remount,rw
|
||||
fi
|
||||
# copy files to locations, but only copy cfg if it doesn;t already exist
|
||||
|
||||
cp $BUILD/$BIN $BINLocation/$BIN
|
||||
cp $BUILD/$SRV $SRVLocation/$SRV
|
||||
cp $BUILD/$ARC $BINLocation/$ARC
|
||||
|
||||
if [ -f $CFGLocation/$CFG ]; then
|
||||
echo "Config exists, did not copy new config, you may need to edit existing! $CFGLocation/$CFG"
|
||||
else
|
||||
cp $BUILD/$CFG $CFGLocation/$CFG
|
||||
fi
|
||||
|
||||
if [ -f $DEFLocation/$DEF ]; then
|
||||
echo "Defaults exists, did not copy new defaults to $DEFLocation/$DEF"
|
||||
else
|
||||
cp $BUILD/$DEF.defaults $DEFLocation/$DEF
|
||||
fi
|
||||
|
||||
|
||||
|
||||
#if [ -f $MDNSLocation/$MDNS ]; then
|
||||
# echo "Avahi/mDNS defaults exists, did not copy new defaults to $MDNSLocation/$MDNS"
|
||||
#else
|
||||
# if [ -d "$MDNSLocation" ]; then
|
||||
# cp $BUILD/$MDNS.avahi $MDNSLocation/$MDNS
|
||||
# else
|
||||
# echo "Avahi/mDNS may not be installed, not copying $MDNSLocation/$MDNS"
|
||||
# fi
|
||||
#fi
|
||||
#
|
||||
#if [ ! -d "$WEBLocation" ]; then
|
||||
# mkdir -p $WEBLocation
|
||||
#fi
|
||||
#
|
||||
#cp -r $BUILD/../web/* $WEBLocation
|
||||
|
||||
systemctl enable $SERVICE
|
||||
systemctl daemon-reload
|
||||
|
||||
if [ $SERVICE_EXISTS -eq 0 ]; then
|
||||
echo "Starting daemon $SERVICE"
|
||||
systemctl start $SERVICE
|
||||
fi
|
||||
|
Binary file not shown.
|
@ -11,7 +11,7 @@
|
|||
#include "utils.h"
|
||||
|
||||
#define SLOG_MAX 80
|
||||
#define PACKET_MAX 1000
|
||||
#define PACKET_MAX 10000
|
||||
|
||||
/*
|
||||
typedef enum used {
|
||||
|
|
10
utils.c
10
utils.c
|
@ -279,12 +279,15 @@ void logMessage(int msg_level, char *format, ...)
|
|||
|
||||
if (_daemonise == TRUE)
|
||||
{
|
||||
syslog (msg_level, "%s", &buffer[8]);
|
||||
if (msg_level > LOG_DEBUG) // Let's not confuse syslog with custom levels
|
||||
syslog (LOG_DEBUG, "%s", &buffer[8]);
|
||||
else
|
||||
syslog (msg_level, "%s", &buffer[8]);
|
||||
closelog ();
|
||||
//return;
|
||||
}
|
||||
|
||||
if (_log2file == TRUE && _log_filename != NULL) {
|
||||
//if (_log2file == TRUE && _log_filename != NULL) {
|
||||
int len;
|
||||
char *strLevel = elevel2text(msg_level);
|
||||
|
||||
|
@ -297,7 +300,8 @@ void logMessage(int msg_level, char *format, ...)
|
|||
if ( buffer[len-1] != '\n') {
|
||||
strcat(buffer, "\n");
|
||||
}
|
||||
|
||||
|
||||
if (_log2file == TRUE && _log_filename != NULL) {
|
||||
char time[TIMESTAMP_LENGTH];
|
||||
int fp = open(_log_filename, O_WRONLY | O_APPEND | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
|
||||
if (fp != -1) {
|
||||
|
|
Loading…
Reference in New Issue