diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 85c762516..e5060298d 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -106,7 +106,7 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i } else if (model == EMSdevice::EMS_DEVICE_FLAG_EASY) { monitor_typeids = {0x0A}; set_typeids = {}; - register_telegram_type(monitor_typeids[0], F("EasyMonitor"), false, [&](std::shared_ptr t) { process_EasyMonitor(t); }); + register_telegram_type(monitor_typeids[0], F("EasyMonitor"), true, [&](std::shared_ptr t) { process_EasyMonitor(t); }); // RC300/RC100 } else if ((model == EMSdevice::EMS_DEVICE_FLAG_RC300) || (model == EMSdevice::EMS_DEVICE_FLAG_RC100)) { @@ -524,7 +524,7 @@ std::shared_ptr Thermostat::heating_circuit(std::sha } // create a new heating circuit object - auto new_hc = std::make_shared(hc_num, monitor_typeids[hc_num - 1], set_typeids[hc_num - 1]); + auto new_hc = std::make_shared(hc_num); heating_circuits_.push_back(new_hc); std::sort(heating_circuits_.begin(), heating_circuits_.end()); // sort based on hc number @@ -536,7 +536,10 @@ std::shared_ptr Thermostat::heating_circuit(std::sha // set the flag saying we want its data during the next auto fetch toggle_fetch(monitor_typeids[hc_num - 1], toggle_); - toggle_fetch(set_typeids[hc_num - 1], toggle_); + + if (set_typeids.size()) { + toggle_fetch(set_typeids[hc_num - 1], toggle_); + } return heating_circuits_.back(); // even after sorting, this should still point back to the newly created HC } @@ -1568,7 +1571,6 @@ void Thermostat::set_mode_n(const uint8_t mode, const uint8_t hc_num) { // add the write command to the Tx queue // post validate is the corresponding monitor or set type IDs as they can differ per model - // write_command(set_typeids[hc->hc_num() - 1], offset, set_mode_value, validate_typeid); write_command(set_typeids[hc->hc_num() - 1], offset, set_mode_value, validate_typeid); } diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index 44a125ba5..2c3dff826 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -40,10 +40,8 @@ class Thermostat : public EMSdevice { Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_id, const std::string & version, const std::string & name, uint8_t flags, uint8_t brand); class HeatingCircuit { public: - HeatingCircuit(const uint8_t hc_num, const uint16_t monitor_typeid, const uint16_t set_typeid) - : hc_num_(hc_num) - , monitor_typeid_(monitor_typeid) - , set_typeid_(set_typeid) { + HeatingCircuit(const uint8_t hc_num) + : hc_num_(hc_num) { } ~HeatingCircuit() = default; @@ -60,35 +58,25 @@ class Thermostat : public EMSdevice { uint8_t targetflowtemp = EMS_VALUE_UINT_NOTSET; uint8_t summertemp = EMS_VALUE_UINT_NOTSET; uint8_t nofrosttemp = EMS_VALUE_UINT_NOTSET; - uint8_t designtemp = EMS_VALUE_UINT_NOTSET; // heatingcurve design temp at MinExtTemp - int8_t offsettemp = EMS_VALUE_INT_NOTSET; // heatingcurve offest temp at roomtemp signed! + uint8_t designtemp = EMS_VALUE_UINT_NOTSET; // heating curve design temp at MinExtTemp + int8_t offsettemp = EMS_VALUE_INT_NOTSET; // heating curve offest temp at roomtemp signed! uint8_t hc_num() const { - return hc_num_; // 1..10 + return hc_num_; } uint8_t get_mode(uint8_t flags) const; uint8_t get_mode_type(uint8_t flags) const; - uint16_t monitor_typeid() const { - return monitor_typeid_; - } - - uint16_t set_typeid() const { - return set_typeid_; - } - enum Mode : uint8_t { UNKNOWN, OFF, MANUAL, AUTO, DAY, NIGHT, HEAT, NOFROST, ECO, HOLIDAY, COMFORT, OFFSET, DESIGN, SUMMER }; - // for sorting + // for sorting based on hc number friend inline bool operator<(const std::shared_ptr & lhs, const std::shared_ptr & rhs) { return (lhs->hc_num_ < rhs->hc_num_); } private: - uint8_t hc_num_; // 1..10 - uint16_t monitor_typeid_; - uint16_t set_typeid_; + uint8_t hc_num_; // 1..10 }; static std::string mode_tostring(uint8_t mode); diff --git a/src/test/test.cpp b/src/test/test.cpp index 5ac547ab1..fe39c84a5 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -123,10 +123,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { uint8bitb = EMS_VALUE_UINT_NOTSET; telegram->read_bitvalue(uint8bitb, 0, 0); // value is 0x01 = 0000 0001 shell.printfln("uint8 bit read: expecting 1, got:%d", uint8bitb); - - shell.loop_all(); - - return; } if (command == "devices") { @@ -159,7 +155,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { // note there is no brand (byte 9) rx_telegram({0x09, 0x0B, 0x02, 0x00, 0x59, 0x09, 0x0a}); - shell.loop_all(); EMSESP::show_device_values(shell); } @@ -210,8 +205,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { shell.invoke_command("show"); // shell.invoke_command("system"); // shell.invoke_command("show mqtt"); - - // shell.loop_all(); } if (command == "thermostat") { @@ -235,20 +228,11 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { // RCPLUSStatusMessage_HC1(0x01A5) uart_telegram({0x98, 0x00, 0xFF, 0x00, 0x01, 0xA5, 0x00, 0xCF, 0x21, 0x2E, 0x00, 0x00, 0x2E, 0x24, 0x03, 0x25, 0x03, 0x03, 0x01, 0x03, 0x25, 0x00, 0xC8, 0x00, 0x00, 0x11, 0x01, 0x03}); - - shell.loop_all(); } if (command == "tc100") { shell.printfln(F("Testing adding a TC100 thermostat to the EMS bus...")); - // add_device(0x10, 165, version, EMSdevice::Brand::BUDERUS); - // add_device(0x17, 125, version, EMSdevice::Brand::BUDERUS); // test unknown class test - // add_device(0x17, 93, version, EMSdevice::Brand::BUDERUS); - // add_device(0x17, 254, version, EMSdevice::Brand::BUDERUS); // test unknown product_id - - // EMSESP::add_device(0x18, 157, version, EMSdevice::Brand::BOSCH); // Bosch CR100 - https://github.com/proddy/EMS-ESP/issues/355 - std::string version("02.21"); // add a boiler @@ -257,11 +241,9 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { // add a thermostat EMSESP::add_device(0x18, 202, version, EMSdevice::Brand::BOSCH); // Bosch TC100 - https://github.com/proddy/EMS-ESP/issues/474 - // RCPLUSStatusMessage_HC1(0x01A5) - // uart_telegram({0x98, 0x00, 0xFF, 0x00, 0x01, 0xA5, 0x00, 0xCF, 0x21, 0x2E, 0x00, 0x00, 0x2E, 0x24, - // 0x03, 0x25, 0x03, 0x03, 0x01, 0x03, 0x25, 0x00, 0xC8, 0x00, 0x00, 0x11, 0x01, 0x03}); - - shell.loop_all(); + // 0x0A + uart_telegram({0x98, 0x0B, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}); } if (command == "solar") { @@ -582,8 +564,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { shell.invoke_command("help"); shell.invoke_command("pin"); shell.invoke_command("pin 1 true"); - - shell.loop_all(); } if (command == "mqtt") { @@ -654,8 +634,6 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { Mqtt::resubscribe(); Mqtt::show_mqtt(shell); // show queue - - shell.loop_all(); } if (command == "poll2") { diff --git a/src/version.h b/src/version.h index 3bea0c96e..785350975 100644 --- a/src/version.h +++ b/src/version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "2.0.1b1" +#define EMSESP_APP_VERSION "2.0.1b2"