diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index eb97c89c1..b61421348 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -424,6 +424,15 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const MAKE_CF_CB(set_ww_maxpower), 0, 130); + register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, + &wwMaxTemp_, + DeviceValueType::UINT, + nullptr, + FL_(wwMaxTemp), + DeviceValueUOM::DEGREES, + MAKE_CF_CB(set_ww_maxtemp), + 0, + 70); register_device_value(DeviceValueTAG::TAG_BOILER_DATA_WW, &wwCircPump_, DeviceValueType::BOOL, @@ -794,6 +803,7 @@ 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); + has_update(telegram, wwMaxTemp_, 20); has_update(telegram, wwChargeOptimization_, 25); uint8_t wwComfort1 = EMS_VALUE_UINT_NOTSET; @@ -1411,6 +1421,18 @@ bool Boiler::set_ww_maxpower(const char * value, const int8_t id) { return true; } +// set dhw maximum temperature +bool Boiler::set_ww_maxtemp(const char * value, const int8_t id) { + int v = 0; + if (!Helpers::value2number(value, v)) { + return false; + } + + write_command(EMS_TYPE_UBAParameterWWPlus, 20, v, EMS_TYPE_UBAParameterWWPlus); + + return true; +} + // set min pump modulation bool Boiler::set_min_pump(const char * value, const int8_t id) { int v = 0; diff --git a/src/devices/boiler.h b/src/devices/boiler.h index e02465905..b36ad2694 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -51,39 +51,40 @@ class Boiler : public EMSdevice { static constexpr uint16_t EMS_TYPE_UBAEnergySupplied = 0x494; // ww - uint8_t wwSetTemp_; // DHW set temperature - uint8_t wwSelTemp_; // DHW selected temperature - uint8_t wwSelTempLow_; // DHW lower selected temperature - uint8_t wwSelTempOff_; // DHW selected temperature for off position - 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 wwChargeOptimization_; // DHW charge optimization - uint8_t wwDisinfectionTemp_; // DHW disinfection temperature to prevent infection - uint8_t wwCircMode_; // DHW circulation pump mode - uint8_t wwCirc_; // Circulation on/off - uint16_t wwCurTemp_; // DHW current temperature - uint16_t wwCurTemp2_; // DHW current temperature storage - uint8_t wwCurFlow_; // DHW current flow temp in l/min - uint16_t wwStorageTemp1_; // DHW storage temp 1 - uint16_t wwStorageTemp2_; // DHW storage temp 2 - uint8_t wwActivated_; // DHW activated - uint8_t wwOneTime_; // DHW one time function on/off - uint8_t wwDisinfect_; // DHW disinfection on/off - uint8_t wwCharging_; // DHW charging on/off - uint8_t wwRecharging_; // DHW recharge on/off - uint8_t wwTempOK_; // DHW temperature ok on/off - uint8_t wwActive_; // - uint8_t ww3wayValve_; // 3-way valve on WW - uint8_t wwSetPumpPower_; // ww pump speed/power? - uint8_t wwFlowTempOffset_; // Boiler offset for ww heating - uint8_t wwMaxPower_; // DHW maximum power - uint32_t wwStarts_; // DHW starts - uint32_t wwStarts2_; // DHW control starts - uint32_t wwWorkM_; // DHW minutes + uint8_t wwSetTemp_; // DHW set temperature + uint8_t wwSelTemp_; // DHW selected temperature + uint8_t wwSelTempLow_; // DHW lower selected temperature + uint8_t wwSelTempOff_; // DHW selected temperature for off position + 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 wwChargeOptimization_; // DHW charge optimization + uint8_t wwDisinfectionTemp_; // DHW disinfection temperature to prevent infection + uint8_t wwCircMode_; // DHW circulation pump mode + uint8_t wwCirc_; // Circulation on/off + uint16_t wwCurTemp_; // DHW current temperature + uint16_t wwCurTemp2_; // DHW current temperature storage + uint8_t wwCurFlow_; // DHW current flow temp in l/min + uint16_t wwStorageTemp1_; // DHW storage temp 1 + uint16_t wwStorageTemp2_; // DHW storage temp 2 + uint8_t wwActivated_; // DHW activated + uint8_t wwOneTime_; // DHW one time function on/off + uint8_t wwDisinfect_; // DHW disinfection on/off + uint8_t wwCharging_; // DHW charging on/off + uint8_t wwRecharging_; // DHW recharge on/off + uint8_t wwTempOK_; // DHW temperature ok on/off + uint8_t wwActive_; // + uint8_t ww3wayValve_; // 3-way valve on WW + uint8_t wwSetPumpPower_; // ww pump speed/power? + uint8_t wwFlowTempOffset_; // Boiler offset for ww heating + uint8_t wwMaxPower_; // DHW maximum power + uint8_t wwMaxTemp_; // DHW maximum temperature + uint32_t wwStarts_; // DHW starts + uint32_t wwStarts2_; // DHW control starts + uint32_t wwWorkM_; // DHW minutes int8_t wwHystOn_; int8_t wwHystOff_; uint8_t wwTapActivated_; // maintenance-mode to switch DHW off @@ -255,6 +256,7 @@ class Boiler : public EMSdevice { bool set_ww_temp_single(const char * value, const int8_t id); bool set_ww_disinfect_temp(const char * value, const int8_t id); bool set_ww_maxpower(const char * value, const int8_t id); + bool set_ww_maxtemp(const char * value, const int8_t id); bool set_ww_flowTempOffset(const char * value, const int8_t id); bool set_ww_chargeOptimization(const char * value, const int8_t id); bool set_flow_temp(const char * value, const int8_t id);