diff --git a/src/device_library.h b/src/device_library.h index 828a02ad2..e08d07d4e 100644 --- a/src/device_library.h +++ b/src/device_library.h @@ -98,6 +98,7 @@ {207, DeviceType::CONTROLLER, F("Sense II/CS200"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x10 {209, DeviceType::CONTROLLER, F("ErP"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 {218, DeviceType::CONTROLLER, F("M200/RFM200"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x50 +{224, DeviceType::CONTROLLER, F("9000i"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 {230, DeviceType::CONTROLLER, F("BC Base"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 {241, DeviceType::CONTROLLER, F("Condens 5000i"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // 0x09 diff --git a/src/devices/mixing.cpp b/src/devices/mixing.cpp index 7fc0dadf6..1b24f8bd5 100644 --- a/src/devices/mixing.cpp +++ b/src/devices/mixing.cpp @@ -30,7 +30,7 @@ Mixing::Mixing(uint8_t device_type, uint8_t device_id, uint8_t product_id, const LOG_DEBUG(F("Registering new Mixing module with device ID 0x%02X"), device_id); if (flags == EMSdevice::EMS_DEVICE_FLAG_MMPLUS) { - if (device_id < 0x28) { + if (device_id <= 0x27) { // telegram handlers 0x20 - 0x27 for HC register_telegram_type(device_id - 0x20 + 0x02D7, F("MMPLUSStatusMessage_HC"), true, std::bind(&Mixing::process_MMPLUSStatusMessage_HC, this, _1)); } else { @@ -126,7 +126,9 @@ void Mixing::publish_values() { Mqtt::publish(topic, doc); } -// heating circuits 0x02D7, 0x02D8 etc... +// heating circuits 0x02D7, 0x02D8 etc... +// e.g. A0 00 FF 00 01 D7 00 00 00 80 00 00 00 00 03 C5 +// A0 0B FF 00 01 D7 00 00 00 80 00 00 00 00 03 80 void Mixing::process_MMPLUSStatusMessage_HC(std::shared_ptr telegram) { type_ = Type::HC; hc_ = telegram->type_id - 0x02D7 + 1; // determine which circuit this is @@ -172,6 +174,7 @@ void Mixing::process_MMConfigMessage(std::shared_ptr telegram) { // pos 0: active FF = on // pos 1: valve runtime 0C = 120 sec in units of 10 sec } + // Mixing on a MM10 - 0xAC // e.g. Thermostat -> Mixing Module, type 0xAC, telegram: 10 21 AC 00 1E 64 01 AB void Mixing::process_MMSetMessage(std::shared_ptr telegram) { diff --git a/src/devices/solar.cpp b/src/devices/solar.cpp index b0c349073..1e80ab6bd 100644 --- a/src/devices/solar.cpp +++ b/src/devices/solar.cpp @@ -35,6 +35,10 @@ Solar::Solar(uint8_t device_type, uint8_t device_id, uint8_t product_id, const s // telegram handlers register_telegram_type(0x0097, F("SM10Monitor"), true, std::bind(&Solar::process_SM10Monitor, this, _1)); register_telegram_type(0x0362, F("SM100Monitor"), true, std::bind(&Solar::process_SM100Monitor, this, _1)); + register_telegram_type(0x0363, F("SM100Monitor2"), true, std::bind(&Solar::process_SM100Monitor2, this, _1)); + + register_telegram_type(0x0363, F("SM100Config"), true, std::bind(&Solar::process_SM100Config, this, _1)); + register_telegram_type(0x0364, F("SM100Status"), false, std::bind(&Solar::process_SM100Status, this, _1)); register_telegram_type(0x036A, F("SM100Status2"), false, std::bind(&Solar::process_SM100Status2, this, _1)); register_telegram_type(0x038E, F("SM100Energy"), true, std::bind(&Solar::process_SM100Energy, this, _1)); @@ -134,7 +138,7 @@ void Solar::process_SM10Monitor(std::shared_ptr telegram) { } /* - * SM100Monitor - type 0x0262 EMS+ - for SM100 and SM200 + * SM100Monitor - type 0x0362 EMS+ - for SM100 and SM200 * e.g. B0 0B FF 00 02 62 00 44 02 7A 80 00 80 00 80 00 80 00 80 00 80 00 00 7C 80 00 80 00 80 00 80 * e.g, 30 00 FF 00 02 62 01 AC * 30 00 FF 18 02 62 80 00 @@ -149,8 +153,27 @@ void Solar::process_SM100Monitor(std::shared_ptr telegram) { telegram->read_value(bottomTemp2_, 16); // is *10 } +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-parameter" + +// SM100Monitor2 - 0x0363 +// e.g. B0 00 FF 00 02 63 80 00 80 00 00 00 80 00 80 00 80 00 00 80 00 5A +void Solar::process_SM100Monitor2(std::shared_ptr telegram) { + // not implemented yet +} + +#pragma GCC diagnostic pop + +// SM100Config - 0x0366 +// e.g. B0 00 FF 00 02 66 01 62 00 13 40 14 +void Solar::process_SM100Config(std::shared_ptr telegram) { + telegram->read_value(availabilityFlag_, 0); + telegram->read_value(configFlag_, 1); + telegram->read_value(userFlag_, 2); +} + /* - * SM100Status - type 0x0264 EMS+ for pump modulation - for SM100 and SM200 + * SM100Status - type 0x0364 EMS+ for pump modulation - for SM100 and SM200 * e.g. 30 00 FF 09 02 64 64 = 100% * 30 00 FF 09 02 64 1E = 30% */ @@ -159,7 +182,7 @@ void Solar::process_SM100Status(std::shared_ptr telegram) { } /* - * SM100Status2 - type 0x026A EMS+ for pump on/off at offset 0x0A - for SM100 and SM200 + * SM100Status2 - type 0x036A EMS+ for pump on/off at offset 0x0A - for SM100 and SM200 * e.g. B0 00 FF 00 02 6A 03 03 03 03 01 03 03 03 03 03 01 03 * byte 4 = VS2 3-way valve for cylinder 2 : test=01, on=04 and off=03 * byte 10 = PS1 Solar circuit pump for collector array 1: test=01, on=04 and off=03 @@ -170,7 +193,7 @@ void Solar::process_SM100Status2(std::shared_ptr telegram) { } /* - * SM100Energy - type 0x028E EMS+ for energy readings + * SM100Energy - type 0x038E EMS+ for energy readings * e.g. 30 00 FF 00 02 8E 00 00 00 00 00 00 06 C5 00 00 76 35 */ void Solar::process_SM100Energy(std::shared_ptr telegram) { @@ -180,7 +203,7 @@ void Solar::process_SM100Energy(std::shared_ptr telegram) { } /* - * Junkers ISM1 Solar Module - type 0x0003 EMS+ for energy readings + * Junkers ISM1 Solar Module - type 0x0103 EMS+ for energy readings * e.g. B0 00 FF 00 00 03 32 00 00 00 00 13 00 D6 00 00 00 FB D0 F0 */ void Solar::process_ISM1StatusMessage(std::shared_ptr telegram) { @@ -192,11 +215,11 @@ void Solar::process_ISM1StatusMessage(std::shared_ptr telegram) } /* - * Junkers ISM1 Solar Module - type 0x0001 EMS+ for setting values + * Junkers ISM1 Solar Module - type 0x0101 EMS+ for setting values * e.g. 90 30 FF 06 00 01 50 */ void Solar::process_ISM1Set(std::shared_ptr telegram) { telegram->read_value(setpoint_maxBottomTemp_, 6); } -} // namespace emsesp \ No newline at end of file +} // namespace emsesp diff --git a/src/devices/solar.h b/src/devices/solar.h index d8f8fcf52..ed9a755b6 100644 --- a/src/devices/solar.h +++ b/src/devices/solar.h @@ -58,11 +58,20 @@ class Solar : public EMSdevice { uint32_t energyTotal_ = EMS_VALUE_ULONG_NOTSET; uint32_t pumpWorkMin_ = EMS_VALUE_ULONG_NOTSET; // Total solar pump operating time + uint8_t availabilityFlag_ = EMS_VALUE_BOOL_NOTSET; + uint8_t configFlag_ = EMS_VALUE_BOOL_NOTSET; + uint8_t userFlag_ = EMS_VALUE_BOOL_NOTSET; + void process_SM10Monitor(std::shared_ptr telegram); void process_SM100Monitor(std::shared_ptr telegram); + void process_SM100Monitor2(std::shared_ptr telegram); + + void process_SM100Config(std::shared_ptr telegram); + void process_SM100Status(std::shared_ptr telegram); void process_SM100Status2(std::shared_ptr telegram); void process_SM100Energy(std::shared_ptr telegram); + void process_ISM1StatusMessage(std::shared_ptr telegram); void process_ISM1Set(std::shared_ptr telegram); }; diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index c25bc0997..8a6745d18 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -100,6 +100,8 @@ Thermostat::Thermostat(uint8_t device_type, uint8_t device_id, uint8_t product_i register_telegram_type(monitor_typeids[i], F("RC300Monitor"), false, std::bind(&Thermostat::process_RC300Monitor, this, _1)); register_telegram_type(set_typeids[i], F("RC300Set"), false, std::bind(&Thermostat::process_RC300Set, this, _1)); } + register_telegram_type(0x31D, F("RC300WWmode"), false, std::bind(&Thermostat::process_RC300WWmode, this, _1)); + register_telegram_type(0x31E, F("RC300WWmode"), false, std::bind(&Thermostat::process_RC300WWmode, this, _1)); // JUNKERS/HT3 } else if (flags == EMSdevice::EMS_DEVICE_FLAG_JUNKERS) { @@ -462,27 +464,27 @@ void Thermostat::publish_values() { if (datetime_.size()) { rootThermostat["time"] = datetime_.c_str(); } - if (dampedoutdoortemp != EMS_VALUE_INT_NOTSET) { - rootThermostat["dampedtemp"] = dampedoutdoortemp; + if (dampedoutdoortemp_ != EMS_VALUE_INT_NOTSET) { + rootThermostat["dampedtemp"] = dampedoutdoortemp_; } - if (tempsensor1 != EMS_VALUE_USHORT_NOTSET) { - rootThermostat["inttemp1"] = (float)tempsensor1 / 10; + if (tempsensor1_ != EMS_VALUE_USHORT_NOTSET) { + rootThermostat["inttemp1"] = (float)tempsensor1_ / 10; } - if (tempsensor2 != EMS_VALUE_USHORT_NOTSET) { - rootThermostat["inttemp2"] = (float)tempsensor2 / 10; + if (tempsensor2_ != EMS_VALUE_USHORT_NOTSET) { + rootThermostat["inttemp2"] = (float)tempsensor2_ / 10; } - if (ibaCalIntTemperature != EMS_VALUE_INT_NOTSET) { - rootThermostat["intoffset"] = (float)ibaCalIntTemperature / 2; + if (ibaCalIntTemperature_ != EMS_VALUE_INT_NOTSET) { + rootThermostat["intoffset"] = (float)ibaCalIntTemperature_ / 2; } - if (ibaMinExtTemperature != EMS_VALUE_INT_NOTSET) { - rootThermostat["minexttemp"] = (float)ibaMinExtTemperature; // min ext temp for heating curve, in deg. + if (ibaMinExtTemperature_ != EMS_VALUE_INT_NOTSET) { + rootThermostat["minexttemp"] = (float)ibaMinExtTemperature_; // min ext temp for heating curve, in deg. } - if (ibaBuildingType != EMS_VALUE_UINT_NOTSET) { - if (ibaBuildingType == 0) { + if (ibaBuildingType_ != EMS_VALUE_UINT_NOTSET) { + if (ibaBuildingType_ == 0) { rootThermostat["building"] = "light"; - } else if (ibaBuildingType == 1) { + } else if (ibaBuildingType_ == 1) { rootThermostat["building"] = "medium"; - } else if (ibaBuildingType == 2) { + } else if (ibaBuildingType_ == 2) { rootThermostat["building"] = "heavy"; } } @@ -809,67 +811,67 @@ void Thermostat::show_values(uuid::console::Shell & shell) { if (datetime_.size()) { shell.printfln(F(" Clock: %s"), datetime_.c_str()); - if (ibaClockOffset != EMS_VALUE_UINT_NOTSET && flags == EMS_DEVICE_FLAG_RC30_1) { - print_value(shell, 2, F("Offset clock"), Helpers::render_value(buffer, ibaClockOffset, 1)); // offset (in sec) to clock, 0xff = -1 s, 0x02 = 2 s + if (ibaClockOffset_ != EMS_VALUE_UINT_NOTSET && flags == EMS_DEVICE_FLAG_RC30_1) { + print_value(shell, 2, F("Offset clock"), Helpers::render_value(buffer, ibaClockOffset_, 1)); // offset (in sec) to clock, 0xff = -1 s, 0x02 = 2 s } } if (flags == EMS_DEVICE_FLAG_RC35) { - print_value(shell, 2, F("Damped Outdoor temperature"), F_(degrees), Helpers::render_value(buffer, dampedoutdoortemp, 1)); - print_value(shell, 2, F("Temp sensor 1"), F_(degrees), Helpers::render_value(buffer, tempsensor1, 10)); - print_value(shell, 2, F("Temp sensor 2"), F_(degrees), Helpers::render_value(buffer, tempsensor2, 10)); + print_value(shell, 2, F("Damped Outdoor temperature"), F_(degrees), Helpers::render_value(buffer, dampedoutdoortemp_, 1)); + print_value(shell, 2, F("Temp sensor 1"), F_(degrees), Helpers::render_value(buffer, tempsensor1_, 10)); + print_value(shell, 2, F("Temp sensor 2"), F_(degrees), Helpers::render_value(buffer, tempsensor2_, 10)); } if (flags == EMS_DEVICE_FLAG_RC30_1) { // settings parameters - if (ibaMainDisplay != EMS_VALUE_UINT_NOTSET) { - if (ibaMainDisplay == 0) { + if (ibaMainDisplay_ != EMS_VALUE_UINT_NOTSET) { + if (ibaMainDisplay_ == 0) { shell.printfln(F(" Display: internal temperature")); - } else if (ibaMainDisplay == 1) { + } else if (ibaMainDisplay_ == 1) { shell.printfln(F(" Display: internal setpoint")); - } else if (ibaMainDisplay == 2) { + } else if (ibaMainDisplay_ == 2) { shell.printfln(F(" Display: external temperature")); - } else if (ibaMainDisplay == 3) { + } else if (ibaMainDisplay_ == 3) { shell.printfln(F(" Display: burner temperature")); - } else if (ibaMainDisplay == 4) { + } else if (ibaMainDisplay_ == 4) { shell.printfln(F(" Display: WW temperature")); - } else if (ibaMainDisplay == 5) { + } else if (ibaMainDisplay_ == 5) { shell.printfln(F(" Display: functioning mode")); - } else if (ibaMainDisplay == 6) { + } else if (ibaMainDisplay_ == 6) { shell.printfln(F(" Display: time")); - } else if (ibaMainDisplay == 7) { + } else if (ibaMainDisplay_ == 7) { shell.printfln(F(" Display: date")); - } else if (ibaMainDisplay == 9) { + } else if (ibaMainDisplay_ == 9) { shell.printfln(F(" Display: smoke temperature")); } } - if (ibaLanguage != EMS_VALUE_UINT_NOTSET) { - if (ibaLanguage == 0) { + if (ibaLanguage_ != EMS_VALUE_UINT_NOTSET) { + if (ibaLanguage_ == 0) { shell.printfln(F(" Language: German")); - } else if (ibaLanguage == 1) { + } else if (ibaLanguage_ == 1) { shell.printfln(F(" Language: Dutch")); - } else if (ibaLanguage == 2) { + } else if (ibaLanguage_ == 2) { shell.printfln(F(" Language: French")); - } else if (ibaLanguage == 3) { + } else if (ibaLanguage_ == 3) { shell.printfln(F(" Language: Italian")); } } } if (flags == EMS_DEVICE_FLAG_RC35 || flags == EMS_DEVICE_FLAG_RC30_1) { - if (ibaCalIntTemperature != EMS_VALUE_INT_NOTSET) { - print_value(shell, 2, F("Offset int. temperature"), F_(degrees), Helpers::render_value(buffer, ibaCalIntTemperature, 2)); + if (ibaCalIntTemperature_ != EMS_VALUE_INT_NOTSET) { + print_value(shell, 2, F("Offset int. temperature"), F_(degrees), Helpers::render_value(buffer, ibaCalIntTemperature_, 2)); } - if (ibaMinExtTemperature != EMS_VALUE_INT_NOTSET) { - print_value(shell, 2, F("Min ext. temperature"), F_(degrees), Helpers::render_value(buffer, ibaMinExtTemperature, 0)); // min ext temp for heating curve, in deg. + if (ibaMinExtTemperature_ != EMS_VALUE_INT_NOTSET) { + print_value(shell, 2, F("Min ext. temperature"), F_(degrees), Helpers::render_value(buffer, ibaMinExtTemperature_, 0)); // min ext temp for heating curve, in deg. } - if (ibaBuildingType != EMS_VALUE_UINT_NOTSET) { - if (ibaBuildingType == 0) { + if (ibaBuildingType_ != EMS_VALUE_UINT_NOTSET) { + if (ibaBuildingType_ == 0) { shell.printfln(F(" Building: light")); - } else if (ibaBuildingType == 1) { + } else if (ibaBuildingType_ == 1) { shell.printfln(F(" Building: medium")); - } else if (ibaBuildingType == 2) { + } else if (ibaBuildingType_ == 2) { shell.printfln(F(" Building: heavy")); } } @@ -976,9 +978,9 @@ void Thermostat::process_JunkersSet(std::shared_ptr telegram) { // type 0xA3 - for external temp settings from the the RC* thermostats (e.g. RC35) void Thermostat::process_RCOutdoorTemp(std::shared_ptr telegram) { - telegram->read_value(dampedoutdoortemp, 0); - telegram->read_value(tempsensor1, 3); // sensor 1 - is * 10 - telegram->read_value(tempsensor2, 5); // sensor 2 - is * 10 + telegram->read_value(dampedoutdoortemp_, 0); + telegram->read_value(tempsensor1_, 3); // sensor 1 - is * 10 + telegram->read_value(tempsensor2_, 5); // sensor 2 - is * 10 } // 0x91 - data from the RC20 thermostat (0x17) - 15 bytes long @@ -1000,13 +1002,13 @@ void Thermostat::process_EasyMonitor(std::shared_ptr telegram) { // Settings Parameters - 0xA5 - RC30_1 void Thermostat::process_IBASettings(std::shared_ptr telegram) { // 22 - display line on RC35 - telegram->read_value(ibaMainDisplay, + telegram->read_value(ibaMainDisplay_, 0); // display on Thermostat: 0 int. temp, 1 int. setpoint, 2 ext. temp., 3 burner temp., 4 ww temp, 5 functioning mode, 6 time, 7 data, 9 smoke temp - telegram->read_value(ibaLanguage, 1); // language on Thermostat: 0 german, 1 dutch, 2 french, 3 italian - telegram->read_value(ibaCalIntTemperature, 2); // offset int. temperature sensor, by * 0.1 Kelvin - telegram->read_value(ibaBuildingType, 6); // building type: 0 = light, 1 = medium, 2 = heavy - telegram->read_value(ibaMinExtTemperature, 5); // min ext temp for heating curve, in deg., 0xF6=-10, 0x0 = 0, 0xFF=-1 - telegram->read_value(ibaClockOffset, 12); // offset (in sec) to clock, 0xff = -1 s, 0x02 = 2 s + telegram->read_value(ibaLanguage_, 1); // language on Thermostat: 0 german, 1 dutch, 2 french, 3 italian + telegram->read_value(ibaCalIntTemperature_, 2); // offset int. temperature sensor, by * 0.1 Kelvin + telegram->read_value(ibaBuildingType_, 6); // building type: 0 = light, 1 = medium, 2 = heavy + telegram->read_value(ibaMinExtTemperature_, 5); // min ext temp for heating curve, in deg., 0xF6=-10, 0x0 = 0, 0xFF=-1 + telegram->read_value(ibaClockOffset_, 12); // offset (in sec) to clock, 0xff = -1 s, 0x02 = 2 s } // type 0x6F - FR10/FR50/FR100 Junkers @@ -1053,6 +1055,16 @@ void Thermostat::process_RC300Set(std::shared_ptr telegram) { telegram->read_value(hc->nighttemp, 4); // is * 2 } +// types 0x31D and 0x31E +void Thermostat::process_RC300WWmode(std::shared_ptr telegram) { + // 0x31D for WW system 1, 0x31E for WW system 2 + wwSystem_ = telegram->type_id - 0x31D + 1; + telegram->read_value(wwExtra_, 0); // 0=no, 1=yes + // pos 1 = holiday mode + // pos 2 = current status of DHW setpoint + // pos 3 = current status of DHW circulation pump +} + // 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); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index e27afa2a7..018daf8f9 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -113,17 +113,20 @@ class Thermostat : public EMSdevice { uint8_t mqtt_format_; // single, nested or ha // Installation parameters - uint8_t ibaMainDisplay = + uint8_t ibaMainDisplay_ = EMS_VALUE_UINT_NOTSET; // display on Thermostat: 0 int. temp, 1 int. setpoint, 2 ext. temp., 3 burner temp., 4 ww temp, 5 functioning mode, 6 time, 7 data, 9 smoke temp - uint8_t ibaLanguage = EMS_VALUE_UINT_NOTSET; // language on Thermostat: 0 german, 1 dutch, 2 french, 3 italian - int8_t ibaCalIntTemperature = EMS_VALUE_INT_NOTSET; // offset int. temperature sensor, by * 0.1 Kelvin (-5.0 to 5.0K) - int8_t ibaMinExtTemperature = EMS_VALUE_INT_NOTSET; // min ext temp for heating curve, in deg., 0xF6=-10, 0x0 = 0, 0xFF=-1 - 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 + uint8_t ibaLanguage_ = EMS_VALUE_UINT_NOTSET; // language on Thermostat: 0 german, 1 dutch, 2 french, 3 italian + int8_t ibaCalIntTemperature_ = EMS_VALUE_INT_NOTSET; // offset int. temperature sensor, by * 0.1 Kelvin (-5.0 to 5.0K) + int8_t ibaMinExtTemperature_ = EMS_VALUE_INT_NOTSET; // min ext temp for heating curve, in deg., 0xF6=-10, 0x0 = 0, 0xFF=-1 + 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 - int8_t dampedoutdoortemp = EMS_VALUE_INT_NOTSET; - uint16_t tempsensor1 = EMS_VALUE_USHORT_NOTSET; - uint16_t tempsensor2 = 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; + + uint8_t wwSystem_ = EMS_VALUE_UINT_NOTSET; + uint8_t wwExtra_ = EMS_VALUE_UINT_NOTSET; std::vector> heating_circuits_; // each thermostat can have multiple heating circuits @@ -193,7 +196,6 @@ class Thermostat : public EMSdevice { static constexpr uint8_t EMS_OFFSET_JunkersSetMessage2_eco_temp = 6; static constexpr uint8_t EMS_OFFSET_JunkersSetMessage3_heat = 7; -// static constexpr uint8_t DEFAULT_HEATING_CIRCUIT = 1; // default heating circuit is always 1 #define DEFAULT_HEATING_CIRCUIT 1 // Installation settings @@ -229,6 +231,8 @@ class Thermostat : public EMSdevice { void process_EasyMonitor(std::shared_ptr telegram); + void process_RC300WWmode(std::shared_ptr telegram); + // set functions void set_settings_minexttemp(const int8_t mt); void set_settings_calinttemp(const int8_t ct); diff --git a/src/test/test.cpp b/src/test/test.cpp index d0c335bda..61c6e3e58 100644 --- a/src/test/test.cpp +++ b/src/test/test.cpp @@ -358,6 +358,8 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { EMSESP::add_device(0x28, 160, version, EMSdevice::Brand::BUDERUS); // MM100, WWC EMSESP::add_device(0x29, 161, version, EMSdevice::Brand::BUDERUS); // MM200, WWC + EMSESP::add_device(0x20, 160, version, EMSdevice::Brand::BOSCH); // MM100 + EMSESP::rxservice_.loop(); // WWC1 on 0x29 @@ -365,6 +367,9 @@ void Test::run_test(uuid::console::Shell & shell, const std::string & command) { // WWC2 on 0x28 rx_telegram({0xA8, 0x00, 0xFF, 0x00, 0x02, 0x31, 0x02, 0x35, 0x00, 0x3C, 0x00, 0x3C, 0x3C, 0x46, 0x02, 0x03, 0x03, 0x00, 0x3C}); + + // check for error "[emsesp] No telegram type handler found for ID 0x255 (src 0x20, dest 0x00)" + rx_telegram({0xA0, 0x00, 0xFF, 0x00, 0x01, 0x55, 0x00, 0x1A}); } // finally dump to console