diff --git a/Makefile b/Makefile
index 7c20ab6..55fe38e 100755
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ CFLAGS = $(GCCFLAGS) $(DBG) $(LIBS) -D MG_DISABLE_MD5 -D MG_DISABLE_HTTP_DIGEST_
# Add inputs and outputs from these tool invocations to the build variables
# define the C source files
-SRCS = aqualinkd.c utils.c config.c aq_serial.c init_buttons.c aq_programmer.c net_services.c json_messages.c pda.c pda_menu.c pda_aq_programmer.c packetLogger.c pentair_messages.c mongoose.c
+SRCS = aqualinkd.c utils.c config.c aq_serial.c init_buttons.c aq_programmer.c net_services.c json_messages.c pda.c pda_menu.c pda_aq_programmer.c aquapure.c packetLogger.c pentair_messages.c mongoose.c
DBG_SRC = timespec_subtract.c
# If run with `make DEBUG=true` add debug files and pass parameter for compile
diff --git a/README.md b/README.md
index 2f7cdc7..68cd9a5 100644
--- a/README.md
+++ b/README.md
@@ -66,6 +66,10 @@ 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)
#
+# Update in Release 1.3.9
+* Added panel Timeout mode support to UI and MQTT
+* Fixed SWG bug while in Service & Timeout modes
+* Cleanded up SWG code and MQTT status messages for SWG and SWG/enabled
# Update in Release 1.3.8
* Fixed PDA mode from 1.3.7
* Added SWG Boost to PDA
diff --git a/aqualinkd.c b/aqualinkd.c
index e6c6a32..6f0601c 100644
--- a/aqualinkd.c
+++ b/aqualinkd.c
@@ -41,6 +41,7 @@
#include "pentair_messages.h"
#include "pda_aq_programmer.h"
#include "packetLogger.h"
+#include "aquapure.h"
#include "version.h"
@@ -1085,7 +1086,7 @@ void main_loop()
unsigned char packet_buffer[AQ_MAXPKTLEN+1];
bool interestedInNextAck = false;
bool changed = false;
- int swg_zero_cnt = 0;
+ //int swg_zero_cnt = 0;
int swg_noreply_cnt = 0;
int i;
//int delayAckCnt = 0;
@@ -1260,21 +1261,7 @@ void main_loop()
if (packet_buffer[PKT_DEST] == DEV_MASTER && interestedInNextAck == true)
{
swg_noreply_cnt = 0;
- 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 == SWG_STATUS_ON)
- { // 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;
- }
- _aqualink_data.swg_ppm = packet_buffer[4] * 100;
- changed = true;
- //logMessage(LOG_DEBUG, "Read SWG PPM %d from ID 0x%02hhx\n", _aqualink_data.swg_ppm, SWG_DEV_ID);
- }
+ processPacketFromSWG(packet_buffer, packet_length, &_aqualink_data);
interestedInNextAck = false;
}
//else if (interestedInNextAck == true && packet_buffer[PKT_DEST] != DEV_MASTER && _aqualink_data.ar_swg_status != 0x00)
@@ -1289,33 +1276,7 @@ void main_loop()
else if (packet_buffer[PKT_DEST] == SWG_DEV_ID)
{
interestedInNextAck = true;
-
- // Only read message from controller to SWG to set SWG Percent if we are not programming, as we might be changing this
- if (packet_buffer[3] == CMD_PERCENT && _aqualink_data.active_thread.thread_id == 0 && packet_buffer[4] != 0xFF)
- {
- // In service or timeout mode SWG set % message is very strange. AR %% | HEX: 0x10|0x02|0x50|0x11|0xff|0x72|0x10|0x03|
- // Not really sure what to do with this, just ignore 0xff / 255 for the moment. (if statment above)
-
- // SWG can get ~10 messages to set to 0 then go back again for some reason, so don't go to 0 until 10 messages are received
- if (swg_zero_cnt <= _config_parameters.swg_zero_ignore && packet_buffer[4] == 0x00 && packet_buffer[5] == 0x73) {
- logMessage(LOG_DEBUG, "Ignoring SWG set to %d due to packet packet count %d <= %d from control panel to SWG 0x%02hhx 0x%02hhx\n", (int)packet_buffer[4],swg_zero_cnt,_config_parameters.swg_zero_ignore,packet_buffer[4],packet_buffer[5]);
- swg_zero_cnt++;
- } else if (swg_zero_cnt > _config_parameters.swg_zero_ignore && packet_buffer[4] == 0x00 && packet_buffer[5] == 0x73) {
- _aqualink_data.swg_percent = (int)packet_buffer[4];
- changed = true;
- //logMessage(LOG_DEBUG, "SWG set to %d due to packet packet count %d <= %d from control panel to SWG 0x%02hhx 0x%02hhx\n", (int)packet_buffer[4],swg_zero_cnt,SWG_ZERO_IGNORE_COUNT,packet_buffer[4],packet_buffer[5]);
- //swg_zero_cnt++;
- } else {
- swg_zero_cnt = 0;
- _aqualink_data.swg_percent = (int)packet_buffer[4];
- changed = true;
- //logMessage(LOG_DEBUG, "SWG set to %d due to packet from control panel to SWG 0x%02hhx 0x%02hhx\n", _aqualink_data.swg_percent,packet_buffer[4],packet_buffer[5]);
- }
- if (_aqualink_data.swg_percent > 100)
- _aqualink_data.boost = true;
- else
- _aqualink_data.boost = false;
- }
+ processPacketToSWG(packet_buffer, packet_length, &_aqualink_data, _config_parameters.swg_zero_ignore);
}
else
{
diff --git a/aquapure.c b/aquapure.c
new file mode 100644
index 0000000..56fbf7d
--- /dev/null
+++ b/aquapure.c
@@ -0,0 +1,175 @@
+
+#include
+
+#include "aquapure.h"
+#include "aq_serial.h"
+#include "aqualink.h"
+#include "utils.h"
+#include "aq_mqtt.h"
+
+bool processPacketToSWG(unsigned char *packet, int packet_length, struct aqualinkdata *aqdata, int swg_zero_ignore) {
+ static int swg_zero_cnt = 0;
+ bool changedAnything = false;
+
+ // Only read message from controller to SWG to set SWG Percent if we are not programming, as we might be changing this
+ if (packet[3] == CMD_PERCENT && aqdata->active_thread.thread_id == 0 && packet[4] != 0xFF) {
+ // In service or timeout mode SWG set % message is very strange. AR %% | HEX: 0x10|0x02|0x50|0x11|0xff|0x72|0x10|0x03|
+ // Not really sure what to do with this, just ignore 0xff / 255 for the moment. (if statment above)
+
+ // SWG can get ~10 messages to set to 0 then go back again for some reason, so don't go to 0 until 10 messages are received
+ if (swg_zero_cnt <= swg_zero_ignore && packet[4] == 0x00 && packet[5] == 0x73) {
+ logMessage(LOG_DEBUG, "Ignoring SWG set to %d due to packet packet count %d <= %d from control panel to SWG 0x%02hhx 0x%02hhx\n", (int)packet[4],
+ swg_zero_cnt, swg_zero_ignore, packet[4], packet[5]);
+ swg_zero_cnt++;
+ } else if (swg_zero_cnt > swg_zero_ignore && packet[4] == 0x00 && packet[5] == 0x73) {
+ aqdata->swg_percent = (int)packet[4];
+ changedAnything = true;
+ // logMessage(LOG_DEBUG, "SWG set to %d due to packet packet count %d <= %d from control panel to SWG 0x%02hhx 0x%02hhx\n",
+ // (int)packet[4],swg_zero_cnt,SWG_ZERO_IGNORE_COUNT,packet[4],packet[5]); swg_zero_cnt++;
+ } else {
+ swg_zero_cnt = 0;
+ aqdata->swg_percent = (int)packet[4];
+ changedAnything = true;
+ // logMessage(LOG_DEBUG, "SWG set to %d due to packet from control panel to SWG 0x%02hhx 0x%02hhx\n",
+ // aqdata.swg_percent,packet[4],packet[5]);
+ }
+
+ if (aqdata->swg_percent > 100)
+ aqdata->boost = true;
+ else
+ aqdata->boost = false;
+ }
+ return changedAnything;
+}
+
+bool processPacketFromSWG(unsigned char *packet, int packet_length, struct aqualinkdata *aqdata) {
+ bool changedAnything = false;
+
+ if (packet[PKT_CMD] == CMD_PPM) {
+ aqdata->ar_swg_status = packet[5];
+ if (aqdata->swg_delayed_percent != TEMP_UNKNOWN && aqdata->ar_swg_status == SWG_STATUS_ON) { // We have a delayed % to set.
+ char sval[10];
+ snprintf(sval, 9, "%d", aqdata->swg_delayed_percent);
+ aq_programmer(AQ_SET_SWG_PERCENT, sval, aqdata);
+ logMessage(LOG_NOTICE, "Setting SWG %% to %d, from delayed message\n", aqdata->swg_delayed_percent);
+ aqdata->swg_delayed_percent = TEMP_UNKNOWN;
+ }
+ aqdata->swg_ppm = packet[4] * 100;
+ changedAnything = true;
+ // logMessage(LOG_DEBUG, "Read SWG PPM %d from ID 0x%02hhx\n", aqdata.swg_ppm, SWG_DEV_ID);
+ }
+
+ return changedAnything;
+}
+
+
+aqledstate get_swg_led_state(struct aqualinkdata *aqdata)
+{
+ switch (aqdata->ar_swg_status) {
+ // Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
+ case SWG_STATUS_ON:
+ return (aqdata->swg_percent > 0?ON:ENABLE);
+ break;
+ case SWG_STATUS_NO_FLOW:
+ return ENABLE;
+ break;
+ case SWG_STATUS_LOW_SALT:
+ return (aqdata->swg_percent > 0?ON:ENABLE);
+ break;
+ case SWG_STATUS_HI_SALT:
+ return (aqdata->swg_percent > 0?ON:ENABLE);
+ break;
+ case SWG_STATUS_HIGH_CURRENT:
+ return (aqdata->swg_percent > 0?ON:ENABLE);
+ break;
+ case SWG_STATUS_TURNING_OFF:
+ return OFF;
+ break;
+ case SWG_STATUS_CLEAN_CELL:
+ return (aqdata->swg_percent > 0?ON:ENABLE);
+ return ENABLE;
+ break;
+ case SWG_STATUS_LOW_VOLTS:
+ return ENABLE;
+ break;
+ case SWG_STATUS_LOW_TEMP:
+ return ENABLE;
+ break;
+ case SWG_STATUS_CHECK_PCB:
+ return ENABLE;
+ break;
+ case SWG_STATUS_OFF: // THIS IS OUR OFF STATUS, NOT AQUAPURE
+ return OFF;
+ break;
+ default:
+ return (aqdata->swg_percent > 0?ON:ENABLE);
+ break;
+ }
+}
+
+void get_swg_status_mqtt(struct aqualinkdata *aqdata, char *message, int *status, int *dzalert)
+{
+ switch (aqdata->ar_swg_status) {
+ // Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
+ case SWG_STATUS_ON:
+ *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
+ sprintf(message, "AQUAPURE GENERATING CHLORINE");
+ *dzalert = 1;
+ break;
+ case SWG_STATUS_NO_FLOW:
+ *status = SWG_OFF;
+ sprintf(message, "AQUAPURE NO FLOW");
+ *dzalert = 2;
+ break;
+ case SWG_STATUS_LOW_SALT:
+ *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
+ sprintf(message, "AQUAPURE LOW SALT");
+ *dzalert = 2;
+ break;
+ case SWG_STATUS_HI_SALT:
+ *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
+ sprintf(message, "AQUAPURE HIGH SALT");
+ *dzalert = 3;
+ break;
+ case SWG_STATUS_HIGH_CURRENT:
+ *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
+ sprintf(message, "AQUAPURE HIGH CURRENT");
+ *dzalert = 4;
+ break;
+ case SWG_STATUS_TURNING_OFF:
+ *status = SWG_OFF;
+ sprintf(message, "AQUAPURE TURNING OFF");
+ *dzalert = 0;
+ break;
+ case SWG_STATUS_CLEAN_CELL:
+ *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
+ sprintf(message, "AQUAPURE CLEAN CELL");
+ *dzalert = 2;
+ break;
+ case SWG_STATUS_LOW_VOLTS:
+ *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
+ sprintf(message, "AQUAPURE LOW VOLTAGE");
+ *dzalert = 3;
+ break;
+ case SWG_STATUS_LOW_TEMP:
+ *status = SWG_OFF;
+ sprintf(message, "AQUAPURE WATER TEMP LOW");
+ *dzalert = 2;
+ break;
+ case SWG_STATUS_CHECK_PCB:
+ *status = SWG_OFF;
+ sprintf(message, "AQUAPURE CHECK PCB");
+ *dzalert = 4;
+ break;
+ case SWG_STATUS_OFF: // THIS IS OUR OFF STATUS, NOT AQUAPURE
+ *status = SWG_OFF;
+ sprintf(message, "AQUAPURE OFF");
+ *dzalert = 0;
+ break;
+ default:
+ *status = (aqdata->swg_percent > 0?SWG_ON:SWG_OFF);
+ sprintf(message, "AQUAPURE UNKNOWN STATUS");
+ *dzalert = 4;
+ break;
+ }
+}
\ No newline at end of file
diff --git a/aquapure.h b/aquapure.h
new file mode 100644
index 0000000..4876183
--- /dev/null
+++ b/aquapure.h
@@ -0,0 +1,14 @@
+#ifndef AQUAPURE_H_
+#define AQUAPURE_H_
+
+#include
+
+#include "aqualink.h"
+
+bool processPacketToSWG(unsigned char *packet, int packet_length, struct aqualinkdata *aqdata, int swg_zero_ignore);
+bool processPacketFromSWG(unsigned char *packet, int packet_length, struct aqualinkdata *aqdata);
+
+void get_swg_status_mqtt(struct aqualinkdata *aqdata, char *message, int *status, int *dzalert);
+aqledstate get_swg_led_state(struct aqualinkdata *aqdata);
+
+#endif // AQUAPURE_H_
\ No newline at end of file
diff --git a/json_messages.c b/json_messages.c
index 171dd29..3ebe225 100644
--- a/json_messages.c
+++ b/json_messages.c
@@ -28,6 +28,7 @@
#include "json_messages.h"
#include "domoticz.h"
#include "aq_mqtt.h"
+#include "aquapure.h"
#include "version.h"
@@ -268,7 +269,8 @@ int build_device_JSON(struct aqualinkdata *aqdata, int programable_switch1, int
SWG_TOPIC,
"Salt Water Generator",
aqdata->ar_swg_status == SWG_STATUS_OFF?JSON_OFF:JSON_ON,
- aqdata->ar_swg_status == SWG_STATUS_OFF?JSON_OFF:JSON_ON,
+ //aqdata->ar_swg_status == SWG_STATUS_OFF?JSON_OFF:JSON_ON,
+ LED2text(get_swg_led_state(aqdata)),
((homekit)?2:0),
((homekit_f)?degFtoC(aqdata->swg_percent):aqdata->swg_percent),
((homekit)?2:0),
@@ -414,6 +416,7 @@ int build_aqualink_status_JSON(struct aqualinkdata *aqdata, char* buffer, int si
length += sprintf(buffer+length, ",\"leds\":{" );
for (i=0; i < TOTAL_BUTTONS; i++)
{
+ /*
char *state = JSON_OFF;
switch (aqdata->aqbuttons[i].led->state)
{
@@ -430,7 +433,8 @@ int build_aqualink_status_JSON(struct aqualinkdata *aqdata, char* buffer, int si
case ENABLE:
state = JSON_ENABLED;
break;
- }
+ }*/
+ char *state = LED2text(aqdata->aqbuttons[i].led->state);
length += sprintf(buffer+length, "\"%s\": \"%s\"", aqdata->aqbuttons[i].name, state);
if (i+1 < TOTAL_BUTTONS)
@@ -438,7 +442,9 @@ int build_aqualink_status_JSON(struct aqualinkdata *aqdata, char* buffer, int si
}
if ( aqdata->swg_percent != TEMP_UNKNOWN ) {
- length += sprintf(buffer+length, ", \"%s\": \"%s\"", SWG_TOPIC, aqdata->ar_swg_status == SWG_STATUS_OFF?JSON_OFF:JSON_ON);
+
+ length += sprintf(buffer+length, ", \"%s\": \"%s\"", SWG_TOPIC, LED2text(get_swg_led_state(aqdata)));
+ //length += sprintf(buffer+length, ", \"%s\": \"%s\"", SWG_TOPIC, aqdata->ar_swg_status == SWG_STATUS_OFF?JSON_OFF:JSON_ON);
length += sprintf(buffer+length, ", \"%s\": \"%s\"", SWG_BOOST_TOPIC, aqdata->boost?JSON_ON:JSON_OFF);
}
//NSF Need to come back and read what the display states when Freeze protection is on
diff --git a/net_services.c b/net_services.c
index ad2e721..7e2a66f 100644
--- a/net_services.c
+++ b/net_services.c
@@ -34,6 +34,7 @@
#include "domoticz.h"
#include "aq_mqtt.h"
#include "pda.h"
+#include "aquapure.h"
static struct aqconfig *_aqualink_config;
@@ -398,8 +399,37 @@ void mqtt_broadcast_aqualinkstate(struct mg_connection *nc)
_last_mqtt_aqualinkdata.battery = _aqualink_data->battery;
send_mqtt_string_msg(nc, BATTERY_STATE, _aqualink_data->battery==OK?MQTT_ON:MQTT_OFF);
}
+
+ if (_aqualink_data->ar_swg_status != _last_mqtt_aqualinkdata.ar_swg_status ||
+ _aqualink_data->swg_percent != _last_mqtt_aqualinkdata.swg_percent) { // Percent can also effect status
+ char message[30];
+ int status;
+ int dzalert;
- //if (_aqualink_data->ar_swg_status == SWG_STATUS_ON) { // If the SWG is actually on
+ get_swg_status_mqtt(_aqualink_data, message, &status, &dzalert);
+
+ if (!_aqualink_data->simulate_panel)
+ sprintf(_aqualink_data->last_display_message, message);
+
+ send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, dzalert, &message[10]);
+ send_mqtt_int_msg(nc, SWG_TOPIC, status);
+
+ if (_aqualink_data->ar_swg_status == SWG_STATUS_OFF)
+ send_mqtt_int_msg(nc, SWG_ENABELED_TOPIC, SWG_OFF);
+ else
+ send_mqtt_int_msg(nc, SWG_ENABELED_TOPIC, SWG_ON);
+
+ send_mqtt_int_msg(nc, SWG_EXTENDED_TOPIC, (int)_aqualink_data->ar_swg_status);
+
+ _last_mqtt_aqualinkdata.ar_swg_status = _aqualink_data->ar_swg_status;
+ }
+
+ if (_aqualink_data->boost != _last_mqtt_aqualinkdata.boost) {
+ send_mqtt_int_msg(nc, SWG_BOOST_TOPIC, _aqualink_data->boost);
+ _last_mqtt_aqualinkdata.boost = _aqualink_data->boost;
+ }
+
+ //if (_aqualink_data->ar_swg_status == SWG_STATUS_ON) { // If the SWG is actually on
if (_aqualink_data->ar_swg_status != SWG_STATUS_OFF) { // 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;
@@ -415,96 +445,6 @@ void mqtt_broadcast_aqualinkstate(struct mg_connection *nc)
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) {
-
- send_mqtt_int_msg(nc, SWG_EXTENDED_TOPIC, (int)_aqualink_data->ar_swg_status);
-
- if (_aqualink_data->ar_swg_status == SWG_STATUS_OFF)
- send_mqtt_int_msg(nc, SWG_ENABELED_TOPIC, SWG_OFF);
- else
- send_mqtt_int_msg(nc, SWG_ENABELED_TOPIC, SWG_ON);
-
- switch (_aqualink_data->ar_swg_status) {
- // Level = (0=gray, 1=green, 2=yellow, 3=orange, 4=red)
- case SWG_STATUS_ON:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure ON");
- 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 SWG_STATUS_NO_FLOW:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure No Flow");
- 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 SWG_STATUS_LOW_SALT:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure Low Salt");
- 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 SWG_STATUS_HI_SALT:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure High Salt");
- send_domoticz_mqtt_status_message(nc, _aqualink_config->dzidx_swg_status, 3, "HIGH SALT");
- send_mqtt_int_msg(nc, SWG_TOPIC, SWG_ON);
- break;
- case SWG_STATUS_HIGH_CURRENT:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure High Current");
- 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 SWG_STATUS_TURNING_OFF:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure Turning Off");
- 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 SWG_STATUS_CLEAN_CELL:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure Clean Cell");
- 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 SWG_STATUS_LOW_VOLTS:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure Low Voltage");
- 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 SWG_STATUS_LOW_TEMP:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure Water Temp Low");
- 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 SWG_STATUS_CHECK_PCB:
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure Check PCB");
- 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 SWG_STATUS_OFF: // THIS IS OUR OFF STATUS, NOT AQUAPURE
- if (!_aqualink_data->simulate_panel)
- sprintf(_aqualink_data->last_display_message, "AquaPure OFF");
- 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");
- send_mqtt_int_msg(nc, SWG_TOPIC, SWG_ON);
- break;
- }
- _last_mqtt_aqualinkdata.ar_swg_status = _aqualink_data->ar_swg_status;
- }
-
- if (_aqualink_data->boost != _last_mqtt_aqualinkdata.boost) {
- send_mqtt_int_msg(nc, SWG_BOOST_TOPIC, _aqualink_data->boost);
- _last_mqtt_aqualinkdata.boost = _aqualink_data->boost;
- }
//logMessage(LOG_INFO, "mqtt_broadcast_aqualinkstate: START LEDs\n");
diff --git a/release/aqualinkd b/release/aqualinkd
index 4bf1284..488b251 100755
Binary files a/release/aqualinkd and b/release/aqualinkd differ
diff --git a/version.h b/version.h
index 20dab40..5171889 100644
--- a/version.h
+++ b/version.h
@@ -1,4 +1,4 @@
#define AQUALINKD_NAME "Aqualink Daemon"
-#define AQUALINKD_VERSION "1.3.8a"
+#define AQUALINKD_VERSION "1.3.9"
diff --git a/web/controller.html b/web/controller.html
index 41a32d6..8f8fba5 100644
--- a/web/controller.html
+++ b/web/controller.html
@@ -860,11 +860,16 @@
if (type == 'setpoint_swg') {
if (tile.getAttribute('Boost') == 'on')
text = "Boost";
+ else if (status == 'enabled')
+ text = 'Enabled';
else
text = 'Generating';
}
else if (type == 'setpoint_thermo')
- text = 'Heating to ' + tile.getAttribute('setpoint');
+ if (status == 'enabled')
+ text = 'Heat to ' + tile.getAttribute('setpoint');
+ else
+ text = 'Heating to ' + tile.getAttribute('setpoint');
else if (type == 'setpoint_freeze')
text = 'Turn on ' + tile.getAttribute('setpoint') + "°";
//else