Version 1.3.5c
|
@ -64,11 +64,13 @@ Designed to mimic AqualinkRS6 All Button keypad and (like the keypad) is used to
|
|||
* http://aqualink.ip/simple.html <- (Simple opion if you don't like the above)
|
||||
* http://aqualink.ip/simulator.html <- (RS8 All Button Control Panel simulator)
|
||||
#<a name="release"></a>
|
||||
# Update in Release 1.3.5a,b
|
||||
# Update in Release 1.3.5a,b,c
|
||||
* Note to Homekit users. Upgrading to 1.3.5c (and above) will add an aditional SWG PPM tile, (look in default room). You'll need to update homebridge-aqualinkd to 0.0.8 (or later) to remove the old tile (or delete you homebridge cache). This is due to a bug in homebridge-aqualinkd < 0.0.7 that didn't delete unused tiles.
|
||||
* Logic for SWG RS486 checksum_errors.
|
||||
* Fixed pentair packet logging, missing last byte.
|
||||
* Support for two programmable lights. (Note must update your aqualinkd.conf).
|
||||
* Can now display warnings and errors in the web UI (as well as log).
|
||||
* Memory issue with PDA.
|
||||
# Update in Release 1.3.5
|
||||
* Fixed SWG bug showing off/0% every ~15 seconds (introduced in 1.3.3).
|
||||
* PDA updates for freeze protect/SWG and general speed increase.
|
||||
|
|
|
@ -708,39 +708,37 @@ void *set_aqualink_light_colormode( void *ptr )
|
|||
// Needs to start programming sequence with light on, if off we need to turn on for 15 seconds
|
||||
// before we can send the next off.
|
||||
if ( button->led->state != ON ) {
|
||||
logMessage(LOG_INFO, "Pool Light Initial state off, turning on for 15 seconds\n");
|
||||
logMessage(LOG_INFO, "Light Programming Initial state off, turning on for %d seconds\n",iOn);
|
||||
send_cmd(code);
|
||||
//delay(15 * seconds);
|
||||
delay(iOn * seconds);
|
||||
}
|
||||
|
||||
logMessage(LOG_INFO, "Pool Light turn off for 12 seconds\n");
|
||||
logMessage(LOG_INFO, "Light Programming turn off for %d seconds\n",iOff);
|
||||
// Now need to turn off for between 11 and 14 seconds to reset light.
|
||||
send_cmd(code);
|
||||
//delay(12 * seconds);
|
||||
delay(iOff * seconds);
|
||||
|
||||
// Now light is reset, pulse the appropiate number of times to advance program.
|
||||
logMessage(LOG_INFO, "Pool Light button pulsing on/off %d times\n", val);
|
||||
logMessage(LOG_INFO, "Light Programming button pulsing on/off %d times\n", val);
|
||||
|
||||
// Program light in safe mode (slowley), or quick mode
|
||||
if (pmode > 0) {
|
||||
for (i = 1; i < (val * 2); i++) {
|
||||
logMessage(LOG_INFO, "Pool Light button press number %d - %s of %d\n", i, i % 2 == 0 ? "Off" : "On", val);
|
||||
logMessage(LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, i % 2 == 0 ? "Off" : "On", val);
|
||||
send_cmd(code);
|
||||
delay(pmode * seconds); // 0.3 works, but using 0.4 to be safe
|
||||
}
|
||||
} else {
|
||||
for (i = 1; i < val; i++) {
|
||||
logMessage(LOG_INFO, "Pool Light button press number %d - %s of %d\n", i, "ON", val);
|
||||
logMessage(LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, "ON", val);
|
||||
send_cmd(code);
|
||||
waitForButtonState(aq_data, button, ON, 2);
|
||||
logMessage(LOG_INFO, "Pool Light button press number %d - %s of %d\n", i, "OFF", val);
|
||||
logMessage(LOG_INFO, "Light Programming button press number %d - %s of %d\n", i, "OFF", val);
|
||||
send_cmd(code);
|
||||
waitForButtonState(aq_data, button, OFF, 2);
|
||||
}
|
||||
|
||||
logMessage(LOG_INFO, "Finished - Pool Light button press number %d - %s of %d\n", i, "ON", val);
|
||||
logMessage(LOG_INFO, "Finished - Light Programming button press number %d - %s of %d\n", i, "ON", val);
|
||||
send_cmd(code);
|
||||
}
|
||||
//waitForButtonState(aq_data, &aq_data->aqbuttons[btn], ON, 2);
|
||||
|
|
|
@ -566,6 +566,12 @@ bool process_packet(unsigned char *packet, int length)
|
|||
{
|
||||
_aqualink_data.pool_temp = TEMP_UNKNOWN;
|
||||
}
|
||||
|
||||
// COLOR MODE programming relies on state changes, so let any threads know
|
||||
if (_aqualink_data.active_thread.ptype == AQ_SET_COLORMODE) {
|
||||
//printf ("Light thread kicking\n");
|
||||
kick_aq_program_thread(&_aqualink_data);
|
||||
}
|
||||
break;
|
||||
case CMD_MSG:
|
||||
memset(message, 0, AQ_MSGLONGLEN + 1);
|
||||
|
|
Before Width: | Height: | Size: 190 KiB After Width: | Height: | Size: 190 KiB |
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 3.8 MiB After Width: | Height: | Size: 3.8 MiB |
Before Width: | Height: | Size: 4.0 MiB After Width: | Height: | Size: 4.0 MiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 413 KiB After Width: | Height: | Size: 413 KiB |
|
@ -186,6 +186,9 @@ int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch1, int
|
|||
int length = 0;
|
||||
int i;
|
||||
|
||||
// IF temp units are F assume homekit is using F
|
||||
bool homekit_f = (homekit && aqdata->temp_units==FAHRENHEIT);
|
||||
|
||||
length += sprintf(buffer+length, "{\"type\": \"devices\"");
|
||||
length += sprintf(buffer+length, ",\"date\":\"%s\"",aqdata->date );//"09/01/16 THU",
|
||||
length += sprintf(buffer+length, ",\"time\":\"%s\"",aqdata->time );//"1:16 PM",
|
||||
|
@ -207,9 +210,9 @@ int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch1, int
|
|||
aqdata->aqbuttons[i].led->state==ON?JSON_ON:JSON_OFF,
|
||||
LED2text(aqdata->aqbuttons[i].led->state),
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->pool_htr_set_point):aqdata->pool_htr_set_point),
|
||||
((homekit_f)?degFtoC(aqdata->pool_htr_set_point):aqdata->pool_htr_set_point),
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->pool_temp):aqdata->pool_temp),
|
||||
((homekit_f)?degFtoC(aqdata->pool_temp):aqdata->pool_temp),
|
||||
LED2int(aqdata->aqbuttons[i].led->state));
|
||||
} else if ( strcmp(BTN_SPA_HTR,aqdata->aqbuttons[i].name)==0 && aqdata->spa_htr_set_point != TEMP_UNKNOWN) {
|
||||
length += sprintf(buffer+length, "{\"type\": \"setpoint_thermo\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"status\": \"%s\", \"spvalue\": \"%.*f\", \"value\": \"%.*f\", \"int_status\": \"%d\" },",
|
||||
|
@ -218,9 +221,9 @@ int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch1, int
|
|||
aqdata->aqbuttons[i].led->state==ON?JSON_ON:JSON_OFF,
|
||||
LED2text(aqdata->aqbuttons[i].led->state),
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->spa_htr_set_point):aqdata->spa_htr_set_point),
|
||||
((homekit_f)?degFtoC(aqdata->spa_htr_set_point):aqdata->spa_htr_set_point),
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->spa_temp):aqdata->spa_temp),
|
||||
((homekit_f)?degFtoC(aqdata->spa_temp):aqdata->spa_temp),
|
||||
LED2int(aqdata->aqbuttons[i].led->state));
|
||||
} else if ( (programable_switch1 > 0 && programable_switch1 == i) ||
|
||||
(programable_switch2 > 0 && programable_switch2 == i)) {
|
||||
|
@ -251,9 +254,9 @@ int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch1, int
|
|||
//JSON_ENABLED,
|
||||
aqdata->frz_protect_state==ON?LED2text(ON):LED2text(ENABLE),
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->frz_protect_set_point):aqdata->frz_protect_set_point),
|
||||
((homekit_f)?degFtoC(aqdata->frz_protect_set_point):aqdata->frz_protect_set_point),
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->air_temp):aqdata->air_temp),
|
||||
((homekit_f)?degFtoC(aqdata->air_temp):aqdata->air_temp),
|
||||
aqdata->frz_protect_state==ON?1:0);
|
||||
}
|
||||
|
||||
|
@ -264,26 +267,36 @@ int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch1, int
|
|||
aqdata->ar_swg_status == 0x00?JSON_ON:JSON_OFF,
|
||||
aqdata->ar_swg_status == 0x00?JSON_ON:JSON_OFF,
|
||||
((homekit)?2:0),
|
||||
((homekit)?degFtoC(aqdata->swg_percent):aqdata->swg_percent),
|
||||
((homekit_f)?degFtoC(aqdata->swg_percent):aqdata->swg_percent),
|
||||
((homekit)?2:0),
|
||||
((homekit)?degFtoC(aqdata->swg_percent):aqdata->swg_percent),
|
||||
((homekit_f)?degFtoC(aqdata->swg_percent):aqdata->swg_percent),
|
||||
aqdata->ar_swg_status == 0x00?1:0);
|
||||
|
||||
//length += sprintf(buffer+length, "{\"type\": \"value\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"value\": \"%d\" },",
|
||||
length += sprintf(buffer+length, "{\"type\": \"value\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"value\": \"%.*f\" },",
|
||||
((homekit)?SWG_PERCENT_F_TOPIC:SWG_PERCENT_TOPIC),
|
||||
((homekit_f)?SWG_PERCENT_F_TOPIC:SWG_PERCENT_TOPIC),
|
||||
"Salt Water Generator Percent",
|
||||
"on",
|
||||
((homekit)?2:0),
|
||||
((homekit)?degFtoC(aqdata->swg_percent):aqdata->swg_percent));
|
||||
((homekit_f)?2:0),
|
||||
((homekit_f)?degFtoC(aqdata->swg_percent):aqdata->swg_percent));
|
||||
}
|
||||
|
||||
if ( aqdata->swg_ppm != TEMP_UNKNOWN ) {
|
||||
length += sprintf(buffer+length, "{\"type\": \"value\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"value\": \"%d\" },",
|
||||
|
||||
length += sprintf(buffer+length, "{\"type\": \"value\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"value\": \"%.*f\" },",
|
||||
((homekit_f)?SWG_PPM_F_TOPIC:SWG_PPM_TOPIC),
|
||||
"Salt Level PPM",
|
||||
"on",
|
||||
((homekit)?2:0),
|
||||
((homekit_f)?roundf(degFtoC(aqdata->swg_ppm)):aqdata->swg_ppm));
|
||||
|
||||
/*
|
||||
length += sprintf(buffer+length, "{\"type\": \"value\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"value\": \"%d\" },",
|
||||
SWG_PPM_TOPIC,
|
||||
"Salt Level PPM",
|
||||
"on",
|
||||
aqdata->swg_ppm);
|
||||
*/
|
||||
}
|
||||
|
||||
length += sprintf(buffer+length, "{\"type\": \"temperature\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"value\": \"%.*f\" },",
|
||||
|
@ -292,21 +305,21 @@ int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch1, int
|
|||
"Pool Air Temperature",
|
||||
"on",
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->air_temp):aqdata->air_temp));
|
||||
((homekit_f)?degFtoC(aqdata->air_temp):aqdata->air_temp));
|
||||
length += sprintf(buffer+length, "{\"type\": \"temperature\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"value\": \"%.*f\" },",
|
||||
POOL_TEMP_TOPIC,
|
||||
/*POOL_TEMPERATURE,*/
|
||||
"Pool Water Temperature",
|
||||
"on",
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->air_temp):aqdata->pool_temp));
|
||||
((homekit_f)?degFtoC(aqdata->air_temp):aqdata->pool_temp));
|
||||
length += sprintf(buffer+length, "{\"type\": \"temperature\", \"id\": \"%s\", \"name\": \"%s\", \"state\": \"%s\", \"value\": \"%.*f\" }",
|
||||
SPA_TEMP_TOPIC,
|
||||
/*SPA_TEMPERATURE,*/
|
||||
"Spa Water Temperature",
|
||||
"on",
|
||||
((homekit)?2:0),
|
||||
((homekit && aqdata->temp_units==FAHRENHEIT)?degFtoC(aqdata->air_temp):aqdata->spa_temp));
|
||||
((homekit_f)?degFtoC(aqdata->air_temp):aqdata->spa_temp));
|
||||
|
||||
/*
|
||||
length += sprintf(buffer+length, "], \"aux_device_detail\": [");
|
||||
|
|
|
@ -410,7 +410,7 @@ void mqtt_broadcast_aqualinkstate(struct mg_connection *nc)
|
|||
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_mqtt_numeric_msg(nc, SWG_PPM_F_TOPIC, roundf(degFtoC(_aqualink_data->swg_ppm)));
|
||||
send_mqtt_float_msg(nc, SWG_PPM_F_TOPIC, roundf(degFtoC(_aqualink_data->swg_ppm)));
|
||||
send_domoticz_mqtt_numeric_msg(nc, _aqualink_config->dzidx_swg_ppm, _aqualink_data->swg_ppm);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -133,6 +133,7 @@ bool waitForPDAnextMenu(struct aqualinkdata *aq_data) {
|
|||
bool loopover_devices(struct aqualinkdata *aq_data) {
|
||||
int i;
|
||||
int index = -1;
|
||||
|
||||
if (! goto_pda_menu(aq_data, PM_EQUIPTMENT_CONTROL)) {
|
||||
logMessage(LOG_ERR, "loopover_devices :- can't goto PM_EQUIPTMENT_CONTROL menu\n");
|
||||
//cleanAndTerminateThread(threadCtrl);
|
||||
|
@ -142,13 +143,14 @@ bool loopover_devices(struct aqualinkdata *aq_data) {
|
|||
// Should look for message "ALL OFF", that's end of device list.
|
||||
for (i=0; i < 18 && (index = pda_find_m_index("ALL OFF")) == -1 ; i++) {
|
||||
send_cmd(KEY_PDA_DOWN);
|
||||
// Wait for highlight change or shift and update of current line
|
||||
//waitForMessage(aq_data, NULL, 1);
|
||||
waitForPDAMessageTypes(aq_data,CMD_PDA_HIGHLIGHT,CMD_MSG_LONG,8);
|
||||
}
|
||||
if (index == -1) {
|
||||
logMessage(LOG_ERR, "loopover_devices :- can't find ALL OFF\n");
|
||||
return false;
|
||||
logMessage(LOG_ERR, "loopover_devices :- can't find ALL OFF\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -172,6 +174,7 @@ bool find_pda_menu_item(struct aqualinkdata *aq_data, char *menuText, int charli
|
|||
send_cmd(KEY_PDA_DOWN);
|
||||
//delay(500);
|
||||
//wait_for_empty_cmd_buffer();
|
||||
//waitForPDAMessageType(aq_data,CMD_PDA_HIGHLIGHT,2);
|
||||
waitForPDAMessageTypes(aq_data,CMD_PDA_HIGHLIGHT,CMD_MSG_LONG,8);
|
||||
//waitForMessage(aq_data, NULL, 1);
|
||||
index = (charlimit == 0)?pda_find_m_index(menuText):pda_find_m_index_case(menuText, charlimit);
|
||||
|
@ -185,8 +188,7 @@ bool find_pda_menu_item(struct aqualinkdata *aq_data, char *menuText, int charli
|
|||
return false;
|
||||
}
|
||||
} else {
|
||||
logMessage(LOG_ERR, "PDA Device programmer couldn't find menu item '%s' in menu %d index %d\n",
|
||||
menuText, pda_m_type(), index);
|
||||
logMessage(LOG_ERR, "PDA Device programmer couldn't find menu item '%s' in menu %d index %d\n", menuText, pda_m_type(), index);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -307,9 +309,9 @@ bool goto_pda_menu(struct aqualinkdata *aq_data, pda_menu_type menu) {
|
|||
while (ret && (pda_m_type() != menu)) {
|
||||
switch (menu) {
|
||||
case PM_HOME:
|
||||
send_cmd(KEY_PDA_BACK);
|
||||
ret = waitForPDAnextMenu(aq_data);
|
||||
break;
|
||||
send_cmd(KEY_PDA_BACK);
|
||||
ret = waitForPDAnextMenu(aq_data);
|
||||
break;
|
||||
case PM_EQUIPTMENT_CONTROL:
|
||||
if (pda_m_type() == PM_HOME) {
|
||||
ret = select_pda_menu_item(aq_data, "EQUIPMENT ON/OFF", true);
|
||||
|
@ -417,8 +419,7 @@ bool goto_pda_menu(struct aqualinkdata *aq_data, pda_menu_type menu) {
|
|||
menu, pda_m_type());
|
||||
}
|
||||
if (pda_m_type() != menu) {
|
||||
logMessage(LOG_ERR, "PDA Device programmer didn't find a requested menu %d, current %d\n",
|
||||
menu, pda_m_type());
|
||||
logMessage(LOG_ERR, "PDA Device programmer didn't find a requested menu %d, current %d\n", menu, pda_m_type());
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -505,6 +506,8 @@ void *set_aqualink_PDA_device_on_off( void *ptr )
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void *get_aqualink_PDA_device_status( void *ptr )
|
||||
{
|
||||
struct programmingThreadCtrl *threadCtrl;
|
||||
|
@ -582,10 +585,6 @@ void *set_aqualink_PDA_init( void *ptr )
|
|||
logMessage(LOG_ERR, "PDA Init :- Error getting freeze setpoints\n");
|
||||
}
|
||||
|
||||
// shift line test
|
||||
// goto_pda_menu(aq_data,PM_SYSTEM_SETUP);
|
||||
// select_pda_menu_item(aq_data, "SERVICE INFO", true);
|
||||
|
||||
pda_reset_sleep();
|
||||
|
||||
cleanAndTerminateThread(threadCtrl);
|
||||
|
@ -757,6 +756,7 @@ bool set_PDA_numeric_field_value(struct aqualinkdata *aq_data, int val, int *cur
|
|||
if (select_label != NULL) {
|
||||
// :TODO: Should probably change below to call find_pda_menu_item(), rather than doing it here
|
||||
// If we lease this, need to limit on the number of loops
|
||||
//while ( strncasecmp(pda_m_hlight(), select_label, 8) != 0 ) {
|
||||
while ( strncasecmp(pda_m_hlight(), select_label, strlen(select_label)) != 0 ) {
|
||||
send_cmd(KEY_PDA_DOWN);
|
||||
delay(500); // Last message probably was CMD_PDA_HIGHLIGHT, so wait before checking.
|
||||
|
|
|
@ -205,25 +205,25 @@ bool process_pda_menu_packet(unsigned char* packet, int length)
|
|||
if (getLogLevel() >= LOG_DEBUG){print_menu();}
|
||||
break;
|
||||
case CMD_PDA_SHIFTLINES:
|
||||
// press up from top - shift menu down by 1
|
||||
// PDA Shif | HEX: 0x10|0x02|0x62|0x0f|0x01|0x08|0x01|0x8d|0x10|0x03|
|
||||
// press down from bottom - shift menu up by 1
|
||||
// PDA Shif | HEX: 0x10|0x02|0x62|0x0f|0x01|0x08|0xff|0x8b|0x10|0x03|
|
||||
first_line = (signed char)(packet[4]);
|
||||
last_line = (signed char)(packet[5]);
|
||||
line_shift = (signed char)(packet[6]);
|
||||
logMessage(LOG_DEBUG, "\n");
|
||||
if (line_shift < 0) {
|
||||
for (i = first_line-line_shift; i <= last_line; i++) {
|
||||
memcpy(_menu[i+line_shift], _menu[i], AQ_MSGLEN+1);
|
||||
}
|
||||
} else {
|
||||
for (i = last_line; i >= first_line+line_shift; i--) {
|
||||
memcpy(_menu[i], _menu[i-line_shift], AQ_MSGLEN+1);
|
||||
}
|
||||
}
|
||||
if (getLogLevel() >= LOG_DEBUG){print_menu();}
|
||||
break;
|
||||
/// press up from top - shift menu down by 1
|
||||
// PDA Shif | HEX: 0x10|0x02|0x62|0x0f|0x01|0x08|0x01|0x8d|0x10|0x03|
|
||||
// press down from bottom - shift menu up by 1
|
||||
// PDA Shif | HEX: 0x10|0x02|0x62|0x0f|0x01|0x08|0xff|0x8b|0x10|0x03|
|
||||
first_line = (signed char)(packet[4]);
|
||||
last_line = (signed char)(packet[5]);
|
||||
line_shift = (signed char)(packet[6]);
|
||||
logMessage(LOG_DEBUG, "\n");
|
||||
if (line_shift < 0) {
|
||||
for (i = first_line-line_shift; i <= last_line; i++) {
|
||||
memcpy(_menu[i+line_shift], _menu[i], AQ_MSGLEN+1);
|
||||
}
|
||||
} else {
|
||||
for (i = last_line; i >= first_line+line_shift; i--) {
|
||||
memcpy(_menu[i], _menu[i-line_shift], AQ_MSGLEN+1);
|
||||
}
|
||||
}
|
||||
if (getLogLevel() >= LOG_DEBUG){print_menu();}
|
||||
break;
|
||||
}
|
||||
|
||||
return rtn;
|
||||
|
@ -305,4 +305,4 @@ bool NEW_process_pda_menu_packet_NEW(unsigned char* packet, int length)
|
|||
|
||||
return rtn;
|
||||
}
|
||||
#endif
|
||||
#endif
|
|
@ -44,7 +44,7 @@
|
|||
|
||||
static bool _daemonise = false;
|
||||
static bool _log2file = false;
|
||||
static int _log_level = -1;
|
||||
static int _log_level = LOG_ERR;
|
||||
static char *_log_filename = NULL;
|
||||
|
||||
static char *_loq_display_message = NULL;
|
||||
|
@ -283,8 +283,14 @@ void test(int msg_level, char *msg)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void logMessage(int msg_level, char *format, ...)
|
||||
{
|
||||
// Simply return ASAP.
|
||||
if (msg_level > _log_level) {
|
||||
return;
|
||||
}
|
||||
|
||||
char buffer[1024];
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
|
@ -295,12 +301,11 @@ void logMessage(int msg_level, char *format, ...)
|
|||
//test(msg_level, buffer);
|
||||
//fprintf (stderr, buffer);
|
||||
|
||||
// Logging has not been setup yet, so STD error & syslog
|
||||
if (_log_level == -1) {
|
||||
fprintf (stderr, buffer);
|
||||
syslog (msg_level, "%s", &buffer[8]);
|
||||
closelog ();
|
||||
} else if (msg_level > _log_level) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (_daemonise == TRUE)
|
||||
|
@ -313,26 +318,20 @@ void logMessage(int msg_level, char *format, ...)
|
|||
//return;
|
||||
}
|
||||
|
||||
//if (_log2file == TRUE && _log_filename != NULL) {
|
||||
int len;
|
||||
char *strLevel = elevel2text(msg_level);
|
||||
|
||||
strncpy(buffer, strLevel, strlen(strLevel));
|
||||
|
||||
len = strlen(buffer);
|
||||
|
||||
//printf( " '%s' last chrs '%d''%d'\n", buffer, buffer[len-1],buffer[len]);
|
||||
|
||||
if ( buffer[len-1] != '\n') {
|
||||
strcat(buffer, "\n");
|
||||
}
|
||||
int len;
|
||||
char *strLevel = elevel2text(msg_level);
|
||||
strncpy(buffer, strLevel, strlen(strLevel));
|
||||
len = strlen(buffer);
|
||||
if ( buffer[len-1] != '\n') {
|
||||
strcat(buffer, "\n");
|
||||
}
|
||||
|
||||
// Sent the log to the UI if configured.
|
||||
if (msg_level <= LOG_WARNING && _loq_display_message != NULL) {
|
||||
snprintf(_loq_display_message, 127, buffer);
|
||||
}
|
||||
|
||||
|
||||
if (_log2file == TRUE && _log_filename != NULL) {
|
||||
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) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
|
||||
|
||||
#define AQUALINKD_NAME "Aqualink Daemon"
|
||||
#define AQUALINKD_VERSION "1.3.5b"
|
||||
#define AQUALINKD_VERSION "1.3.5c"
|
||||
|
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 846 KiB After Width: | Height: | Size: 846 KiB |
1212
web/hk/index.html
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |