diff --git a/src/ems-esp.cpp b/src/ems-esp.cpp index a95f8ed7f..6a0c5e2d4 100644 --- a/src/ems-esp.cpp +++ b/src/ems-esp.cpp @@ -371,6 +371,38 @@ void _renderBoolValue(const char * prefix, uint8_t value) { myDebug(buffer); } +// figures out the thermostat mode +// returns 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day +uint8_t _getThermostatMode() { + int thermoMode = EMS_VALUE_INT_NOTSET; + + if (ems_getThermostatModel() == EMS_MODEL_RC20) { + if (EMS_Thermostat.mode == 0) { + thermoMode = 0; // low + } else if (EMS_Thermostat.mode == 1) { + thermoMode = 1; // manual + } else if (EMS_Thermostat.mode == 2) { + thermoMode = 2; // auto + } + } else if (ems_getThermostatModel() == EMS_MODEL_RC300) { + if (EMS_Thermostat.mode == 0) { + thermoMode = 1; // manual + } else if (EMS_Thermostat.mode == 1) { + thermoMode = 2; // auto + } + } else { // default for all thermostats + if (EMS_Thermostat.mode == 0) { + thermoMode = 3; // night + } else if (EMS_Thermostat.mode == 1) { + thermoMode = 4; // day + } else if (EMS_Thermostat.mode == 2) { + thermoMode = 2; // auto + } + } + + return thermoMode; +} + // Show command - display stats on an 's' command void showInfo() { // General stats from EMS bus @@ -550,7 +582,7 @@ void showInfo() { myDebug_P(PSTR(" Thermostat: %s"), ems_getThermostatDescription(buffer_type)); // Render Current & Setpoint Room Temperature - if ((ems_getThermostatModel() == EMS_MODEL_EASY)) { + if (ems_getThermostatModel() == EMS_MODEL_EASY) { // Temperatures are *100 _renderShortValue("Set room temperature", "C", EMS_Thermostat.setpoint_roomTemp, 10); // *100 _renderShortValue("Current room temperature", "C", EMS_Thermostat.curr_roomTemp, 10); // *100 @@ -572,42 +604,20 @@ void showInfo() { } // Render Thermostat Date & Time - myDebug_P(PSTR(" Thermostat time is %02d:%02d:%02d %d/%d/%d"), - EMS_Thermostat.hour, - EMS_Thermostat.minute, - EMS_Thermostat.second, - EMS_Thermostat.day, - EMS_Thermostat.month, - EMS_Thermostat.year + 2000); - - // thermostat mode (-1=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day) - int thermoMode = -1; - - if (ems_getThermostatModel() == EMS_MODEL_RC20) { - if (EMS_Thermostat.mode == 0) { - thermoMode = 0; // low - } else if (EMS_Thermostat.mode == 1) { - thermoMode = 1; // manual - } else { - thermoMode = 2; // auto - } - } else if (ems_getThermostatModel() == EMS_MODEL_RC300) { - if (EMS_Thermostat.mode == 0) { - thermoMode = 1; // manual - } else if (EMS_Thermostat.mode == 1) { - thermoMode = 2; // auto - } - } else { // default for all thermostats - if (EMS_Thermostat.mode == 0) { - thermoMode = 3; // night - } else if (EMS_Thermostat.mode == 1) { - thermoMode = 4; // day - } else { - thermoMode = 2; // auto - } + // not for EASY + if ((ems_getThermostatModel() != EMS_MODEL_EASY)) { + myDebug_P(PSTR(" Thermostat time is %02d:%02d:%02d %d/%d/%d"), + EMS_Thermostat.hour, + EMS_Thermostat.minute, + EMS_Thermostat.second, + EMS_Thermostat.day, + EMS_Thermostat.month, + EMS_Thermostat.year + 2000); } - // Render Termostat Mode + // Render Termostat Mode, if we have a mode + uint8_t thermoMode = _getThermostatMode(); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day + if (thermoMode == 0) { myDebug_P(PSTR(" Mode is set to low")); } else if (thermoMode == 1) { @@ -618,8 +628,6 @@ void showInfo() { myDebug_P(PSTR(" Mode is set to night")); } else if (thermoMode == 4) { myDebug_P(PSTR(" Mode is set to day")); - } else { - myDebug_P(PSTR(" Mode is set to ?")); } } @@ -801,12 +809,16 @@ void publishValues(bool force) { rootThermostat[THERMOSTAT_HC] = _int_to_char(s, EMSESP_Status.heating_circuit); // different logic depending on thermostat types - if ((ems_getThermostatModel() == EMS_MODEL_EASY) || (ems_getThermostatModel() == EMS_MODEL_FR10) || (ems_getThermostatModel() == EMS_MODEL_FW100)) { + if (ems_getThermostatModel() == EMS_MODEL_EASY) { + if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET) + rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 100; + if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET) + rootThermostat[THERMOSTAT_CURRTEMP] = (double)EMS_Thermostat.curr_roomTemp / 100; + } else if ((ems_getThermostatModel() == EMS_MODEL_FR10) || (ems_getThermostatModel() == EMS_MODEL_FW100)) { if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET) rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 10; if (EMS_Thermostat.curr_roomTemp != EMS_VALUE_SHORT_NOTSET) rootThermostat[THERMOSTAT_CURRTEMP] = (double)EMS_Thermostat.curr_roomTemp / 10; - } else { if (EMS_Thermostat.setpoint_roomTemp != EMS_VALUE_SHORT_NOTSET) rootThermostat[THERMOSTAT_SELTEMP] = (double)EMS_Thermostat.setpoint_roomTemp / 2; @@ -827,32 +839,7 @@ void publishValues(bool force) { rootThermostat[THERMOSTAT_CIRCUITCALCTEMP] = EMS_Thermostat.circuitcalctemp; } - // thermostat mode (-1=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day) - int thermoMode = -1; - - if (ems_getThermostatModel() == EMS_MODEL_RC20) { - if (EMS_Thermostat.mode == 0) { - thermoMode = 0; // low - } else if (EMS_Thermostat.mode == 1) { - thermoMode = 1; // manual - } else { - thermoMode = 2; // auto - } - } else if (ems_getThermostatModel() == EMS_MODEL_RC300) { - if (EMS_Thermostat.mode == 0) { - thermoMode = 1; // manual - } else if (EMS_Thermostat.mode == 1) { - thermoMode = 2; // auto - } - } else { // default for all thermostats - if (EMS_Thermostat.mode == 0) { - thermoMode = 3; // night - } else if (EMS_Thermostat.mode == 1) { - thermoMode = 4; // day - } else { - thermoMode = 2; // auto - } - } + uint8_t thermoMode = _getThermostatMode(); // 0xFF=unknown, 0=low, 1=manual, 2=auto, 3=night, 4=day // Termostat Mode if (thermoMode == 0) { @@ -1854,9 +1841,9 @@ void setup() { INIT_MARKERS(0); LA_PULSE(50); - // GPIO15 has a pull down, so we must set it to HIGH + // GPIO15 has a pull down, so we must set it to HIGH pinMode(15, OUTPUT); - digitalWrite(15,1); + digitalWrite(15, 1); // init our own parameters initEMSESP(); @@ -1868,7 +1855,7 @@ void setup() { // set up myESP for Wifi, MQTT, MDNS and Telnet myESP.setTelnet(TelnetCommandCallback, TelnetCallback); // set up Telnet commands - myESP.setWIFI(NULL, NULL, WIFICallback); // empty ssid and password as we take this from the config file + myESP.setWIFI(NULL, NULL, WIFICallback); // empty ssid and password as we take this from the config file // MQTT host, username and password taken from the SPIFFS settings myESP.setMQTT( diff --git a/src/ems.cpp b/src/ems.cpp index 68d0e2ff3..45d723786 100644 --- a/src/ems.cpp +++ b/src/ems.cpp @@ -220,7 +220,6 @@ const uint32_t EMS_BUS_TIMEOUT = 15000; // timeout in ms before recogni const uint32_t EMS_POLL_TIMEOUT = 5000000; // timeout in microseconds before recognizing the ems bus is offline (5 seconds) // init stats and counters and buffers -// uses -255 or 255 for values that haven't been set yet (EMS_VALUE_INT_NOTSET and EMS_VALUE_FLOAT_NOTSET) void ems_init() { // overall status EMS_Sys_Status.emsRxPgks = 0; @@ -248,8 +247,8 @@ void ems_init() { EMS_Thermostat.day = 0; EMS_Thermostat.month = 0; EMS_Thermostat.year = 0; - EMS_Thermostat.mode = 255; // dummy value - EMS_Thermostat.day_mode = 255; // dummy value + EMS_Thermostat.mode = EMS_VALUE_INT_NOTSET; + EMS_Thermostat.day_mode = EMS_VALUE_INT_NOTSET; EMS_Thermostat.device_id = EMS_ID_NONE; EMS_Thermostat.write_supported = false; EMS_Thermostat.hc = 1; // default heating circuit is 1 diff --git a/src/version.h b/src/version.h index 69c10001e..3151ef23c 100644 --- a/src/version.h +++ b/src/version.h @@ -6,5 +6,5 @@ #pragma once #define APP_NAME "EMS-ESP" -#define APP_VERSION "1.8.1b21" +#define APP_VERSION "1.8.1b22" #define APP_HOSTNAME "ems-esp"