From 541c0c2e10b30098e26656a97a1686c8d44bc3bd Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 7 Mar 2019 08:29:20 +0100 Subject: [PATCH] 1.5.5 --- CHANGELOG.md | 22 ++- README.md | 2 +- ...are_d1_mini.bin => emsesp_155_d1_mini.bin} | Bin 413776 -> 416288 bytes lib/myESP/MyESP.cpp | 140 ++++++++++-------- lib/myESP/MyESP.h | 13 +- platformio.ini-example | 4 +- src/ems-esp.ino | 97 ++++++------ src/ems.cpp | 2 +- src/ems_devices.h | 6 +- src/my_config.h | 2 +- src/version.h | 2 +- 11 files changed, 161 insertions(+), 129 deletions(-) rename firmware/{firmware_d1_mini.bin => emsesp_155_d1_mini.bin} (53%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8baf20f0..784a34b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,23 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.5.5] 2019-03-07 + +### Fixed +- Support the latest ArduinoJson v6 and espressif8266 2.0.4 libraries (in PlatformIO do a `pio lib update` and `pio update`) + +### Changed + +- MQTT keep alive to 2 minutes (60 seconds was just too short for slower networks) +- Improved MQTT startup time +- Setting wifi or mqtt settings are immediate, no need to restart the ESP +- Text changes in the help + +### Added +- Show if MQTT is connected +- Show version of MyESP (the custom MQTT, Wifi, OTA, MDNS, Telnet library) +- EMS-OT OpenTherm connector + ## [1.5.4] 2019-03-03 ### Changed @@ -14,7 +31,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Callback for OTA. This is used to disable EMS bus during a firmware OTA update, which caused problems with the latest ESP89266 core libraries - Added rough estimate of WiFi signal strength to info page -- Added the build time & date to the info page (optional in platformio.ini)## [1.5.3] 2019-02-22 +- Added the build time & date to the info page (optional in platformio.ini) + +## [1.5.3] 2019-02-22 ### Changed @@ -84,7 +103,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - some minor improvements to autodetect - ## [1.4.0] 2019-01-27 ### Changed diff --git a/README.md b/README.md index a1720f54..ba258a04 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ EMS-ESP is a project to build an electronic controller circuit using an Espressi There are 3 parts to this project, first the design of the circuit, secondly the code for the ESP8266 microcontroller firmware with telnet and MQTT support, and lastly an example configuration for Home Assistant to monitor the data and issue direct commands via a MQTT broker. [![Codacy Badge](https://api.codacy.com/project/badge/Grade/b8880625bdf841d4adb2829732030887)](https://app.codacy.com/app/proddy/EMS-ESP?utm_source=github.com&utm_medium=referral&utm_content=proddy/EMS-ESP&utm_campaign=Badge_Grade_Settings) -[![version](https://img.shields.io/badge/version-1.5.4-brightgreen.svg)](CHANGELOG.md) +[![version](https://img.shields.io/badge/version-1.5.5-brightgreen.svg)](CHANGELOG.md) - [EMS-ESP](#ems-esp) - [Introduction](#introduction) diff --git a/firmware/firmware_d1_mini.bin b/firmware/emsesp_155_d1_mini.bin similarity index 53% rename from firmware/firmware_d1_mini.bin rename to firmware/emsesp_155_d1_mini.bin index 15ca8a6fc8261979a4fc658268a66551838cbc63..154585dce2c784a9679003e156ee08a2de14c50b 100644 GIT binary patch delta 80733 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 N`=Wua`=5XN{uff7?JNKQ delta 78106 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 diff --git a/lib/myESP/MyESP.cpp b/lib/myESP/MyESP.cpp index 93398633..46a5736a 100644 --- a/lib/myESP/MyESP.cpp +++ b/lib/myESP/MyESP.cpp @@ -2,21 +2,27 @@ * MyESP - my ESP helper class to handle Wifi, MQTT and Telnet * * Paul Derbyshire - December 2018 - * Version 1.1 - Feb 22 2019. Added support for ESP32 - * Version 1.1.1 - March 3 2019. Added OTA callback * * Ideas borrowed from Espurna https://github.com/xoseperez/espurna */ #include "MyESP.h" +#define RTC_LEAP_YEAR(year) ((((year) % 4 == 0) && ((year) % 100 != 0)) || ((year) % 400 == 0)) + +/* Days in a month */ +static uint8_t RTC_Months[2][12] = { + {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, /* Not leap year */ + {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} /* Leap year */ +}; + // constructor MyESP::MyESP() { _app_hostname = strdup("MyESP"); _app_name = strdup("MyESP"); - _app_version = strdup("1.1.1"); + _app_version = strdup(MYESP_VERSION); - _boottime = strdup("unknown"); + _boottime = strdup(""); _load_average = 100; // calculated load average _telnetcommand_callback = NULL; @@ -42,14 +48,14 @@ MyESP::MyESP() { _mqtt_topic = NULL; _mqtt_qos = 0; _mqtt_reconnect_delay = MQTT_RECONNECT_DELAY_MIN; + _mqtt_last_connection = 0; + _mqtt_connecting = false; _wifi_password = NULL; _wifi_ssid = NULL; _wifi_callback = NULL; _wifi_connected = false; - _ota_callback = NULL; - _suspendOutput = false; } @@ -240,6 +246,8 @@ void MyESP::_mqttOnConnect() { myDebug_P(PSTR("[MQTT] Connected")); _mqtt_reconnect_delay = MQTT_RECONNECT_DELAY_MIN; + _mqtt_last_connection = millis(); + // say we're alive to the Last Will topic mqttClient.publish(_mqttTopic(_mqtt_will_topic), 1, true, _mqtt_will_online_payload); @@ -253,8 +261,6 @@ void MyESP::_mqtt_setup() { myDebug_P(PSTR("[MQTT] disabled")); } - _mqtt_reconnect_delay = MQTT_RECONNECT_DELAY_MIN; - mqttClient.onConnect([this](bool sessionPresent) { _mqttOnConnect(); }); mqttClient.onDisconnect([this](AsyncMqttClientDisconnectReason reason) { @@ -274,6 +280,10 @@ void MyESP::_mqtt_setup() { if (reason == AsyncMqttClientDisconnectReason::MQTT_NOT_AUTHORIZED) { myDebug_P(PSTR("[MQTT] Not authorized")); } + + // Reset reconnection delay + _mqtt_last_connection = millis(); + _mqtt_connecting = false; }); //mqttClient.onSubscribe([this](uint16_t packetId, uint8_t qos) { myDebug_P(PSTR("[MQTT] Subscribe ACK for PID %d"), packetId); }); @@ -391,15 +401,6 @@ void MyESP::_telnet_setup() { memset(_command, 0, TELNET_MAX_COMMAND_LENGTH); } - -#define RTC_LEAP_YEAR(year) ((((year) % 4 == 0) && ((year) % 100 != 0)) || ((year) % 400 == 0)) - -/* Days in a month */ -static uint8_t RTC_Months[2][12] = { - {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, /* Not leap year */ - {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} /* Leap year */ -}; - // https://stackoverflow.com/questions/43063071/the-arduino-ntp-i-want-print-out-datadd-mm-yyyy void MyESP::_printBuildTime(unsigned long unix) { // compensate for summer/winter time and CET. Can't be bothered to work out DST. @@ -462,7 +463,7 @@ void MyESP::_consoleShowHelp() { SerialAndTelnet.println(); if (WiFi.getMode() & WIFI_AP) { - SerialAndTelnet.printf("* ESP8266 is in AP mode with SSID %s", jw.getAPSSID().c_str()); + SerialAndTelnet.printf("* ESP is in AP mode with SSID %s", jw.getAPSSID().c_str()); SerialAndTelnet.println(); } else { #if defined(ARDUINO_ARCH_ESP32) @@ -477,6 +478,7 @@ void MyESP::_consoleShowHelp() { #ifdef ARDUINO_BOARD SerialAndTelnet.printf(" Board: %s", ARDUINO_BOARD); #endif + SerialAndTelnet.printf(" (MyESP v%s)", MYESP_VERSION); #ifdef BUILD_TIME SerialAndTelnet.print(" (Build "); @@ -486,10 +488,13 @@ void MyESP::_consoleShowHelp() { SerialAndTelnet.println(); SerialAndTelnet.printf("* Connected to WiFi SSID: %s (signal %d%%)", WiFi.SSID().c_str(), getWifiQuality()); SerialAndTelnet.println(); + SerialAndTelnet.printf("* MQTT is %s", mqttClient.connected() ? "connected" : "disconnected"); + SerialAndTelnet.println(); SerialAndTelnet.printf("* Boot time: %s", _boottime); SerialAndTelnet.println(); } - SerialAndTelnet.printf("* Free RAM:%d KB, Load:%d%%", (ESP.getFreeHeap() / 1024), getSystemLoadAverage()); + + SerialAndTelnet.printf("* Free RAM: %d KB Load: %d%%", (ESP.getFreeHeap() / 1024), getSystemLoadAverage()); SerialAndTelnet.println(); // for battery power is ESP.getVcc() @@ -498,7 +503,7 @@ void MyESP::_consoleShowHelp() { SerialAndTelnet.println(FPSTR("* ?=help, CTRL-D=quit")); SerialAndTelnet.println(FPSTR("* reboot")); SerialAndTelnet.println(FPSTR("* set")); - SerialAndTelnet.println(FPSTR("* set wifi ")); + SerialAndTelnet.println(FPSTR("* set wifi [ssid] [password]")); SerialAndTelnet.println(FPSTR("* set [value]")); SerialAndTelnet.println(FPSTR("* set erase")); SerialAndTelnet.println(FPSTR("* set serial")); @@ -538,8 +543,7 @@ void MyESP::resetESP() { // read next word from string buffer char * MyESP::_telnet_readWord() { - char * word = strtok(NULL, ", \n"); - return word; + return (strtok(NULL, ", \n")); } // change setting for 2 params (set ) @@ -561,7 +565,10 @@ void MyESP::_changeSetting2(const char * setting, const char * value1, const cha } (void)fs_saveConfig(); - SerialAndTelnet.println("Wifi credentials set. Type 'reboot' to restart..."); + SerialAndTelnet.println("WiFi settings changed. Reconnecting..."); + jw.disconnect(); + jw.cleanNetworks(); + jw.addNetwork(_wifi_ssid, _wifi_password); } } @@ -778,15 +785,20 @@ void MyESP::_telnetHandle() { // ensure we have a connection to MQTT broker void MyESP::_mqttConnect() { - if (!_mqtt_host || mqttClient.connected() || (WiFi.status() != WL_CONNECTED)) { + if (!_mqtt_host) + return; // MQTT not enabled + + // Do not connect if already connected or still trying to connect + if (mqttClient.connected() || _mqtt_connecting || (WiFi.status() != WL_CONNECTED)) { return; } // Check reconnect interval - static unsigned long last = 0; - if (millis() - last < _mqtt_reconnect_delay) + if (millis() - _mqtt_last_connection < _mqtt_reconnect_delay) { return; - last = millis(); + } + + _mqtt_connecting = true; // we're doing a connection // Increase the reconnect delay _mqtt_reconnect_delay += MQTT_RECONNECT_DELAY_STEP; @@ -801,7 +813,7 @@ void MyESP::_mqttConnect() { // last will if (_mqtt_will_topic) { - myDebug_P(PSTR("[MQTT] Setting last will topic %s"), _mqttTopic(_mqtt_will_topic)); + //myDebug_P(PSTR("[MQTT] Setting last will topic %s"), _mqttTopic(_mqtt_will_topic)); mqttClient.setWill(_mqttTopic(_mqtt_will_topic), 1, true, _mqtt_will_offline_payload); // retain always true } @@ -923,15 +935,21 @@ char * MyESP::_mqttTopic(const char * topic) { // print contents of file -// assume Serial is open +// assumes Serial is open void MyESP::_fs_printConfig() { myDebug_P(PSTR("[FS] Contents:")); File configFile = SPIFFS.open(MYEMS_CONFIG_FILE, "r"); + if (!configFile) { + Serial.println(F("[FS] Failed to read file for printing")); + return; + } + while (configFile.available()) { SerialAndTelnet.print((char)configFile.read()); } - myDebug_P(PSTR("")); + SerialAndTelnet.println(); + configFile.close(); } @@ -965,14 +983,15 @@ bool MyESP::_fs_loadConfig() { return false; } - // assign buffer - std::unique_ptr buf(new char[size]); - - // use configFile.readString - configFile.readBytes(buf.get(), size); + StaticJsonDocument doc; + JsonObject json = doc.to(); - StaticJsonBuffer jsonBuffer; - JsonObject & json = jsonBuffer.parseObject(buf.get()); + // Deserialize the JSON document + DeserializationError error = deserializeJson(doc, configFile); + if (error) { + Serial.println(F("[FS] Failed to read file")); + return false; + } const char * value; @@ -991,18 +1010,12 @@ bool MyESP::_fs_loadConfig() { value = json["mqtt_password"]; _mqtt_password = (value) ? strdup(value) : NULL; + _use_serial = (bool)json["use_serial"]; + // callback for loading custom settings // ok is false if there's a problem loading a custom setting (e.g. does not exist) bool ok = (_fs_callback)(MYESP_FSACTION_LOAD, json); - // new configs after release 1.3.x - if (json.containsKey("use_serial")) { - _use_serial = (bool)json["use_serial"]; - } else { - _use_serial = false; // if first time, set serial to off - ok = false; - } - configFile.close(); return ok; @@ -1010,9 +1023,10 @@ bool MyESP::_fs_loadConfig() { // save settings to spiffs bool MyESP::fs_saveConfig() { - StaticJsonBuffer jsonBuffer; - JsonObject & json = jsonBuffer.createObject(); + StaticJsonDocument doc; + JsonObject json = doc.to(); + json["app_version"] = _app_version; json["wifi_ssid"] = _wifi_ssid; json["wifi_password"] = _wifi_password; json["mqtt_host"] = _mqtt_host; @@ -1029,7 +1043,10 @@ bool MyESP::fs_saveConfig() { return false; } - json.printTo(configFile); + // Serialize JSON to file + if (serializeJson(json, configFile) == 0) { + Serial.println(F("[FS] Failed to write to file")); + } configFile.close(); @@ -1042,16 +1059,17 @@ bool MyESP::fs_saveConfig() { void MyESP::_fs_setup() { if (!SPIFFS.begin()) { Serial.println("[FS] Failed to mount the file system"); + _fs_eraseConfig(); // fix for ESP32 return; } - // load the config file. if it doesn't exist create it + // load the config file. if it doesn't exist (function returns false) create it if (!_fs_loadConfig()) { - Serial.println("[FS] Re-creating config file"); + // Serial.println("[FS] Re-creating config file"); fs_saveConfig(); } - // _fs_printConfig(); // for debugging + // _fs_printConfig(); // TODO: for debugging } uint16_t MyESP::getSystemLoadAverage() { @@ -1078,7 +1096,8 @@ void MyESP::_calculateLoad() { } } -// return true if wifi is connected: +// return true if wifi is connected +// WL_NO_SHIELD = 255, // for compatibility with WiFi Shield library // WL_IDLE_STATUS = 0, // WL_NO_SSID_AVAIL = 1, // WL_SCAN_COMPLETED = 2, @@ -1091,13 +1110,16 @@ bool MyESP::isWifiConnected() { } /* - * Return the quality (Received Signal Strength Indicator) of the WiFi network. - * Returns -1 if WiFi is disconnected. - * High quality: 90% ~= -55dBm - * Medium quality: 50% ~= -75dBm - * Low quality: 30% ~= -85dBm - * Unusable quality: 8% ~= -96dBm - */ + Return the quality (Received Signal Strength Indicator) + of the WiFi network. + Returns a number between 0 and 100 if WiFi is connected. + Returns -1 if WiFi is disconnected. + + High quality: 90% ~= -55dBm + Medium quality: 50% ~= -75dBm + Low quality: 30% ~= -85dBm + Unusable quality: 8% ~= -96dBm +*/ int MyESP::getWifiQuality() { if (WiFi.status() != WL_CONNECTED) return -1; diff --git a/lib/myESP/MyESP.h b/lib/myESP/MyESP.h index 2753add6..773d3014 100644 --- a/lib/myESP/MyESP.h +++ b/lib/myESP/MyESP.h @@ -1,5 +1,5 @@ /* - * MyEsp.h + * MyESP.h * * Paul Derbyshire - December 2018 */ @@ -9,6 +9,8 @@ #ifndef MyEMS_h #define MyEMS_h +#define MYESP_VERSION "1.1.4" + #include #include #include // https://github.com/marvinroger/async-mqtt-client and for ESP32 see https://github.com/marvinroger/async-mqtt-client/issues/127 @@ -38,8 +40,8 @@ // MQTT #define MQTT_PORT 1883 // MQTT port -#define MQTT_RECONNECT_DELAY_MIN 5000 // Try to reconnect in 5 seconds upon disconnection -#define MQTT_RECONNECT_DELAY_STEP 5000 // Increase the reconnect delay in 5 seconds after each failed attempt +#define MQTT_RECONNECT_DELAY_MIN 2000 // Try to reconnect in 3 seconds upon disconnection +#define MQTT_RECONNECT_DELAY_STEP 3000 // Increase the reconnect delay in 3 seconds after each failed attempt #define MQTT_RECONNECT_DELAY_MAX 120000 // Set reconnect time to 2 minutes at most #define MQTT_MAX_SIZE 600 // max length of MQTT message #define MQTT_MAX_TOPIC_SIZE 50 // max length of MQTT message @@ -68,7 +70,6 @@ #define COLOR_BOLD_ON "\x1B[1m" #define COLOR_BOLD_OFF "\x1B[21m" - // SPIFFS #define SPIFFS_MAXSIZE 500 // https://arduinojson.org/v5/assistant/ @@ -84,7 +85,7 @@ typedef std::function typedef std::function ota_callback_f; typedef std::function telnetcommand_callback_f; typedef std::function telnet_callback_f; -typedef std::function fs_callback_f; +typedef std::function fs_callback_f; typedef std::function fs_settings_callback_f; // calculates size of an 2d array at compile time @@ -165,6 +166,8 @@ class MyESP { char * _mqtt_will_online_payload; char * _mqtt_will_offline_payload; char * _mqtt_topic; + unsigned long _mqtt_last_connection; + bool _mqtt_connecting; // wifi DNSServer dnsServer; // For Access Point (AP) support diff --git a/platformio.ini-example b/platformio.ini-example index dc3b6195..fdbbeb25 100644 --- a/platformio.ini-example +++ b/platformio.ini-example @@ -16,8 +16,8 @@ lib_deps = CircularBuffer JustWifi AsyncMqttClient -; ArduinoJson - https://github.com/bblanchon/ArduinoJson#v5.13.5 + ArduinoJson +; https://github.com/bblanchon/ArduinoJson#v5.13.5 OneWire [env:d1_mini] diff --git a/src/ems-esp.ino b/src/ems-esp.ino index d6c51965..396e7280 100644 --- a/src/ems-esp.ino +++ b/src/ems-esp.ino @@ -79,24 +79,24 @@ command_t PROGMEM project_cmds[] = { {"set led ", "toggle status LED on/off"}, {"set led_gpio ", "set the LED pin. Default is the onboard LED (D1=5)"}, - {"set dallas_gpio ", "set the pin for the external Dallas temperature sensor (D5=14)"}, - {"set thermostat_type ", "set the thermostat type id (e.g. 10 for 0x10)"}, - {"set boiler_type ", "set the boiler type id (e.g. 8 for 0x08)"}, - {"info", "show the values"}, + {"set dallas_gpio ", "set the pin for external Dallas temperature sensors (D5=14)"}, + {"set thermostat_type ", "set the thermostat type id (e.g. 10 for 0x10)"}, + {"set boiler_type ", "set the boiler type id (e.g. 8 for 0x08)"}, + {"info", "show data captured on the EMS bus"}, {"log ", "set logging mode to none, basic, thermostat only, raw or verbose"}, - {"publish", "publish values to MQTT"}, + {"publish", "forice a publish of all values to MQTT"}, {"types", "list supported EMS telegram type IDs"}, - {"queue", "list Tx queue"}, - {"autodetect", "discover EMS devices and set boiler and thermostat automatically"}, + {"queue", "show current Tx queue"}, + {"autodetect", "discover EMS devices and attempt to automatically set boiler and thermostat"}, {"shower ", "toggle either timer or alert on/off"}, - {"send XX...", "send raw telegram data in hex to EMS bus"}, - {"thermostat read ", "send read request to thermostat"}, + {"send XX ...", "send raw telegram data as hex to EMS bus"}, + {"thermostat read ", "send read request to the thermostat"}, {"thermostat temp ", "set current thermostat temperature"}, {"thermostat mode ", "set mode (0=low/night, 1=manual/day, 2=auto)"}, - {"thermostat scan ", "do a force read on all type IDs starting at n"}, - {"boiler read ", "send read request to boiler"}, - {"boiler wwtemp ", "set warm water temperature"}, - {"boiler tapwater ", "set warm tap water on or off"} + {"thermostat scan ", "do a read on all type IDs"}, + {"boiler read ", "send read request to boiler"}, + {"boiler wwtemp ", "set boiler warm water temperature"}, + {"boiler tapwater ", "set boiler warm tap water on/off"} }; @@ -400,7 +400,7 @@ void showInfo() { // show the Shower Info if (EMSESP_Status.shower_timer) { myDebug("%sShower stats:%s", COLOR_BOLD_ON, COLOR_BOLD_OFF); - myDebug(" Shower Timer is %s", (EMSESP_Shower.showerOn ? "active" : "off")); + myDebug(" Shower is %s", (EMSESP_Shower.showerOn ? "running" : "off")); } } @@ -408,18 +408,18 @@ void showInfo() { // a json object is created for the boiler and one for the thermostat // CRC check is done to see if there are changes in the values since the last send to avoid too much wifi traffic void publishValues(bool force) { - char s[20] = {0}; // for formatting strings - StaticJsonBuffer jsonBuffer; - char data[MQTT_MAX_SIZE] = {0}; - JsonObject & rootBoiler = jsonBuffer.createObject(); - size_t rlen; - CRC32 crc; - uint32_t fchecksum; + char s[20] = {0}; // for formatting strings + StaticJsonDocument doc; + char data[MQTT_MAX_SIZE] = {0}; + CRC32 crc; + uint32_t fchecksum; static uint8_t last_boilerActive = 0xFF; // for remembering last setting of the tap water or heating on/off static uint32_t previousBoilerPublishCRC = 0; // CRC check static uint32_t previousThermostatPublishCRC = 0; // CRC check + JsonObject rootBoiler = doc.to(); + rootBoiler["wWSelTemp"] = _int_to_char(s, EMS_Boiler.wWSelTemp); rootBoiler["selFlowTemp"] = _float_to_char(s, EMS_Boiler.selFlowTemp); rootBoiler["outdoorTemp"] = _float_to_char(s, EMS_Boiler.extTemp); @@ -443,11 +443,10 @@ void publishValues(bool force) { rootBoiler["pumpMod"] = _int_to_char(s, EMS_Boiler.pumpMod); rootBoiler["ServiceCode"] = EMS_Boiler.serviceCodeChar; - rlen = rootBoiler.measureLength(); - rootBoiler.printTo(data, rlen + 1); // form the json string + serializeJson(doc, data, sizeof(data)); // calculate hash and send values if something has changed, to save unnecessary wifi traffic - for (size_t i = 0; i < rlen - 1; i++) { + for (size_t i = 0; i < measureJson(doc) - 1; i++) { crc.update(data[i]); } fchecksum = crc.finalize(); @@ -470,13 +469,16 @@ void publishValues(bool force) { } // handle the thermostat values separately - if (ems_getThermostatEnabled()) { + //if (ems_getThermostatEnabled()) { + if (true) { // only send thermostat values if we actually have them if (((int)EMS_Thermostat.curr_roomTemp == (int)0) || ((int)EMS_Thermostat.setpoint_roomTemp == (int)0)) return; - // build json object - JsonObject & rootThermostat = jsonBuffer.createObject(); + // build new json object + doc.clear(); + JsonObject rootThermostat = doc.to(); + rootThermostat[THERMOSTAT_CURRTEMP] = _float_to_char(s, EMS_Thermostat.curr_roomTemp); rootThermostat[THERMOSTAT_SELTEMP] = _float_to_char(s, EMS_Thermostat.setpoint_roomTemp); @@ -500,12 +502,11 @@ void publishValues(bool force) { } data[0] = '\0'; // reset data for next package - rlen = rootThermostat.measureLength(); - rootThermostat.printTo(data, rlen + 1); // form the json string + serializeJson(doc, data, sizeof(data)); // calculate new CRC crc.reset(); - for (size_t i = 0; i < rlen - 1; i++) { + for (size_t i = 0; i < measureJson(doc) - 1; i++) { crc.update(data[i]); } uint32_t checksum = crc.finalize(); @@ -579,48 +580,34 @@ void startThermostatScan(uint8_t start) { } // callback for loading/saving settings to the file system (SPIFFS) -bool FSCallback(MYESP_FSACTION action, JsonObject & json) { - bool ok = true; +bool FSCallback(MYESP_FSACTION action, const JsonObject json) { if (action == MYESP_FSACTION_LOAD) { // led - if (json.containsKey("led")) { - EMSESP_Status.led_enabled = (bool)json["led"]; - } else { + if (!(EMSESP_Status.led_enabled = json["led"])) { EMSESP_Status.led_enabled = LED_BUILTIN; // default value - ok = false; } // led_gpio - if (json.containsKey("led_gpio")) { - EMSESP_Status.led_gpio = json["led_gpio"]; - } else { + if (!(EMSESP_Status.led_gpio = json["led_gpio"])) { EMSESP_Status.led_gpio = EMSESP_LED_GPIO; // default value - ok = false; } // dallas_gpio - if (json.containsKey("dallas_gpio")) { - EMSESP_Status.dallas_gpio = json["dallas_gpio"]; - } else { + if (!(EMSESP_Status.dallas_gpio = json["dallas_gpio"])) { EMSESP_Status.dallas_gpio = EMSESP_DALLAS_GPIO; // default value - ok = false; } // thermostat_type - if (json.containsKey("thermostat_type")) { - EMS_Thermostat.type_id = json["thermostat_type"]; - } else { + if (!(EMS_Thermostat.type_id = json["thermostat_type"])) { EMS_Thermostat.type_id = EMSESP_THERMOSTAT_TYPE; // set default - ok = false; } // boiler_type - if (json.containsKey("boiler_type")) { - EMS_Boiler.type_id = json["boiler_type"]; - } else { + if (!(EMS_Boiler.type_id = json["boiler_type"])) { EMS_Boiler.type_id = EMSESP_BOILER_TYPE; // set default - ok = false; } + + return false; // always save the settings } if (action == MYESP_FSACTION_SAVE) { @@ -629,9 +616,9 @@ bool FSCallback(MYESP_FSACTION action, JsonObject & json) { json["dallas_gpio"] = EMSESP_Status.dallas_gpio; json["thermostat_type"] = EMS_Thermostat.type_id; json["boiler_type"] = EMS_Boiler.type_id; - } - return ok; // all ok + return true; + } } // callback for custom settings when showing Stored Settings @@ -949,7 +936,7 @@ void WIFICallback() { // This is done after we have a WiFi signal to avoid any resource conflicts if (myESP.getUseSerial()) { - myDebug("EMS UART disabled when in Serial mode. Use 'set serial off' to change."); + myDebug("Warning! EMS bus disabled when in Serial mode. Use 'set serial off' to enable."); } else { emsuart_init(); myDebug("[UART] Opened Rx/Tx connection"); diff --git a/src/ems.cpp b/src/ems.cpp index 8f144e1d..3b06f81a 100644 --- a/src/ems.cpp +++ b/src/ems.cpp @@ -1447,7 +1447,7 @@ char * ems_getBoilerDescription(char * buffer) { * Find the versions of our connected devices */ void ems_scanDevices() { - myDebug("Scanning EMS bus for devices."); + myDebug("Started scan of EMS bus for known devices"); std::list Device_Ids; // new list diff --git a/src/ems_devices.h b/src/ems_devices.h index 8f630926..4ac8ab23 100644 --- a/src/ems_devices.h +++ b/src/ems_devices.h @@ -102,7 +102,8 @@ typedef enum { EMS_MODEL_EASY, EMS_MODEL_BOSCHEASY, EMS_MODEL_RC310, - EMS_MODEL_CW100 + EMS_MODEL_CW100, + EMS_MODEL_OT } _EMS_MODEL_ID; @@ -139,6 +140,7 @@ const _Thermostat_Type Thermostat_Types[] = { {EMS_MODEL_EASY, 202, 0x18, "TC100/Nefit Easy", EMS_THERMOSTAT_READ_YES, EMS_THERMOSTAT_WRITE_NO}, {EMS_MODEL_BOSCHEASY, 206, 0x02, "Bosch Easy", EMS_THERMOSTAT_READ_YES, EMS_THERMOSTAT_WRITE_NO}, {EMS_MODEL_RC310, 158, 0x10, "RC310", EMS_THERMOSTAT_READ_NO, EMS_THERMOSTAT_WRITE_NO}, - {EMS_MODEL_CW100, 255, 0x18, "Bosch CW100", EMS_THERMOSTAT_READ_NO, EMS_THERMOSTAT_WRITE_NO} + {EMS_MODEL_CW100, 255, 0x18, "Bosch CW100", EMS_THERMOSTAT_READ_NO, EMS_THERMOSTAT_WRITE_NO}, + {EMS_MODEL_OT, 171, 0x02, "EMS-OT OpenTherm converter", EMS_THERMOSTAT_READ_YES, EMS_THERMOSTAT_WRITE_YES} }; diff --git a/src/my_config.h b/src/my_config.h index e6cf8f4b..2c23d611 100644 --- a/src/my_config.h +++ b/src/my_config.h @@ -20,7 +20,7 @@ #define MQTT_WILL_ONLINE_PAYLOAD "online" // for last will & testament payload #define MQTT_WILL_OFFLINE_PAYLOAD "offline" // for last will & testament payload #define MQTT_RETAIN false -#define MQTT_KEEPALIVE 60 // 1 minute +#define MQTT_KEEPALIVE 120 // 2 minutes #define MQTT_QOS 1 // MQTT for thermostat diff --git a/src/version.h b/src/version.h index 77cc3d6c..f76abbf7 100644 --- a/src/version.h +++ b/src/version.h @@ -6,5 +6,5 @@ #pragma once #define APP_NAME "EMS-ESP" -#define APP_VERSION "1.5.4" +#define APP_VERSION "1.5.5" #define APP_HOSTNAME "ems-esp"