diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index d8d63eef3..0c46a362d 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -393,6 +393,13 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const FL_(wwComfort), DeviceValueUOM::NONE, MAKE_CF_CB(set_ww_mode)); + register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, + &wwComfort1_, + DeviceValueType::ENUM, + FL_(enum_comfort1), + FL_(wwComfort1), + DeviceValueUOM::NONE, + MAKE_CF_CB(set_ww_mode1)); register_device_value(DeviceValueTAG::TAG_DEVICE_DATA_WW, &wwFlowTempOffset_, DeviceValueType::UINT, @@ -781,6 +788,19 @@ void Boiler::process_UBAParameterWWPlus(std::shared_ptr telegram has_update(telegram, wwDisinfectionTemp_, 12); // setting here, status in E9 has_update(telegram, wwSelTempSingle_, 16); has_update(telegram, wwSelTempLow_, 18); + + uint8_t wwComfort1 = EMS_VALUE_UINT_NOTSET; + telegram->read_value(wwComfort1, 13); + if (wwComfort1 == 0) { + wwComfort1 = 0; // High_Comfort + } else if (wwComfort1 == 0xD8) { + wwComfort1 = 1; // Eco + } else { + wwComfort1 = EMS_VALUE_UINT_NOTSET; + } + has_update(wwComfort1_, wwComfort1); + + } // 0xE9 - WW monitor ems+ @@ -1492,6 +1512,31 @@ bool Boiler::set_ww_mode(const char * value, const int8_t id) { return true; } +// wwcomfort1 for RC310 +// on a RC310 it's 1=high, 2=eco +bool Boiler::set_ww_mode1(const char * value, const int8_t id) { + uint8_t set; + if (!Helpers::value2enum(value, set, FL_(enum_comfort1))) { + return false; + } + + if (!is_fetch(EMS_TYPE_UBAParameterWWPlus)) { + return false; + } + + if (set == 0) { + // LOG_INFO(F("Setting boiler dhw to High")); + } else if (set == 1) { + // LOG_INFO(F("Setting boiler dhw to Eco")); + set = 0xD8; + } else { + return false; // do nothing + } + + write_command(EMS_TYPE_UBAParameterWWPlus, 13, set, EMS_TYPE_UBAParameterWWPlus); + return true; +} + // turn on/off dhw bool Boiler::set_ww_activated(const char * value, const int8_t id) { bool v = false; diff --git a/src/devices/boiler.h b/src/devices/boiler.h index 71e71365c..5b5ae53b2 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -58,6 +58,7 @@ class Boiler : public EMSdevice { uint8_t wwSelTempSingle_; // DHW single charge temperature uint8_t wwType_; // 0-off, 1-flow, 2-flowbuffer, 3-buffer, 4-layered buffer uint8_t wwComfort_; // WW comfort mode + uint8_t wwComfort1_; // WW comfort mode RC310 uint8_t wwCircPump_; // DHW circulation pump available uint8_t wwChargeType_; // DHW charge type (pump or 3-way-valve) uint8_t wwDisinfectionTemp_; // DHW disinfection temperature to prevent infection @@ -240,6 +241,7 @@ class Boiler : public EMSdevice { // commands - none of these use the additional id parameter bool set_ww_mode(const char * value, const int8_t id); + bool set_ww_mode1(const char * value, const int8_t id); bool set_ww_activated(const char * value, const int8_t id); bool set_tapwarmwater_activated(const char * value, const int8_t id); bool set_ww_onetime(const char * value, const int8_t id); diff --git a/src/locale_EN.h b/src/locale_EN.h index 677a3e104..328b1754a 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -262,6 +262,7 @@ MAKE_PSTR_WORD(continuous) MAKE_PSTR(3wayvalve, "3-way valve") MAKE_PSTR(chargepump, "charge pump") MAKE_PSTR_WORD(hot) +MAKE_PSTR_WORD(high_comfort) MAKE_PSTR_WORD(eco) MAKE_PSTR_WORD(intelligent) MAKE_PSTR_WORD(flow) @@ -277,6 +278,7 @@ MAKE_PSTR_LIST(enum_off_time_date_manual, F_(off), F_(time), F_(date), F_(manual MAKE_PSTR_LIST(enum_freq, F_(off), F_(1x3min), F_(2x3min), F_(3x3min), F_(4x3min), F_(5x3min), F_(6x3min), F_(continuous)) MAKE_PSTR_LIST(enum_charge, F_(chargepump), F_(3wayvalve)) MAKE_PSTR_LIST(enum_comfort, F_(hot), F_(eco), F_(intelligent)) +MAKE_PSTR_LIST(enum_comfort1, F_(high_comfort), F_(eco)) MAKE_PSTR_LIST(enum_flow, F_(off), F_(flow), F_(bufferedflow), F_(buffer), F_(layeredbuffer)) MAKE_PSTR_LIST(enum_reset, F("-"), F_(maintenance), F_(error)) // MAKE_PSTR_LIST(enum_bool, F_(off), F_(on)) @@ -534,6 +536,7 @@ MAKE_PSTR_LIST(wwSelTempSingle, F("wwseltempsingle"), F("single charge temperatu MAKE_PSTR_LIST(wwSetTemp, F("wwsettemp"), F("set temperature")) MAKE_PSTR_LIST(wwType, F("wwtype"), F("type")) MAKE_PSTR_LIST(wwComfort, F("wwcomfort"), F("comfort")) +MAKE_PSTR_LIST(wwComfort1, F("wwcomfort1"), F("ww comfort1")) MAKE_PSTR_LIST(wwFlowTempOffset, F("wwflowtempoffset"), F("flow temperature offset")) MAKE_PSTR_LIST(wwMaxPower, F("wwmaxpower"), F("max power")) MAKE_PSTR_LIST(wwCircPump, F("wwcircpump"), F("circulation pump available"))