From a8eb06bef2a4947d30e2ebac98e4295bef969a9f Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Sun, 23 Feb 2025 08:33:53 +0100 Subject: [PATCH] second fix #2410 --- src/devices/thermostat.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index fd21908e8..7261cc85d 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1278,12 +1278,18 @@ void Thermostat::process_RC300WWmode(std::shared_ptr telegram) { telegram->read_value(wwmode, 2); const uint8_t modes1[] = {0, 0, 1, 0, 0, 2}; // 0=normal (1), 1=comfort(2), 2=eco+(5) has_update(dhw->wwMode_, wwmode < sizeof(modes1) ? modes1[wwmode] : EMS_VALUE_UINT8_NOTSET); - } else if (model() == EMSdevice::EMS_DEVICE_FLAG_CR120 || model() == EMSdevice::EMS_DEVICE_FLAG_RC100) { + } else if (model() == EMSdevice::EMS_DEVICE_FLAG_CR120) { const uint8_t modes[] = {1, 2, 4}; //// 0=normal (1), 1=comfort(2), 2=auto(4) uint8_t wwmode = dhw->wwMode_ < sizeof(modes) ? modes[dhw->wwMode_] : EMS_VALUE_UINT8_NOTSET; telegram->read_value(wwmode, 2); const uint8_t modes1[] = {0, 0, 1, 0, 2, 0}; has_update(dhw->wwMode_, wwmode < sizeof(modes1) ? modes1[wwmode] : EMS_VALUE_UINT8_NOTSET); + } else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC100) { + const uint8_t modes[] = {0, 2, 3}; //// 0=off(0), 1=on(2), 2=auto(3) + uint8_t wwmode = dhw->wwMode_ < sizeof(modes) ? modes[dhw->wwMode_] : EMS_VALUE_UINT8_NOTSET; + telegram->read_value(wwmode, 2); + const uint8_t modes1[] = {0, 0, 1, 2, 0, 0}; + has_update(dhw->wwMode_, wwmode < sizeof(modes1) ? modes1[wwmode] : EMS_VALUE_UINT8_NOTSET); } else { has_update(telegram, dhw->wwMode_, 2); // 0=off, 1=low, 2=high, 3=auto, 4=own prog } @@ -2227,12 +2233,18 @@ bool Thermostat::set_wwmode(const char * value, const int8_t id) { } const uint8_t modes[] = {0, 5, 1, 2, 4}; write_command(0x02F5 + dhw->offset(), 2, modes[set], 0x02F5 + dhw->offset()); - } else if (model() == EMSdevice::EMS_DEVICE_FLAG_CR120 || model() == EMSdevice::EMS_DEVICE_FLAG_RC100) { + } else if (model() == EMSdevice::EMS_DEVICE_FLAG_CR120) { if (!Helpers::value2enum(value, set, FL_(enum_wwMode6))) { // normal, comfort, auto return false; } const uint8_t modes[] = {0, 2, 4}; write_command(0x02F5 + dhw->offset(), 2, modes[set], 0x02F5 + dhw->offset()); + } else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC100) { + if (!Helpers::value2enum(value, set, FL_(enum_wwMode2))) { // off, on, auto + return false; + } + const uint8_t modes[] = {0, 2, 3}; + write_command(0x02F5 + dhw->offset(), 2, modes[set], 0x02F5 + dhw->offset()); } else if (model() == EMSdevice::EMS_DEVICE_FLAG_R3000) { // Rego3000 - https://github.com/emsesp/EMS-ESP32/issues/1692 if (!Helpers::value2enum(value, set, FL_(enum_wwMode5))) { return false; @@ -5051,6 +5063,8 @@ void Thermostat::register_device_values_dhw(std::shared_ptrwwMode_, DeviceValueType::ENUM, FL_(enum_wwMode5), FL_(wwMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwmode)); } else if (model() == EMSdevice::EMS_DEVICE_FLAG_CR120) { register_device_value(tag, &dhw->wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode6), FL_(wwMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwmode)); + } else if (model() == EMSdevice::EMS_DEVICE_FLAG_RC100) { + register_device_value(tag, &dhw->wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode2), FL_(wwMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwmode)); } else { register_device_value(tag, &dhw->wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode), FL_(wwMode), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwmode)); }