diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index c26c2890d..ffefbd0fa 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -13,6 +13,7 @@ For more details go to [emsesp.org](https://emsesp.org/). - boiler pumpkick [#2965](https://github.com/emsesp/EMS-ESP32/discussions/2965) - heatpump reset [#2933](https://github.com/emsesp/EMS-ESP32/issues/2933) - e-mail notification using ReadyMail Client +- 2.nd freshwater module (dhw4) [#2991](https://github.com/emsesp/EMS-ESP32/issues/2991) ## Fixed diff --git a/src/core/system.cpp b/src/core/system.cpp index d4c46d8b1..5c953bc55 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -2744,36 +2744,37 @@ bool System::command_restart(const char * value, const int8_t id) { std::string System::reset_reason(uint8_t cpu) const { #ifndef EMSESP_STANDALONE switch (esp_rom_get_reset_reason(cpu)) { - case 1: + case RESET_REASON_CHIP_POWER_ON: return ("Power on reset"); - // case 2 :reset pin not on esp32 - case 3: + case 2: // not on esp32 + return ("reset pin"); + case RESET_REASON_CORE_SW: return ("Software reset"); case 4: // not on S2, C3 return ("Legacy watch dog reset"); - case 5: + case RESET_REASON_CORE_DEEP_SLEEP: return ("Deep sleep reset"); - case 6: // not on S2, C3 - return ("Reset by SDIO"); - case 7: + case 6: // RESET_REASON_CORE_SDIO: // not on S2, S3, C3 + return ("Reset by SDIO"); + case RESET_REASON_CORE_MWDT0: return ("Timer group0 watch dog reset"); - case 8: + case RESET_REASON_CORE_MWDT1: return ("Timer group1 watch dog reset"); - case 9: + case RESET_REASON_CORE_RTC_WDT: return ("RTC watch dog reset"); case 10: return ("Intrusion reset CPU"); - case 11: + case RESET_REASON_CPU0_MWDT0: return ("Timer group reset CPU"); - case 12: + case RESET_REASON_CPU0_SW: return ("Software reset CPU"); - case 13: + case RESET_REASON_CPU0_RTC_WDT: return ("RTC watch dog reset: CPU"); - case 14: // not on S2, C3 + case 14: // RESET_REASON_CPU1_CPU0: // not on S2, S3, C3 return ("APP CPU reset by PRO CPU"); - case 15: + case RESET_REASON_SYS_BROWN_OUT: return ("Brownout reset"); - case 16: + case RESET_REASON_SYS_RTC_WDT: return ("RTC watch dog reset: CPU+RTC"); default: break; diff --git a/src/devices/water.cpp b/src/devices/water.cpp index 94a8c9cf2..22f198289 100644 --- a/src/devices/water.cpp +++ b/src/devices/water.cpp @@ -29,16 +29,21 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c dhw_ = device_id - EMSdevice::EMS_DEVICE_ID_DHW1; int8_t tag = DeviceValueTAG::TAG_DHW1 + dhw_; if (flags == EMSdevice::EMS_DEVICE_FLAG_SM100) { // device_id 0x2A, DHW3 + // telegram handlers - register_telegram_type(0x07D6, "SM100wwTemperature", false, MAKE_PF_CB(process_SM100wwTemperature)); - register_telegram_type(0x07AA, "SM100wwStatus", false, MAKE_PF_CB(process_SM100wwStatus)); - register_telegram_type(0x07AB, "SM100wwCommand", false, MAKE_PF_CB(process_SM100wwCommand)); - register_telegram_type(0x07AC, "SM100wwParam1", false, MAKE_PF_CB(process_SM100wwParam2)); - register_telegram_type(0x07A5, "SM100wwCirc", true, MAKE_PF_CB(process_SM100wwCirc)); - register_telegram_type(0x07A6, "SM100wwParam", true, MAKE_PF_CB(process_SM100wwParam)); - register_telegram_type(0x07AE, "SM100wwKeepWarm", true, MAKE_PF_CB(process_SM100wwKeepWarm)); - register_telegram_type(0x07E0, "SM100wwStatus2", true, MAKE_PF_CB(process_SM100wwStatus2)); - register_telegram_type(0x07AD, "SM100ValveStatus", false, MAKE_PF_CB(process_SM100ValveStatus)); + register_telegram_type(0x07D6 + dhw_ - 2, "SM100wwTemperature", false, MAKE_PF_CB(process_SM100wwTemperature)); + register_telegram_type(0x07E0 + dhw_ - 2, "SM100wwStatus2", true, MAKE_PF_CB(process_SM100wwStatus2)); + register_telegram_type(0x07A6, "SM100wwParam", true, MAKE_PF_CB(process_SM100wwParam)); // same telegram for all circuits + if (tag == DeviceValueTAG::TAG_DHW3) { + register_telegram_type(0x07AA, "SM100wwStatus", false, MAKE_PF_CB(process_SM100wwStatus)); + register_telegram_type(0x07AC, "SM100wwParam1", false, MAKE_PF_CB(process_SM100wwParam2)); + register_telegram_type(0x07A5, "SM100wwCirc", true, MAKE_PF_CB(process_SM100wwCirc)); + register_telegram_type(0x07AE, "SM100wwKeepWarm", true, MAKE_PF_CB(process_SM100wwKeepWarm)); + register_telegram_type(0x07AD, "SM100ValveStatus", false, MAKE_PF_CB(process_SM100ValveStatus)); + register_telegram_type(0x07AB, "SM100wwCommand", false, MAKE_PF_CB(process_SM100wwCommand)); // command from thermostat + } else if (tag == DeviceValueTAG::TAG_DHW4) { + register_telegram_type(0x07C3, "SM100wwCommand", false, MAKE_PF_CB(process_SM100wwCommand)); // command from dhw3->dhw4 + } // device values... register_device_value(tag, &wwTemp_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(wwTemp), DeviceValueUOM::DEGREES); register_device_value(tag, &wwTemp2_, DeviceValueType::UINT16, DeviceValueNumOp::DV_NUMOP_DIV10, FL_(wwStorageTemp1), DeviceValueUOM::DEGREES); @@ -100,7 +105,7 @@ Water::Water(uint8_t device_type, uint8_t device_id, uint8_t product_id, const c } } -// SM100wwTemperature - 0x07D6 +// SM100wwTemperature - 0x07D6, dhw4: 0x07D7 // Solar Module(0x2A) -> (0x00), (0x7D6), data: 01 C1 00 00 02 5B 01 AF 01 AD 80 00 01 90 void Water::process_SM100wwTemperature(std::shared_ptr telegram) { has_update(telegram, wwTemp_, 0); // is *10 TS17 @@ -156,12 +161,10 @@ void Water::process_SM100ValveStatus(std::shared_ptr telegram) { has_update(telegram, wwRetValve_, 1); } -/* -// SM100ww? - 0x7E0, some kind of status +// SM100ww? - 0x7E0, some kind of status, dhw4: 0x7E1 // data: 00 00 46 00 00 01 06 0E 06 0E 00 00 00 00 00 03 03 03 03 // publishes single values offset 1/2(16bit), offset 5, offset 6, offset 7, offset 8, offset 9, // status2 = 03:"no heat", 06:"heat request", 08:"disinfecting", 09:"hold" -*/ void Water::process_SM100wwStatus2(std::shared_ptr telegram) { // has_update(telegram, wwFlow_, 7); // single byte, wrong see #1387 has_update(telegram, wwStatus2_, 8); @@ -170,6 +173,7 @@ void Water::process_SM100wwStatus2(std::shared_ptr telegram) { // SM100wwCommand - 0x07AB // Thermostat(0x10) -> Solar Module(0x2A), (0x7AB), data: 01 00 01 +// or dhw3 module (0x2A) -> dhw4 module(0x2B), (0x7C3), data: 01 01 00 void Water::process_SM100wwCommand(std::shared_ptr telegram) { // not implemented yet } diff --git a/src/emsesp_version.h b/src/emsesp_version.h index ed8918369..ffe1ccc12 100644 --- a/src/emsesp_version.h +++ b/src/emsesp_version.h @@ -1 +1 @@ -#define EMSESP_APP_VERSION "3.8.2-dev.C11" +#define EMSESP_APP_VERSION "3.8.2-dev.C12"