From 049af36bc87ec45519acb7702be75286fb742582 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 29 Oct 2020 09:18:30 +0100 Subject: [PATCH 01/27] handle incomming ems+ read requests, ignore F7 telegrams with 3byte-id --- src/telegram.cpp | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/telegram.cpp b/src/telegram.cpp index e41d5cf3d..6af4842e7 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -176,12 +176,36 @@ void RxService::add(uint8_t * data, uint8_t length) { type_id = data[2]; message_data = data + 4; message_length = length - 5; + } else if (data[1] & 0x80) { + // EMS 2.0 read request + uint8_t shift = 0; // default when data[2] is 0xFF + if (data[2] != 0xFF) { + // its F9 or F7, re-calculate shift. If the 6th byte is 0xFF then telegram is 1 byte longer + // if not, we dont know how to handle it + // maybe a 24 bit type-id? Example: 90 B0 F7 00 02 02 00 00 96 + if (data[5] == 0xFF) { + shift = 1; + } else { + LOG_DEBUG(F("unhandled rx: %s"), Helpers::data_to_hex(data, length).c_str()); + return; + } + } + type_id = (data[5 + shift] << 8) + data[6 + shift] + 256; + message_data = data + 4; // only data is the requested length + message_length = 1; } else { // EMS 2.0 / EMS+ uint8_t shift = 0; // default when data[2] is 0xFF if (data[2] != 0xFF) { - // its F9 or F7, re-calculate shift. If the 5th byte is not 0xFF then telegram is 1 byte longer - shift = (data[4] != 0xFF) ? 2 : 1; + // its F9 or F7, re-calculate shift. If the 5th byte is 0xFF then telegram is 1 byte longer + // if not, we dont know how to handle it + // maybe a 24 bit type-id? Example: B0 10 F7 00 02 00 00 1F 00 8F + if (data[4] == 0xFF) { + shift = 1; + } else { + LOG_DEBUG(F("unhandled rx: %s"), Helpers::data_to_hex(data, length).c_str()); + return; + } } type_id = (data[4 + shift] << 8) + data[5 + shift] + 256; message_data = data + 6 + shift; From ec19692df28465ab1b302e2fb8d388c1e1ffa842 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 29 Oct 2020 17:40:07 +0100 Subject: [PATCH 02/27] add cursor up for last command #587 --- lib/uuid-console/src/shell.cpp | 24 +++++++++++++++++++++++- lib/uuid-console/src/uuid/console.h | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/uuid-console/src/shell.cpp b/lib/uuid-console/src/shell.cpp index 3090aaf8c..598d2d171 100644 --- a/lib/uuid-console/src/shell.cpp +++ b/lib/uuid-console/src/shell.cpp @@ -61,10 +61,12 @@ void Shell::start() { uuid::log::Logger::register_handler(this, uuid::log::Level::DEBUG); // added by proddy //uuid::log::Logger::register_handler(this, uuid::log::Level::INFO); // added by proddy #else - uuid::log::Logger::register_handler(this, uuid::log::Level::NOTICE); + uuid::log::Logger::register_handler(this, uuid::log::Level::INFO); #endif line_buffer_.reserve(maximum_command_line_length_); + oldline_.reserve(maximum_command_line_length_); + oldline_.clear(); display_banner(); display_prompt(); shells_.insert(shared_from_this()); @@ -175,6 +177,9 @@ void Shell::loop_normal() { case '\x0A': // Line feed (^J) if (previous_ != '\x0D') { + if (!line_buffer_.empty()) { + oldline_ = line_buffer_; + } process_command(); } break; @@ -187,6 +192,9 @@ void Shell::loop_normal() { break; case '\x0D': + if (!line_buffer_.empty()) { + oldline_ = line_buffer_; + } // Carriage return (^M) process_command(); break; @@ -211,6 +219,20 @@ void Shell::loop_normal() { line_buffer_.push_back(c); write((uint8_t)c); } + // cursor up, get last command + if ((c == 'A') && (previous_ == '[')) { + erase_current_line(); + prompt_displayed_ = false; + line_buffer_ = oldline_; + display_prompt(); + } + // cursor back, forw or down: Delete line + if (((c == 'B') || (c == 'C') || (c == 'D')) && (previous_ == '[')) { + erase_current_line(); + prompt_displayed_ = false; + line_buffer_.clear(); + display_prompt(); + } } break; } diff --git a/lib/uuid-console/src/uuid/console.h b/lib/uuid-console/src/uuid/console.h index 423e85ae8..9062dc09b 100644 --- a/lib/uuid-console/src/uuid/console.h +++ b/lib/uuid-console/src/uuid/console.h @@ -905,6 +905,7 @@ class Shell : public std::enable_shared_from_this, public uuid::log::Hand std::string line_buffer_; /*!< Command line buffer. Limited to maximum_command_line_length() bytes. @since 0.1.0 */ size_t maximum_command_line_length_ = MAX_COMMAND_LINE_LENGTH; /*!< Maximum command line length in bytes. @since 0.6.0 */ unsigned char previous_ = 0; /*!< Previous character that was entered on the command line. Used to detect CRLF line endings. @since 0.1.0 */ + std::string oldline_; /*!< old Command line buffer.*/ Mode mode_ = Mode::NORMAL; /*!< Current execution mode. @since 0.1.0 */ std::unique_ptr mode_data_ = nullptr; /*!< Data associated with the current execution mode. @since 0.1.0 */ bool stopped_ = false; /*!< Indicates that the shell has been stopped. @since 0.1.0 */ From 32a645c74fd1ecdac570ff605df5ed5556fd30dd Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 29 Oct 2020 17:42:11 +0100 Subject: [PATCH 03/27] Handle F7, F9 telegrams as EMS 1.0 --- src/emsdevice.cpp | 2 +- src/telegram.cpp | 52 +++++++++++++---------------------------------- 2 files changed, 15 insertions(+), 39 deletions(-) diff --git a/src/emsdevice.cpp b/src/emsdevice.cpp index 26c7a75cd..8c5db0653 100644 --- a/src/emsdevice.cpp +++ b/src/emsdevice.cpp @@ -311,7 +311,7 @@ std::string EMSdevice::telegram_type_name(std::shared_ptr telegr } for (const auto & tf : telegram_functions_) { - if ((tf.telegram_type_id_ == telegram->type_id) && ((telegram->type_id & 0xFFF0) != 0xF0)) { + if ((tf.telegram_type_id_ == telegram->type_id) && (telegram->type_id != 0xFF)) { return uuid::read_flash_string(tf.telegram_type_name_); } } diff --git a/src/telegram.cpp b/src/telegram.cpp index 6af4842e7..27de14f8f 100644 --- a/src/telegram.cpp +++ b/src/telegram.cpp @@ -171,45 +171,22 @@ void RxService::add(uint8_t * data, uint8_t length) { // EMS 1 has type_id always in data[2], if it gets a ems+ inquiry it will reply with FF but short length // i.e. sending 0B A1 FF 00 01 D8 20 CRC to a MM10 Mixer (ems1.0), the reply is 21 0B FF 00 CRC // see: https://github.com/proddy/EMS-ESP/issues/380#issuecomment-633663007 - if (data[2] < 0xF0 || length < 6) { + if (data[2] != 0xFF || length < 6) { // EMS 1.0 + // also handle F7, F9 as EMS 1.0, see https://github.com/proddy/EMS-ESP/issues/109#issuecomment-492781044 type_id = data[2]; message_data = data + 4; message_length = length - 5; } else if (data[1] & 0x80) { // EMS 2.0 read request - uint8_t shift = 0; // default when data[2] is 0xFF - if (data[2] != 0xFF) { - // its F9 or F7, re-calculate shift. If the 6th byte is 0xFF then telegram is 1 byte longer - // if not, we dont know how to handle it - // maybe a 24 bit type-id? Example: 90 B0 F7 00 02 02 00 00 96 - if (data[5] == 0xFF) { - shift = 1; - } else { - LOG_DEBUG(F("unhandled rx: %s"), Helpers::data_to_hex(data, length).c_str()); - return; - } - } - type_id = (data[5 + shift] << 8) + data[6 + shift] + 256; + type_id = (data[5] << 8) + data[6] + 256; message_data = data + 4; // only data is the requested length message_length = 1; } else { // EMS 2.0 / EMS+ - uint8_t shift = 0; // default when data[2] is 0xFF - if (data[2] != 0xFF) { - // its F9 or F7, re-calculate shift. If the 5th byte is 0xFF then telegram is 1 byte longer - // if not, we dont know how to handle it - // maybe a 24 bit type-id? Example: B0 10 F7 00 02 00 00 1F 00 8F - if (data[4] == 0xFF) { - shift = 1; - } else { - LOG_DEBUG(F("unhandled rx: %s"), Helpers::data_to_hex(data, length).c_str()); - return; - } - } - type_id = (data[4 + shift] << 8) + data[5 + shift] + 256; - message_data = data + 6 + shift; - message_length = length - 7 - shift; + type_id = (data[4] << 8) + data[5] + 256; + message_data = data + 6; + message_length = length - 7; } // if we're watching and "raw" print out actual telegram as bytes to the console @@ -463,21 +440,20 @@ void TxService::add(uint8_t operation, const uint8_t * data, const uint8_t lengt // work out depending on the type, where the data message block starts and the message length // same logic as in RxService::add(), but adjusted for no appended CRC - if (data[2] < 0xF0) { + if (data[2] != 0xFF) { // EMS 1.0 type_id = data[2]; message_data = data + 4; message_length = length - 4; + } else if (data[1] & 0x80) { + type_id = (data[5] << 8) + data[6] + 256; + message_data = data + 4; + message_length = 1; } else { // EMS 2.0 / EMS+ - uint8_t shift = 0; // default when data[2] is 0xFF - if (data[2] != 0xFF) { - // its F9 or F7, re-calculate shift. If the 5th byte is not 0xFF then telegram is 1 byte longer - shift = (data[4] != 0xFF) ? 2 : 1; - } - type_id = (data[4 + shift] << 8) + data[5 + shift] + 256; - message_data = data + 6 + shift; - message_length = length - 6 - shift; + type_id = (data[4] << 8) + data[5] + 256; + message_data = data + 6; + message_length = length - 6; } // if we don't have a type_id or empty data block, exit From addc10c680a14c2b1b0a30fb54e5936ee0b4aaab Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 29 Oct 2020 17:47:35 +0100 Subject: [PATCH 04/27] add RC300 floordrying, error, building, damped temperature #583 --- lib/uuid-console/src/shell.cpp | 2 +- src/devices/thermostat.cpp | 80 +++++++++++++++++++++++++++++++--- src/devices/thermostat.h | 15 +++++-- src/locale_EN.h | 3 ++ 4 files changed, 90 insertions(+), 10 deletions(-) diff --git a/lib/uuid-console/src/shell.cpp b/lib/uuid-console/src/shell.cpp index 598d2d171..af90adee7 100644 --- a/lib/uuid-console/src/shell.cpp +++ b/lib/uuid-console/src/shell.cpp @@ -61,7 +61,7 @@ void Shell::start() { uuid::log::Logger::register_handler(this, uuid::log::Level::DEBUG); // added by proddy //uuid::log::Logger::register_handler(this, uuid::log::Level::INFO); // added by proddy #else - uuid::log::Logger::register_handler(this, uuid::log::Level::INFO); + uuid::log::Logger::register_handler(this, uuid::log::Level::NOTICE); #endif line_buffer_.reserve(maximum_command_line_length_); diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 4029576f4..b860cb26f 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -123,6 +123,10 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(0x31B, F("RC300WWtemp"), true, [&](std::shared_ptr t) { process_RC300WWtemp(t); }); register_telegram_type(0x31D, F("RC300WWmode2"), false, [&](std::shared_ptr t) { process_RC300WWmode2(t); }); register_telegram_type(0x31E, F("RC300WWmode2"), false, [&](std::shared_ptr t) { process_RC300WWmode2(t); }); + register_telegram_type(0x23A, F("RC300OutdoorTemp"), true, [&](std::shared_ptr t) { process_RC300OutdoorTemp(t); }); + register_telegram_type(0x267, F("RC300Floordry"), false, [&](std::shared_ptr t) { process_RC300Floordry(t); }); + register_telegram_type(0x240, F("RC300Settings"), true, [&](std::shared_ptr t) { process_RC300Settings(t); }); + register_telegram_type(0xBF, F("RC300Error"), false, [&](std::shared_ptr t) { process_RC300Error(t); }); // JUNKERS/HT3 } else if (model == EMSdevice::EMS_DEVICE_FLAG_JUNKERS) { @@ -186,6 +190,8 @@ void Thermostat::device_info_web(JsonArray & root) { print_value_json(root, F("intoffset"), nullptr, F_(intoffset), nullptr, json_main); print_value_json(root, F("minexttemp"), nullptr, F_(minexttemp), F_(degrees), json_main); print_value_json(root, F("building"), nullptr, F_(building), nullptr, json_main); + print_value_json(root, F("floordry"), nullptr, F_(floordry), nullptr, json_main); + print_value_json(root, F("floordrytemp"), nullptr, F_(floordrytemp), F_(degrees), json_main); print_value_json(root, F("wwmode"), nullptr, F_(wwmode), nullptr, json_main); print_value_json(root, F("wwtemp"), nullptr, F_(wwtemp), nullptr, json_main); print_value_json(root, F("wwtemplow"), nullptr, F_(wwtemplow), nullptr, json_main); @@ -268,6 +274,8 @@ void Thermostat::show_values(uuid::console::Shell & shell) { print_value_json(shell, F("intoffset"), nullptr, F_(intoffset), nullptr, json_main); print_value_json(shell, F("minexttemp"), nullptr, F_(minexttemp), F_(degrees), json_main); print_value_json(shell, F("building"), nullptr, F_(building), nullptr, json_main); + print_value_json(shell, F("floordry"), nullptr, F_(floordry), nullptr, json_main); + print_value_json(shell, F("floordrytemp"), nullptr, F_(floordrytemp), F_(degrees), json_main); print_value_json(shell, F("wwmode"), nullptr, F_(wwmode), nullptr, json_main); print_value_json(shell, F("wwtemp"), nullptr, F_(wwtemp), nullptr, json_main); print_value_json(shell, F("wwtemplow"), nullptr, F_(wwtemplow), nullptr, json_main); @@ -399,11 +407,23 @@ bool Thermostat::export_values_main(JsonObject & rootThermostat) { } } - // Damped outdoor temperature + // Damped outdoor temperature (RC35) if (Helpers::hasValue(dampedoutdoortemp_)) { rootThermostat["dampedtemp"] = dampedoutdoortemp_; } + // Damped outdoor temperature (RC300) + if (Helpers::hasValue(dampedoutdoortemp2_)) { + rootThermostat["dampedtemp"] = (float)dampedoutdoortemp2_ / 10; + } + + // Floordry + if (Helpers::hasValue(floordrystatus_) && Helpers::hasValue(floordrytemp_) && (floordrytemp_ > 0)) { + char s[10]; + rootThermostat["floordry"] = Helpers::render_enum(s, {"off", "start", "heat", "hold", "cool", "end"}, floordrystatus_); + rootThermostat["floordrytemp"] = floordrytemp_; + } + // Temp sensor 1 if (Helpers::hasValue(tempsensor1_)) { rootThermostat["inttemp1"] = (float)tempsensor1_ / 10; @@ -427,7 +447,11 @@ bool Thermostat::export_values_main(JsonObject & rootThermostat) { // Building if (Helpers::hasValue(ibaBuildingType_)) { char s[10]; - rootThermostat["building"] = Helpers::render_enum(s, {"light", "medium", "heavy"}, ibaBuildingType_); + if (model == EMS_DEVICE_FLAG_RC300 || model == EMS_DEVICE_FLAG_RC100) { + rootThermostat["building"] = Helpers::render_enum(s, {"light", "medium", "heavy"}, ibaBuildingType_ - 1); + } else { + rootThermostat["building"] = Helpers::render_enum(s, {"light", "medium", "heavy"}, ibaBuildingType_); + } } // Warm water mode @@ -773,7 +797,7 @@ void Thermostat::register_mqtt_ha_config() { Mqtt::publish_retain(F("homeassistant/sensor/ems-esp/thermostat/config"), doc.as(), true); // publish the config payload with retain flag Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(time), this->device_type(), "time", nullptr, nullptr); - // Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(error), this->device_type(), "errorcode", nullptr, nullptr); + Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(error), this->device_type(), "errorcode", nullptr, nullptr); uint8_t model = this->model(); @@ -782,7 +806,16 @@ void Thermostat::register_mqtt_ha_config() { Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(language), this->device_type(), "language", nullptr, nullptr); } - if (model == EMS_DEVICE_FLAG_RC35 || model == EMS_DEVICE_FLAG_RC35) { + if (model == EMS_DEVICE_FLAG_RC300 || model == EMS_DEVICE_FLAG_RC100) { + Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(dampedtemp), this->device_type(), "dampedtemp", F_(degrees), F_(icontemperature)); + Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(building), this->device_type(), "building", nullptr, nullptr); + Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(floordry), this->device_type(), "floordry", nullptr, nullptr); + Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(floordrytemp), this->device_type(), "floordrytemp", F_(degrees), F_(icontemperature)); + Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(wwmode), this->device_type(), "wwmode", nullptr, nullptr); + Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(wwtemp), this->device_type(), "wwtemp", F_(degrees), F_(icontemperature)); + } + + if (model == EMS_DEVICE_FLAG_RC35 || model == EMS_DEVICE_FLAG_RC30_1) { // excluding inttemp1, inttemp2, intoffset, minexttemp Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(dampedtemp), this->device_type(), "dampedtemp", F_(degrees), F_(icontemperature)); Mqtt::register_mqtt_ha_sensor(nullptr, nullptr, F_(building), this->device_type(), "building", nullptr, nullptr); @@ -1266,6 +1299,37 @@ void Thermostat::process_RC300WWmode2(std::shared_ptr telegram) // pos 3 = current status of DHW circulation pump } +// 0x23A damped outdoor temp +void Thermostat::process_RC300OutdoorTemp(std::shared_ptr telegram) { + changed_ |= telegram->read_value(dampedoutdoortemp2_, 0); // is *10 +} + +// 0x240 RC300 parameter +void Thermostat::process_RC300Settings(std::shared_ptr telegram) { + changed_ |= telegram->read_value(ibaBuildingType_ , 9); // 1=light, 2=medium, 3=heavy +} + +// 0x267 RC300 floordrying +void Thermostat::process_RC300Floordry(std::shared_ptr telegram) { + changed_ |= telegram->read_value(floordrystatus_ , 0); + changed_ |= telegram->read_value(floordrytemp_ , 1); +} + +// 0xBF RC300 Errormessage +void Thermostat::process_RC300Error(std::shared_ptr telegram) { + if (errorCode_.empty()) { + errorCode_.resize(10, '\0'); + } + char buf[4]; + buf[0] = telegram->message_data[5]; + buf[1] = telegram->message_data[6]; + buf[2] = telegram->message_data[7]; + buf[3] = 0; + changed_ |= telegram->read_value(errorNumber_, 8); + + snprintf_P(&errorCode_[0], errorCode_.capacity() + 1, PSTR("%s(%d)"), buf, errorNumber_); + +} // type 0x41 - data from the RC30 thermostat(0x10) - 14 bytes long void Thermostat::process_RC30Monitor(std::shared_ptr telegram) { std::shared_ptr hc = heating_circuit(telegram); @@ -1472,7 +1536,12 @@ bool Thermostat::set_building(const char * value, const int8_t id) { } LOG_INFO(F("Setting building to %s"), value); - write_command(EMS_TYPE_IBASettings, 6, bd, EMS_TYPE_IBASettings); + + if ((this->model() == EMS_DEVICE_FLAG_RC300) || (this->model() == EMS_DEVICE_FLAG_RC100)) { + write_command(0x240, 9, bd + 1, 0x240); + } else { + write_command(EMS_TYPE_IBASettings, 6, bd, EMS_TYPE_IBASettings); + } return true; } @@ -2197,6 +2266,7 @@ void Thermostat::add_commands() { register_mqtt_cmd(F("wwmode"), [&](const char * value, const int8_t id) { return set_wwmode(value, id); }); register_mqtt_cmd(F("wwtemp"), [&](const char * value, const int8_t id) { return set_wwtemp(value, id); }); register_mqtt_cmd(F("wwtemplow"), [&](const char * value, const int8_t id) { return set_wwtemplow(value, id); }); + register_mqtt_cmd(F("building"), [&](const char * value, const int8_t id) { return set_building(value, id); }); break; case EMS_DEVICE_FLAG_RC20_2: register_mqtt_cmd(F("nighttemp"), [&](const char * value, const int8_t id) { return set_nighttemp(value, id); }); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index ff3d7b311..6fc4cd497 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -147,10 +147,13 @@ class Thermostat : public EMSdevice { uint8_t ibaBuildingType_ = EMS_VALUE_UINT_NOTSET; // building type: 0 = light, 1 = medium, 2 = heavy uint8_t ibaClockOffset_ = EMS_VALUE_UINT_NOTSET; // offset (in sec) to clock, 0xff = -1 s, 0x02 = 2 s - uint16_t errorNumber_ = EMS_VALUE_USHORT_NOTSET; - int8_t dampedoutdoortemp_ = EMS_VALUE_INT_NOTSET; - uint16_t tempsensor1_ = EMS_VALUE_USHORT_NOTSET; - uint16_t tempsensor2_ = EMS_VALUE_USHORT_NOTSET; + uint16_t errorNumber_ = EMS_VALUE_USHORT_NOTSET; + int8_t dampedoutdoortemp_ = EMS_VALUE_INT_NOTSET; + uint16_t tempsensor1_ = EMS_VALUE_USHORT_NOTSET; + uint16_t tempsensor2_ = EMS_VALUE_USHORT_NOTSET; + int16_t dampedoutdoortemp2_ = EMS_VALUE_SHORT_NOTSET; + uint8_t floordrystatus_ = EMS_VALUE_UINT_NOTSET; + uint8_t floordrytemp_ = EMS_VALUE_UINT_NOTSET; uint8_t wwExtra1_ = EMS_VALUE_UINT_NOTSET; // wwExtra active for wwSystem 1 uint8_t wwExtra2_ = EMS_VALUE_UINT_NOTSET; @@ -267,6 +270,10 @@ class Thermostat : public EMSdevice { void process_RC300WWmode(std::shared_ptr telegram); void process_RC300WWmode2(std::shared_ptr telegram); void process_RC300WWtemp(std::shared_ptr telegram); + void process_RC300OutdoorTemp(std::shared_ptr telegram); + void process_RC300Settings(std::shared_ptr telegram); + void process_RC300Error(std::shared_ptr telegram); + void process_RC300Floordry(std::shared_ptr telegram); void process_JunkersMonitor(std::shared_ptr telegram); void process_JunkersSet(std::shared_ptr telegram); void process_JunkersSet2(std::shared_ptr telegram); diff --git a/src/locale_EN.h b/src/locale_EN.h index 9d59997d0..61eafe6e7 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -239,6 +239,9 @@ MAKE_PSTR(inttemp2, "Temperature sensor 2") MAKE_PSTR(intoffset, "Offset int. temperature") MAKE_PSTR(minexttemp, "Min ext. temperature") MAKE_PSTR(building, "Building") +MAKE_PSTR(floordry, "Floordrying") +MAKE_PSTR(floordrytemp, "Floordrying temperature") + MAKE_PSTR(wwmode, "Warm water mode") MAKE_PSTR(wwtemp, "Warm water high temperature") MAKE_PSTR(wwtemplow, "Warm water low temperature") From 9888ee715eebc2c60b9377ef8d401196f0e0e71e Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 29 Oct 2020 20:35:25 +0100 Subject: [PATCH 05/27] Delete FIRMWARE.md --- FIRMWARE.md | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 FIRMWARE.md diff --git a/FIRMWARE.md b/FIRMWARE.md deleted file mode 100644 index 328acee4e..000000000 --- a/FIRMWARE.md +++ /dev/null @@ -1,27 +0,0 @@ -# ![logo](https://github.com/proddy/EMS-ESP/blob/main/media/EMS-ESP_logo_dark.png) - -**EMS-ESP** is an open-source firmware for the Espressif ESP8266 and ESP32 microcontroller that communicates with **EMS** (Energy Management System) based equipment from manufacturers like Bosch, Buderus, Nefit, Junkers, Worcester and Sieger. - -[![version](https://img.shields.io/github/release/proddy/EMS-ESP.svg?label=Latest%20Release)](https://github.com/proddy/EMS-ESP/blob/main/CHANGELOG.md) -[![release-date](https://img.shields.io/github/release-date/proddy/EMS-ESP.svg?label=Released)](https://github.com/proddy/EMS-ESP/commits/master) -[![license](https://img.shields.io/github/license/proddy/EMS-ESP.svg)](LICENSE) -[![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) -[![Build Firmware](https://github.com/proddy/EMS-ESP/workflows/Build_firmware/badge.svg)](https://github.com/proddy/EMS-ESP/actions?query=workflow%3ABuild_firmware) -[![downloads](https://img.shields.io/github/downloads/proddy/EMS-ESP/total.svg)](https://github.com/proddy/EMS-ESP/releases) -[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/proddy/EMS-ESP.svg)](http://isitmaintained.com/project/proddy/EMS-ESP "Average time to resolve an issue") -[![Percentage of issues still open](http://isitmaintained.com/badge/open/proddy/EMS-ESP.svg)](http://isitmaintained.com/project/proddy/EMS-ESP "Percentage of issues still open") -
-[![gitter](https://img.shields.io/gitter/room/EMS-ESP/EMS-ESP.svg)](https://gitter.im/EMS-ESP/community) - -If you like **EMS-ESP**, please give it a star, or fork it and contribute! - -[![GitHub stars](https://img.shields.io/github/stars/proddy/EMS-ESP.svg?style=social&label=Star)](https://github.com/proddy/EMS-ESP/stargazers) -[![GitHub forks](https://img.shields.io/github/forks/proddy/EMS-ESP.svg?style=social&label=Fork)](https://github.com/proddy/EMS-ESP/network) -[![donate](https://img.shields.io/badge/donate-PayPal-blue.svg)](https://www.paypal.com/paypalme/prderbyshire/2) - -# Firmware Installation - -Here you will find the latest development builds, under the [firmware](https://github.com/proddy/EMS-ESP/tree/firmware/firmware) folder. Follow the instructions in the [documentation](https://emsesp.github.io/docs) on how to install these binaries. - -See also the [CHANGELOG](https://github.com/proddy/EMS-ESP/blob/dev/CHANGELOG.md) for any breaking changes between releases. - From 76b8621b82254a623170c1e80931b1304b0615f1 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 29 Oct 2020 20:35:46 +0100 Subject: [PATCH 06/27] Delete EMS-ESP_cpp_make.yml --- .github/workflows/EMS-ESP_cpp_make.yml | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 .github/workflows/EMS-ESP_cpp_make.yml diff --git a/.github/workflows/EMS-ESP_cpp_make.yml b/.github/workflows/EMS-ESP_cpp_make.yml deleted file mode 100644 index 25a9194df..000000000 --- a/.github/workflows/EMS-ESP_cpp_make.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: EMS-ESP C++ make - -on: - push: - # branches: [ dev ] - pull_request: - # branches: [ dev ] - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - name: make clean - run: make clean - - name: make - run: make - \ No newline at end of file From a91ba301c2577d43f5eb7d4a3f2219ae2f4ecba0 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 29 Oct 2020 20:36:14 +0100 Subject: [PATCH 07/27] Delete EMS-ESP_build.yml --- .github/workflows/EMS-ESP_build.yml | 88 ----------------------------- 1 file changed, 88 deletions(-) delete mode 100644 .github/workflows/EMS-ESP_build.yml diff --git a/.github/workflows/EMS-ESP_build.yml b/.github/workflows/EMS-ESP_build.yml deleted file mode 100644 index 32f37d78d..000000000 --- a/.github/workflows/EMS-ESP_build.yml +++ /dev/null @@ -1,88 +0,0 @@ -name: Build_firmware - -# Controls when the action will run. Triggers the workflow on push or pull request -# events but only for the master branch -#on: -# push: -# branches: [ main ] -# pull_request: -# branches: [ main ] - -on: - push: - branches: [ dev ] - -jobs: - # emsesp_pull: - # runs-on: ubuntu-latest - # continue-on-error: true - # steps: - # - uses: actions/checkout@v1 - # - name: Use latest EMS-ESP development - # run: | - # git config --local user.name "Platformio BUILD" - # git switch -c main - # git remote add -f EMS-ESP "https://github.com/proddy/EMS-ESP.git" - # git merge EMS-ESP/dev --allow-unrelated-histories - # - name: Push EMS-ESP # Push updates of latest EMS-ESP development to repo - # uses: ad-m/github-push-action@master - # with: - # github_token: ${{ secrets.GITHUB_TOKEN }} - # branch: 'dev' - # force: true - - emsesp: - # needs: emsesp_pull - runs-on: ubuntu-latest - # continue-on-error: true - steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -U platformio - # platformio upgrade --dev - platformio upgrade - platformio update - - name: Run PlatformIO - run: | - platformio run - - uses: actions/upload-artifact@v2 - with: - name: firmware - path: ./build/firmware - - Upload: - needs: [emsesp] - runs-on: ubuntu-latest - continue-on-error: true - steps: - - uses: actions/checkout@v1 - - uses: actions/download-artifact@v2 - with: - name: firmware - path: ./mv_firmware - - name: Display structure of downloaded files - run: ls -R - working-directory: ./mv_firmware - - name: Move firmware files in sub-folders - run: | - mkdir -p ./firmware - [ ! -f ./mv_firmware/*.bin ] || mv ./mv_firmware/EMS-ESP*.* ./firmware/ - [ ! -f ./FIRMWARE.md ] || mv -f ./FIRMWARE.md ./README.md - - name: Commit files # transfer the new binaries back into the repository - run: | - git config --local user.name "Platformio BUILD" - git rm -r --cached . - git add ./README.md - git add -f ./firmware/*.* - git commit -m "EMS-ESP binaries" - - name: Push changes # push the firmware files to branch firmware - uses: ad-m/github-push-action@master - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - branch: 'firmware' - force: true - From 13f8d33e7a693c6b67564870ec12a61828b107d1 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 29 Oct 2020 20:36:21 +0100 Subject: [PATCH 08/27] Delete EMS-ESP_CI.yml --- .github/workflows/EMS-ESP_CI.yml | 33 -------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 .github/workflows/EMS-ESP_CI.yml diff --git a/.github/workflows/EMS-ESP_CI.yml b/.github/workflows/EMS-ESP_CI.yml deleted file mode 100644 index a163354e2..000000000 --- a/.github/workflows/EMS-ESP_CI.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: EMS-ESP CI - -# Controls when the action will run. Triggers the workflow on push or pull request -# events but only for the master branch -#on: -# push: -# branches: [ main ] -# pull_request: -# branches: [ main ] - -on: - pull_request: - -jobs: - emsesp: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Set up Python - uses: actions/setup-python@v1 - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install -U platformio - # platformio upgrade --dev - platformio upgrade - platformio update - - name: Run PlatformIO - run: | - platformio run - - - From e5f4f1c009a5dce0128e69f8194832adc84b164e Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 29 Oct 2020 20:38:33 +0100 Subject: [PATCH 09/27] Delete EMS-ESP_check.yml --- .github/workflows/EMS-ESP_check.yml | 62 ----------------------------- 1 file changed, 62 deletions(-) delete mode 100644 .github/workflows/EMS-ESP_check.yml diff --git a/.github/workflows/EMS-ESP_check.yml b/.github/workflows/EMS-ESP_check.yml deleted file mode 100644 index b9623497a..000000000 --- a/.github/workflows/EMS-ESP_check.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: "EMS-ESP check code" - -on: - push: - branches: [dev] - pull_request: - # The branches below must be a subset of the branches above - branches: [dev] - schedule: - - cron: '0 11 * * 5' - -jobs: - analyze: - name: Analyze - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - # Override automatic language detection by changing the below list - # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] - language: ['cpp'] - # Learn more... - # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection - - steps: - - name: Checkout repository - uses: actions/checkout@v2 - with: - # We must fetch at least the immediate parents so that if this is - # a pull request then we can checkout the head. - fetch-depth: 2 - - # If this run was triggered by a pull request event, then checkout - # the head of the pull request instead of the merge commit. - - run: git checkout HEAD^2 - if: ${{ github.event_name == 'pull_request' }} - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 - - # â„šī¸ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl - - # âœī¸ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language - - #- run: | - # make bootstrap - # make release - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 From 54b0435153b74d69ad23ef452b12fd61f2ae32cf Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 29 Oct 2020 20:39:03 +0100 Subject: [PATCH 10/27] Delete weekly-digest.yml --- .github/weekly-digest.yml | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 .github/weekly-digest.yml diff --git a/.github/weekly-digest.yml b/.github/weekly-digest.yml deleted file mode 100644 index fe502fbc9..000000000 --- a/.github/weekly-digest.yml +++ /dev/null @@ -1,7 +0,0 @@ -# Configuration for weekly-digest - https://github.com/apps/weekly-digest -publishDay: sun -canPublishIssues: true -canPublishPullRequests: true -canPublishContributors: true -canPublishStargazers: true -canPublishCommits: true From 33a9ccf7a789949242383962d09a0935c4950a2b Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 29 Oct 2020 20:40:59 +0100 Subject: [PATCH 11/27] Update questions---troubleshooting.md --- .github/ISSUE_TEMPLATE/questions---troubleshooting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/questions---troubleshooting.md b/.github/ISSUE_TEMPLATE/questions---troubleshooting.md index 69151112e..2f608d24b 100644 --- a/.github/ISSUE_TEMPLATE/questions---troubleshooting.md +++ b/.github/ISSUE_TEMPLATE/questions---troubleshooting.md @@ -23,7 +23,7 @@ assignees: '' *If applicable, add screenshots to help explain your problem.* **Device information** -*Copy-paste here the information as it is outputted by the device. You can get this information by from the telnet session with the logging set to Verbose mode.* +*Copy-paste here the information as it is outputted by the device. You can get this information from http://ems-esp.local/api?device=system&cmd=report.* **Additional context** *Add any other context about the problem here.* From e68e3a4055a41a9684791b63c4c33a0b58ab1a13 Mon Sep 17 00:00:00 2001 From: Proddy Date: Thu, 29 Oct 2020 20:41:50 +0100 Subject: [PATCH 12/27] Update bug_report.md --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index eccd55057..41f32efa7 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -29,7 +29,7 @@ assignees: '' *If applicable, add screenshots to help explain your problem.* **Device information** -*Copy-paste here the information as it is outputted by the device. You can get this information by from the telnet session using the `system` command and `info`.* +*Copy-paste here the information as it is outputted by the device. You can get this information by from http://ems-esp.local/api?device=system&cmd=report.* **Additional context** *Add any other context about the problem here.* From bb02a1f43861b58179c72c42890f0f652eb4f34b Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 21:02:17 +0100 Subject: [PATCH 13/27] github actions --- .github/workflows/build_firmware.yml | 72 ++++++++++++++++++++++++++ .github/workflows/check_code.yml | 62 ++++++++++++++++++++++ .github/workflows/standalone_build.yml | 20 +++++++ CHANGELOG.md | 47 ----------------- README.md | 4 +- RELEASENOTES_DEV.md | 8 +++ platformio.ini | 51 +++++++++--------- 7 files changed, 191 insertions(+), 73 deletions(-) create mode 100644 .github/workflows/build_firmware.yml create mode 100644 .github/workflows/check_code.yml create mode 100644 .github/workflows/standalone_build.yml create mode 100644 RELEASENOTES_DEV.md diff --git a/.github/workflows/build_firmware.yml b/.github/workflows/build_firmware.yml new file mode 100644 index 000000000..59141d1f0 --- /dev/null +++ b/.github/workflows/build_firmware.yml @@ -0,0 +1,72 @@ +name: Build Firmware + +on: + push: + branches: + - dev + tags: + # - '*.*.*' + paths: + - 'CHANGELOG_DEV.md' + +jobs: + + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Version + id: fetch_version + run: | + version=`grep -E '^#define EMSESP_APP_VERSION' ./src/version.h | awk '{print $3}' | sed 's/"//g'` + echo "::set-output name=s::$version" + + - name: Setup Python + uses: actions/setup-python@v1 + + - name: Install + run: | + python -m pip install --upgrade pip + pip install -U platformio + platformio upgrade + platformio update + + - name: Build web + run: | + cd interface + npm install + npm run build + + - name: Build images + run: | + platformio run -e esp8266 + platformio run -e esp32 + + - name: Delete + uses: dev-drprasad/delete-tag-and-release@v0.1.2 + # if: startsWith(github.ref, 'refs/tags/') + with: + delete_release: true + tag_name: dev + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Changelog + run: cat RELEASENOTES_DEV.md CHANGELOG_DEV.md > BODY.txt + + - name: Release + uses: softprops/action-gh-release@v1 + # if: startsWith(github.ref, 'refs/tags/') + with: + body: Latest beta build + body_path: BODY.txt + name: Development Build version ${{steps.fetch_version.outputs.s}} + tag_name: dev + prerelease: true + files: | + ./build/firmware/*.* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + \ No newline at end of file diff --git a/.github/workflows/check_code.yml b/.github/workflows/check_code.yml new file mode 100644 index 000000000..1f1631a91 --- /dev/null +++ b/.github/workflows/check_code.yml @@ -0,0 +1,62 @@ +name: Code Check + +on: + push: + branches: [dev] + pull_request: + # The branches below must be a subset of the branches above + branches: [dev] + schedule: + - cron: '0 11 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + # Override automatic language detection by changing the below list + # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] + language: ['cpp'] + # Learn more... + # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + with: + # We must fetch at least the immediate parents so that if this is + # a pull request then we can checkout the head. + fetch-depth: 2 + + # If this run was triggered by a pull request event, then checkout + # the head of the pull request instead of the merge commit. + - run: git checkout HEAD^2 + if: ${{ github.event_name == 'pull_request' }} + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # â„šī¸ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # âœī¸ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/standalone_build.yml b/.github/workflows/standalone_build.yml new file mode 100644 index 000000000..624d151ae --- /dev/null +++ b/.github/workflows/standalone_build.yml @@ -0,0 +1,20 @@ +name: Standalone Build + +on: + push: + branches: [ dev ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: make clean + run: make clean + + - name: make + run: make + \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c483df8e..2c1e11da8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,53 +5,6 @@ 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). -## [2.1] - -### Added -- boiler `heatingactivated`, automatic select parameter telegrams for write -- boiler `wWType` parameter, in Console and MQTT -- support for uploading compressed firmware binaries in web UI -- setting to manually override the MQTT retain flag -- New API via HTTP REST API to read and set values. See https://emsesp.github.io/docs/#/API -- `show commands` command -- exporting of system settings using the `system info` command in Web and Console. Added link into the Web's Settings page. -- setting to change how booleans are rendered in MQTT (on/off, true/false, 1/0) -- enable ADC setting, add boiler circulation commands, add thermostat RC300 summermodes -- Added all device info to web UI for Thermostat and Boiler -- Added all device values to Home Assistant MQTT Discovery under separate devices and entities -- Show Rx and Tx quality in Console and Web UI -- Added button and tooltip to EMS Devices in Web -- wwtemp and wwtemplow to MQTT, Console and Web -- summer, winter modes for the CW400 thermostat -- new command under system called `report`. http://ems-esp/api?device=system&cmd=report to generate a report log for troubleshooting -- thermostat error codes -- Console command `publish ha` to also force the creation of the Home Assistant MQTT Discovery topics -- Heat pump values (dew temperature and relative air humidity) - -### Fixed -- fix wwontime readback -- fixed support for RC300 via MQTT commands (#505) -- Some minor optimizations to memory handling in the MQTT service -- Prevent MQTT from publishing empty json payloads -- Accurate detection of warm water and heating (#515) -- Fix writing to the Junkers FR120 thermostat -- support for changing summermode -- added missing `heatingtype` to thermostat data - -### Changed -- renamed wWCircPumpType to wWChargeType -- Installation and Configuration notes moved to the official EMS-ESP documentation site -- `call` commands can be done from the Console root for all devices -- Updated EMS-ESP official documentation (https://emsesp.github.io/docs/#/) -- JWT Secret renamed to Super User Password -- EMS Devices in Web UI shows button and tooltip to remind users they can click on a device -- MQTT topic name changes (see doc) -- Mixing renamed to Mixer - -### Removed -- Console contexts for thermostat and boiler -- Removed option to enable/disable the MQTT Heartbeat. It's always on. - ## [2.0.1] September 13 2020 ### Added diff --git a/README.md b/README.md index 7083fc9f4..164076b15 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![version](https://img.shields.io/github/release/proddy/EMS-ESP.svg?label=Latest%20Release)](https://github.com/proddy/EMS-ESP/blob/main/CHANGELOG.md) [![release-date](https://img.shields.io/github/release-date/proddy/EMS-ESP.svg?label=Released)](https://github.com/proddy/EMS-ESP/commits/master) [![license](https://img.shields.io/github/license/proddy/EMS-ESP.svg)](LICENSE) -[![travis](https://travis-ci.com/proddy/EMS-ESP.svg?branch=dev)](https://travis-ci.com/proddy/EMS-ESP) +![Build Firmware](https://github.com/proddy/EMS-ESP/workflows/Build%20Firmware/badge.svg?branch=dev) [![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) [![downloads](https://img.shields.io/github/downloads/proddy/EMS-ESP/total.svg)](https://github.com/proddy/EMS-ESP/releases) [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/proddy/EMS-ESP.svg)](http://isitmaintained.com/project/proddy/EMS-ESP "Average time to resolve an issue") @@ -89,7 +89,7 @@ You can contribute to EMS-ESP by ## **Credits** A shout out to the people helping EMS-ESP get to where it is today... -- **@MichaelDvP** for all his amazing contributions and patience. Specifically the improved uart library, thermostat and mixer logic. +- **@MichaelDvP** for all his amazing contributions and patience. Specifically for the improved uart library, thermostat and mixer logic. - **@BBQKees** for his endless testing and building the awesome circuit boards - **@susisstrolch** for writing a first working version of the EMS bridge circuit which I used to design EMS-ESP version 0.1 back in August 2017 - plus everyone else providing suggestions, PRs and the odd donation that keep us motivated. Thanks! diff --git a/RELEASENOTES_DEV.md b/RELEASENOTES_DEV.md new file mode 100644 index 000000000..ed43d6b78 --- /dev/null +++ b/RELEASENOTES_DEV.md @@ -0,0 +1,8 @@ +# ![logo](media/EMS-ESP_logo_dark.png) + +This is a snapshot of the the current "beta" development code and firmware binaries using the `dev` branch. It has all the latest features and fixes but please be aware that this is still experimental firmware used for testing and thus may contain the odd bug. Use at your own risk and remember to report an issue if you find something unusual. + +# Firmware Installation + +Follow the instructions in the [documentation](https://emsesp.github.io/docs) on how to install the firmware binaries in the Assets below. + diff --git a/platformio.ini b/platformio.ini index bd57b40dd..c47c2ed13 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,8 +1,8 @@ ; PlatformIO Project Configuration File for EMS-ESP [platformio] -; default_envs = esp8266 -; default_envs = esp32 +default_envs = esp8266-local +; default_envs = esp32-local # override any settings with your own local ones in pio_local.ini extra_configs = @@ -32,24 +32,11 @@ build_flags = ; Uncomment ENABLE_CORS to enable Cross-Origin Resource Sharing (required for local React development) ; -D ENABLE_CORS -libs_core = - ; ArduinoJson - ; ESPAsyncTCP - ; AsyncTCP - ; AsyncMqttClient - [env] -extra_scripts = - pre:scripts/build_interface.py - scripts/main_script.py - scripts/rename_fw.py - scripts/gzip_fw.py - framework = arduino monitor_speed = 115200 - -; on OSX with non-native drivers use upload_speed = 115200 -upload_speed = 921600 +upload_speed = 921600 ; on OSX with non-native drivers use upload_speed = 115200 +build_type = release lib_ldf_mode = chain+ @@ -60,24 +47,40 @@ check_flags = clangtidy: --checks=-*,clang-analyzer-*,performance-* [env:esp8266] +extra_scripts = + scripts/main_script.py + scripts/rename_fw.py + scripts/gzip_fw.py +board = esp12e +platform = espressif8266 +board_build.f_cpu = 160000000L +build_flags = + +[env:esp32] +extra_scripts = + scripts/rename_fw.py + scripts/gzip_fw.py +board = esp32dev +platform = espressif32 +board_build.partitions = min_spiffs.csv +build_flags = + +[env:esp8266-local] +extra_scripts = + pre:scripts/build_interface.py + scripts/main_script.py board = esp12e ; https://github.com/platformio/platform-espressif8266/tree/master/boards -build_type = release platform = espressif8266 ; https://github.com/platformio/platform-espressif8266/releases board_build.filesystem = littlefs -lib_deps = ${common.libs_core} board_build.f_cpu = 160000000L ; 160MHz ; eagle.flash.4m1m.ld = 1019 KB sketch, 1000 KB SPIFFS. 4KB EEPROM, 4KB RFCAL, 12KB WIFI stack, 2052 KB OTA & buffer ; eagle.flash.4m2m.ld = 1019 KB sketch, 2024 KB SPIFFS. 4KB EEPROM, 4KB RFCAL, 12KB WIFI stack, 1028 KB OTA & buffer ; board_build.ldscript = eagle.flash.4m2m.ld build_flags = ${common.build_flags} ${common.debug_flags} -lib_ignore = - AsyncTCP -[env:esp32] +[env:esp32-local] board = esp32dev -build_type = release platform = espressif32 ; platform = https://github.com/platformio/platform-espressif32.git board_build.partitions = min_spiffs.csv ; https://github.com/espressif/arduino-esp32/blob/master/tools/partitions/ -lib_deps = ${common.libs_core} build_flags = ${common.build_flags} ${common.debug_flags} From 7ce3a2c4113e6883c19fa5e8c2758c1847a4757c Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 21:06:27 +0100 Subject: [PATCH 14/27] trigger build test --- CHANGELOG_DEV.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 CHANGELOG_DEV.md diff --git a/CHANGELOG_DEV.md b/CHANGELOG_DEV.md new file mode 100644 index 000000000..d0ba67dda --- /dev/null +++ b/CHANGELOG_DEV.md @@ -0,0 +1,48 @@ +# Dev Change Log + +### Added +- boiler `heatingactivated`, automatic select parameter telegrams for write +- boiler `wWType` parameter, in Console and MQTT +- support for uploading compressed firmware binaries in web UI +- setting to manually override the MQTT retain flag +- New API via HTTP REST API to read and set values. See https://emsesp.github.io/docs/#/API +- `show commands` command +- exporting of system settings using the `system info` command in Web and Console. Added link into the Web's Settings page. +- setting to change how booleans are rendered in MQTT (on/off, true/false, 1/0) +- enable ADC setting, add boiler circulation commands, add thermostat RC300 summermodes +- Added all device info to web UI for Thermostat and Boiler +- Added all device values to Home Assistant MQTT Discovery under separate devices and entities +- Show Rx and Tx quality in Console and Web UI +- Added button and tooltip to EMS Devices in Web +- wwtemp and wwtemplow to MQTT, Console and Web +- summer, winter modes for the CW400 thermostat +- new command under system called `report`. http://ems-esp/api?device=system&cmd=report to generate a report log for troubleshooting +- thermostat error codes +- Console command `publish ha` to also force the creation of the Home Assistant MQTT Discovery topics +- Heat pump values (dew temperature and relative air humidity) +- Console up key to repeat last command + +### Fixed +- fix wwontime readback +- fixed support for RC300 via MQTT commands (#505) +- Some minor optimizations to memory handling in the MQTT service +- Prevent MQTT from publishing empty json payloads +- Accurate detection of warm water and heating (#515) +- Fix writing to the Junkers FR120 thermostat +- support for changing summermode +- added missing `heatingtype` to thermostat data + +### Changed +- renamed wWCircPumpType to wWChargeType +- Installation and Configuration notes moved to the official EMS-ESP documentation site +- `call` commands can be done from the Console root for all devices +- Updated EMS-ESP official documentation (https://emsesp.github.io/docs/#/) +- JWT Secret renamed to Super User Password +- EMS Devices in Web UI shows button and tooltip to remind users they can click on a device +- MQTT topic name changes (see doc) +- Mixing renamed to Mixer + +### Removed +- Console contexts for thermostat and boiler +- Removed option to enable/disable the MQTT Heartbeat. It's always on. + From 3b8310aa0cbd103c278afec4b654d085a50f1fb8 Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 21:24:33 +0100 Subject: [PATCH 15/27] add build defines --- platformio.ini | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/platformio.ini b/platformio.ini index c47c2ed13..c65179bb0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -14,6 +14,7 @@ debug_flags = ; -D EMSESP_DEBUG ; -D EMSESP_UART_DEBUG ; -D EMSESP_FORCE_SERIAL + ; -D ENABLE_CORS ; default platformio compile flags are: -fno-rtti -std=c++11 -Os -mlongcalls -mtext-section-literals -falign-functions=4 -ffunction-sections -fdata-sections -fno-exceptions -Wall build_flags = @@ -29,15 +30,12 @@ build_flags = -D ARDUINOJSON_ENABLE_STD_STRING=1 -D PROGMEM_WWW -D CORS_ORIGIN=\"http://localhost:3000\" - ; Uncomment ENABLE_CORS to enable Cross-Origin Resource Sharing (required for local React development) - ; -D ENABLE_CORS [env] framework = arduino monitor_speed = 115200 -upload_speed = 921600 ; on OSX with non-native drivers use upload_speed = 115200 +upload_speed = 921600 build_type = release - lib_ldf_mode = chain+ check_tool = cppcheck, clangtidy @@ -54,7 +52,7 @@ extra_scripts = board = esp12e platform = espressif8266 board_build.f_cpu = 160000000L -build_flags = +build_flags = ${common.build_flags} [env:esp32] extra_scripts = @@ -63,7 +61,7 @@ extra_scripts = board = esp32dev platform = espressif32 board_build.partitions = min_spiffs.csv -build_flags = +build_flags = ${common.build_flags} [env:esp8266-local] extra_scripts = From 7931759a03b8f98308b8f555cdebbe4be515448f Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 22:07:00 +0100 Subject: [PATCH 16/27] build test --- CHANGELOG_DEV.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_DEV.md b/CHANGELOG_DEV.md index d0ba67dda..2089e611b 100644 --- a/CHANGELOG_DEV.md +++ b/CHANGELOG_DEV.md @@ -20,7 +20,7 @@ - thermostat error codes - Console command `publish ha` to also force the creation of the Home Assistant MQTT Discovery topics - Heat pump values (dew temperature and relative air humidity) -- Console up key to repeat last command +- Console up key to repeat last command ### Fixed - fix wwontime readback From ab75a2d5d8cf00714285f915f0b268736bc33a63 Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 22:16:43 +0100 Subject: [PATCH 17/27] fix body text --- .github/workflows/build_firmware.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build_firmware.yml b/.github/workflows/build_firmware.yml index 59141d1f0..eabb09d7f 100644 --- a/.github/workflows/build_firmware.yml +++ b/.github/workflows/build_firmware.yml @@ -60,7 +60,6 @@ jobs: uses: softprops/action-gh-release@v1 # if: startsWith(github.ref, 'refs/tags/') with: - body: Latest beta build body_path: BODY.txt name: Development Build version ${{steps.fetch_version.outputs.s}} tag_name: dev From 7a1847818508d070117d7fc93f09f2debbc380e8 Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 22:17:04 +0100 Subject: [PATCH 18/27] build test 2 --- CHANGELOG_DEV.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG_DEV.md b/CHANGELOG_DEV.md index 2089e611b..d0ba67dda 100644 --- a/CHANGELOG_DEV.md +++ b/CHANGELOG_DEV.md @@ -20,7 +20,7 @@ - thermostat error codes - Console command `publish ha` to also force the creation of the Home Assistant MQTT Discovery topics - Heat pump values (dew temperature and relative air humidity) -- Console up key to repeat last command +- Console up key to repeat last command ### Fixed - fix wwontime readback From b8c3f1dd9d60f8e0c1e34acf330a95c3b61fbd05 Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 22:32:51 +0100 Subject: [PATCH 19/27] build web also for esp32 --- platformio.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platformio.ini b/platformio.ini index c65179bb0..15b79caf0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -77,6 +77,8 @@ board_build.f_cpu = 160000000L ; 160MHz build_flags = ${common.build_flags} ${common.debug_flags} [env:esp32-local] +extra_scripts = + pre:scripts/build_interface.py board = esp32dev platform = espressif32 ; platform = https://github.com/platformio/platform-espressif32.git From d31c06a3fc476e58a3b0471f795577099ad3de5b Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 22:33:02 +0100 Subject: [PATCH 20/27] fix compiler warnings --- lib/async-mqtt-client/src/AsyncMqttClient.cpp | 4 ++-- src/mqtt.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/async-mqtt-client/src/AsyncMqttClient.cpp b/lib/async-mqtt-client/src/AsyncMqttClient.cpp index a44c75792..bec082cb5 100644 --- a/lib/async-mqtt-client/src/AsyncMqttClient.cpp +++ b/lib/async-mqtt-client/src/AsyncMqttClient.cpp @@ -40,7 +40,7 @@ AsyncMqttClient::AsyncMqttClient() _client.onPoll([](void * obj, AsyncClient * c) { (static_cast(obj))->_onPoll(c); }, this); #ifdef ESP32 - sprintf(_generatedClientId, "esp32%06x", ESP.getEfuseMac()); + sprintf(_generatedClientId, "esp32%06x", (int)ESP.getEfuseMac()); _xSemaphore = xSemaphoreCreateMutex(); #elif defined(ESP8266) sprintf(_generatedClientId, "esp8266%06x", ESP.getChipId()); @@ -931,7 +931,7 @@ uint16_t AsyncMqttClient::unsubscribe(const char * topic) { uint16_t AsyncMqttClient::publish(const char * topic, uint8_t qos, bool retain, const char * payload, size_t length, bool dup, uint16_t message_id) { if (!_connected) - return 0; + return 0; char fixedHeader[5]; fixedHeader[0] = AsyncMqttClientInternals::PacketType.PUBLISH; diff --git a/src/mqtt.cpp b/src/mqtt.cpp index 252dc255f..252620780 100644 --- a/src/mqtt.cpp +++ b/src/mqtt.cpp @@ -796,9 +796,9 @@ void Mqtt::register_mqtt_ha_sensor(const char * prefix, // name char new_name[50]; if (prefix != nullptr) { - snprintf_P(new_name, sizeof(new_name), PSTR("%s %s %s"), device_name.c_str(), prefix, name); + snprintf_P(new_name, sizeof(new_name), PSTR("%s %s %s"), device_name.c_str(), prefix, uuid::read_flash_string(name).c_str()); } else { - snprintf_P(new_name, sizeof(new_name), PSTR("%s %s"), device_name.c_str(), name); + snprintf_P(new_name, sizeof(new_name), PSTR("%s %s"), device_name.c_str(), uuid::read_flash_string(name).c_str()); } new_name[0] = toupper(new_name[0]); // capitalize first letter From a9ff862a99ee7dd587f18b81d7638523318615ea Mon Sep 17 00:00:00 2001 From: proddy Date: Thu, 29 Oct 2020 22:35:00 +0100 Subject: [PATCH 21/27] F7 telegram type handling #571 --- CHANGELOG_DEV.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG_DEV.md b/CHANGELOG_DEV.md index d0ba67dda..3a1e6dcce 100644 --- a/CHANGELOG_DEV.md +++ b/CHANGELOG_DEV.md @@ -31,6 +31,7 @@ - Fix writing to the Junkers FR120 thermostat - support for changing summermode - added missing `heatingtype` to thermostat data +- handle incomming ems+ read requests, ignore F7 telegrams with 3byte-id ### Changed - renamed wWCircPumpType to wWChargeType From 89aec9cbba969a0bfd98fc21f701773f4f8e6daa Mon Sep 17 00:00:00 2001 From: proddy Date: Fri, 30 Oct 2020 12:21:32 +0100 Subject: [PATCH 22/27] update build scripts --- .github/workflows/build_firmware.yml | 4 +- .github/workflows/check_code.yml | 2 + .github/workflows/release_main.yml | 56 ++++++++++++++++++++++++++ .github/workflows/standalone_build.yml | 4 +- 4 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/release_main.yml diff --git a/.github/workflows/build_firmware.yml b/.github/workflows/build_firmware.yml index eabb09d7f..0cb3ec4f5 100644 --- a/.github/workflows/build_firmware.yml +++ b/.github/workflows/build_firmware.yml @@ -7,7 +7,7 @@ on: tags: # - '*.*.*' paths: - - 'CHANGELOG_DEV.md' + - 'CHANGELOG_LATEST.md' jobs: @@ -54,7 +54,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Changelog - run: cat RELEASENOTES_DEV.md CHANGELOG_DEV.md > BODY.txt + run: cat RELEASENOTES_DEV.md CHANGELOG_LATEST.md > BODY.txt - name: Release uses: softprops/action-gh-release@v1 diff --git a/.github/workflows/check_code.yml b/.github/workflows/check_code.yml index 1f1631a91..a6bb15444 100644 --- a/.github/workflows/check_code.yml +++ b/.github/workflows/check_code.yml @@ -3,6 +3,8 @@ name: Code Check on: push: branches: [dev] + paths: + - 'src/**' pull_request: # The branches below must be a subset of the branches above branches: [dev] diff --git a/.github/workflows/release_main.yml b/.github/workflows/release_main.yml new file mode 100644 index 000000000..d89e2f30d --- /dev/null +++ b/.github/workflows/release_main.yml @@ -0,0 +1,56 @@ +name: Release Main + +on: + workflow_dispatch: + branches: [ main ] + +jobs: + + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Version + id: fetch_version + run: | + version=`grep -E '^#define EMSESP_APP_VERSION' ./src/version.h | awk '{print $3}' | sed 's/"//g'` + echo "::set-output name=s::$version" + + - name: Setup Python + uses: actions/setup-python@v1 + + - name: Install + run: | + python -m pip install --upgrade pip + pip install -U platformio + platformio upgrade + platformio update + + - name: Build web + run: | + cd interface + npm install + npm run build + + - name: Build images + run: | + platformio run -e esp8266 + platformio run -e esp32 + + - name: Changelog + run: cat RELEASENOTES.md CHANGELOG_LATEST.md > BODY.txt + + - name: Release + uses: softprops/action-gh-release@v1 + with: + body_path: BODY.txt + name: EMS-ESP v${{steps.fetch_version.outputs.s}} + tag_name: v${{steps.fetch_version.outputs.s}} + prerelease: false + files: | + ./build/firmware/*.* + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + \ No newline at end of file diff --git a/.github/workflows/standalone_build.yml b/.github/workflows/standalone_build.yml index 624d151ae..0b5379398 100644 --- a/.github/workflows/standalone_build.yml +++ b/.github/workflows/standalone_build.yml @@ -3,7 +3,9 @@ name: Standalone Build on: push: branches: [ dev ] - + paths: + - 'src/**' + jobs: build: From 2f4566cdb205928e7067c7bdfd365b8259497a83 Mon Sep 17 00:00:00 2001 From: proddy Date: Fri, 30 Oct 2020 12:21:57 +0100 Subject: [PATCH 23/27] rename release notes --- CHANGELOG.md | 2 +- CHANGELOG_DEV.md => CHANGELOG_LATEST.md | 3 ++- RELEASENOTES.md | 6 ++++++ RELEASENOTES_DEV.md | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) rename CHANGELOG_DEV.md => CHANGELOG_LATEST.md (96%) create mode 100644 RELEASENOTES.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c1e11da8..260ead5eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -# EMS-ESP Changelog +# Changelog All notable changes to this project will be documented in this file. diff --git a/CHANGELOG_DEV.md b/CHANGELOG_LATEST.md similarity index 96% rename from CHANGELOG_DEV.md rename to CHANGELOG_LATEST.md index 3a1e6dcce..ca5a1bcd8 100644 --- a/CHANGELOG_DEV.md +++ b/CHANGELOG_LATEST.md @@ -1,4 +1,4 @@ -# Dev Change Log +# Changelog ### Added - boiler `heatingactivated`, automatic select parameter telegrams for write @@ -21,6 +21,7 @@ - Console command `publish ha` to also force the creation of the Home Assistant MQTT Discovery topics - Heat pump values (dew temperature and relative air humidity) - Console up key to repeat last command +- added RC300 floordrying, error, building, damped temperature ### Fixed - fix wwontime readback diff --git a/RELEASENOTES.md b/RELEASENOTES.md new file mode 100644 index 000000000..1a8605f45 --- /dev/null +++ b/RELEASENOTES.md @@ -0,0 +1,6 @@ +# ![logo](https://github.com/proddy/EMS-ESP/blob/main/media/EMS-ESP_logo_dark.png) + +# Firmware Installation + +Follow the instructions in the [documentation](https://emsesp.github.io/docs) on how to install the firmware binaries in the Assets below. + diff --git a/RELEASENOTES_DEV.md b/RELEASENOTES_DEV.md index ed43d6b78..81a71d279 100644 --- a/RELEASENOTES_DEV.md +++ b/RELEASENOTES_DEV.md @@ -1,4 +1,4 @@ -# ![logo](media/EMS-ESP_logo_dark.png) +# ![logo](https://github.com/proddy/EMS-ESP/blob/main/media/EMS-ESP_logo_dark.png) This is a snapshot of the the current "beta" development code and firmware binaries using the `dev` branch. It has all the latest features and fixes but please be aware that this is still experimental firmware used for testing and thus may contain the odd bug. Use at your own risk and remember to report an issue if you find something unusual. From b9534d83911e2b0e785c8db7b0ce24c26bb14170 Mon Sep 17 00:00:00 2001 From: proddy Date: Fri, 30 Oct 2020 12:49:23 +0100 Subject: [PATCH 24/27] typo --- RELEASENOTES_DEV.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASENOTES_DEV.md b/RELEASENOTES_DEV.md index 81a71d279..88cf53e9b 100644 --- a/RELEASENOTES_DEV.md +++ b/RELEASENOTES_DEV.md @@ -1,6 +1,6 @@ # ![logo](https://github.com/proddy/EMS-ESP/blob/main/media/EMS-ESP_logo_dark.png) -This is a snapshot of the the current "beta" development code and firmware binaries using the `dev` branch. It has all the latest features and fixes but please be aware that this is still experimental firmware used for testing and thus may contain the odd bug. Use at your own risk and remember to report an issue if you find something unusual. +This is a snapshot of the current "beta" development code and firmware binaries using the `dev` branch. It has all the latest features and fixes but please be aware that this is still experimental firmware used for testing and thus may contain the odd bug. Use at your own risk and remember to report an issue if you find something unusual. # Firmware Installation From ae520a4bc4aa7246735f7316824369c94f0d639c Mon Sep 17 00:00:00 2001 From: MichaelDvP <59284019+MichaelDvP@users.noreply.github.com> Date: Fri, 30 Oct 2020 13:51:05 +0100 Subject: [PATCH 25/27] fix month for setting clock from NTP --- src/devices/thermostat.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index b860cb26f..36eea00f7 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1745,7 +1745,7 @@ bool Thermostat::set_datetime(const char * value, const int8_t id) { } data[0] = tm_->tm_year - 100; // Bosch counts from 2000 - data[1] = tm_->tm_mon; + data[1] = tm_->tm_mon + 1; data[2] = tm_->tm_hour; data[3] = tm_->tm_mday; data[4] = tm_->tm_min; @@ -2308,4 +2308,4 @@ void Thermostat::add_commands() { } -} // namespace emsesp \ No newline at end of file +} // namespace emsesp From 7029eb4ff35a3baafb3add1a9b3d4662d0695a9c Mon Sep 17 00:00:00 2001 From: proddy Date: Fri, 30 Oct 2020 13:57:58 +0100 Subject: [PATCH 26/27] b13 --- src/version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/version.h b/src/version.h index 0a1bf711c..b892a39cc 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "2.1.0b12" +#define EMSESP_APP_VERSION "2.1.0b13" From 2ba864e0a04d82cf5280fe3f1a4ce6f3cc3e0e55 Mon Sep 17 00:00:00 2001 From: proddy Date: Fri, 30 Oct 2020 13:58:24 +0100 Subject: [PATCH 27/27] added "fix month for setting clock from NTP" --- CHANGELOG_LATEST.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index ca5a1bcd8..b9d6e0070 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -33,6 +33,7 @@ - support for changing summermode - added missing `heatingtype` to thermostat data - handle incomming ems+ read requests, ignore F7 telegrams with 3byte-id +- fix month for setting clock from NTP ### Changed - renamed wWCircPumpType to wWChargeType