diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index 503df6fa1..a7d243deb 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -261,7 +261,7 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const register_device_value( TAG_BOILER_DATA_WW, &wwActivated_, DeviceValueType::BOOL, nullptr, FL_(wwActivated), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_activated)); register_device_value(TAG_BOILER_DATA_WW, &wwOneTime_, DeviceValueType::BOOL, nullptr, FL_(wwOneTime), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_onetime)); - register_device_value(TAG_BOILER_DATA_WW, &wwDisinfecting_, DeviceValueType::BOOL, nullptr, FL_(wwDisinfecting), DeviceValueUOM::BOOLEAN); + register_device_value(TAG_BOILER_DATA_WW, &wwDisinfect_, DeviceValueType::BOOL, nullptr, FL_(wwDisinfect), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_warmwater_disinfect)); register_device_value(TAG_BOILER_DATA_WW, &wwCharging_, DeviceValueType::BOOL, nullptr, FL_(wwCharging), DeviceValueUOM::BOOLEAN); register_device_value(TAG_BOILER_DATA_WW, &wwRecharging_, DeviceValueType::BOOL, nullptr, FL_(wwRecharging), DeviceValueUOM::BOOLEAN); register_device_value(TAG_BOILER_DATA_WW, &wwTempOK_, DeviceValueType::BOOL, nullptr, FL_(wwTempOK), DeviceValueUOM::BOOLEAN); @@ -471,7 +471,7 @@ void Boiler::process_UBAMonitorWW(std::shared_ptr telegram) { has_update(telegram->read_value(wWStarts_, 13, 3)); // force to 3 bytes has_update(telegram->read_bitvalue(wwOneTime_, 5, 1)); - has_update(telegram->read_bitvalue(wwDisinfecting_, 5, 2)); + has_update(telegram->read_bitvalue(wwDisinfect_, 5, 2)); has_update(telegram->read_bitvalue(wwCharging_, 5, 3)); has_update(telegram->read_bitvalue(wwRecharging_, 5, 4)); has_update(telegram->read_bitvalue(wwTempOK_, 5, 5)); @@ -611,7 +611,7 @@ void Boiler::process_UBAMonitorWWPlus(std::shared_ptr telegram) has_update(telegram->read_value(wWStarts_, 17, 3)); // force to 3 bytes has_update(telegram->read_bitvalue(wwOneTime_, 12, 2)); - has_update(telegram->read_bitvalue(wwDisinfecting_, 12, 3)); + has_update(telegram->read_bitvalue(wwDisinfect_, 12, 3)); has_update(telegram->read_bitvalue(wwCharging_, 12, 4)); has_update(telegram->read_bitvalue(wwRecharging_, 13, 4)); has_update(telegram->read_bitvalue(wwTempOK_, 13, 5)); @@ -1310,6 +1310,24 @@ bool Boiler::set_warmwater_circulation(const char * value, const int8_t id) { return true; } +// starting warm water disinfect, set to off seems not working +bool Boiler::set_warmwater_disinfect(const char * value, const int8_t id) { + bool v = false; + if (!Helpers::value2bool(value, v)) { + LOG_WARNING(F("Set warm water disinfect: Invalid value")); + return false; + } + + LOG_INFO(F("Setting warm water disinfect %s"), v ? "on" : "off"); + if (is_fetch(EMS_TYPE_UBAParameterWWPlus)) { + write_command(EMS_TYPE_UBAFlags, 0, (v ? 0x44 : 0x04), 0xE9); // not sure if this is in flags + } else { + write_command(EMS_TYPE_UBAFlags, 0, (v ? 0x44 : 0x04), 0x34); + } + + return true; +} + // configuration of warm water circulation pump bool Boiler::set_warmwater_circulation_pump(const char * value, const int8_t id) { bool v = false; diff --git a/src/devices/boiler.h b/src/devices/boiler.h index cbafb5ec4..264015b01 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -74,7 +74,7 @@ class Boiler : public EMSdevice { uint16_t wwStorageTemp2_; // warm water storage temp 2 uint8_t wwActivated_; // Warm Water activated uint8_t wwOneTime_; // Warm Water one time function on/off - uint8_t wwDisinfecting_; // Warm Water disinfection on/off + uint8_t wwDisinfect_; // Warm Water disinfection on/off uint8_t wwCharging_; // Warm Water charging on/off uint8_t wwRecharging_; // Warm Water recharge on/off uint8_t wwTempOK_; // Warm Water temperature ok on/off @@ -229,6 +229,7 @@ class Boiler : public EMSdevice { bool set_warmwater_activated(const char * value, const int8_t id); bool set_tapwarmwater_activated(const char * value, const int8_t id); bool set_warmwater_onetime(const char * value, const int8_t id); + bool set_warmwater_disinfect(const char * value, const int8_t id); bool set_warmwater_circulation(const char * value, const int8_t id); bool set_warmwater_circulation_pump(const char * value, const int8_t id); bool set_warmwater_circulation_mode(const char * value, const int8_t id); diff --git a/src/locale_EN.h b/src/locale_EN.h index 48fb642b1..083a59716 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -499,7 +499,7 @@ MAKE_PSTR_LIST(wwStorageTemp1, F("wwstoragetemp1"), F("storage intern temperatur MAKE_PSTR_LIST(wwStorageTemp2, F("wwstoragetemp2"), F("storage extern temperature")) MAKE_PSTR_LIST(wwActivated, F("wwactivated"), F("activated")) MAKE_PSTR_LIST(wwOneTime, F("wwonetime"), F("one time charging")) -MAKE_PSTR_LIST(wwDisinfecting, F("wwdisinfecting"), F("disinfecting")) +MAKE_PSTR_LIST(wwDisinfect, F("wwdisinfect"), F("disinfection")) MAKE_PSTR_LIST(wwCharging, F("wwcharging"), F("charging")) MAKE_PSTR_LIST(wwRecharging, F("wwrecharging"), F("recharging")) MAKE_PSTR_LIST(wwTempOK, F("wwtempok"), F("temperature ok")) @@ -514,7 +514,7 @@ MAKE_PSTR_LIST(wwHystOn, F("wwhyston"), F("hysteresis on temperature")) MAKE_PSTR_LIST(wwHystOff, F("wwhystoff"), F("hysteresis off temperature")) MAKE_PSTR_LIST(wwProgMode, F("wwprogmode"), F("program mode")) MAKE_PSTR_LIST(wwCircProg, F("wwcircprog"), F("circulation program mode")) -MAKE_PSTR_LIST(wwDisinfect, F("wwdisinfect"), F("disinfection")) +// MAKE_PSTR_LIST(wwDisinfect, F("wwdisinfect"), F("disinfection")) // same as in boiler MAKE_PSTR_LIST(wwDisinfectDay, F("wwdisinfectday"), F("disinfection day")) MAKE_PSTR_LIST(wwDisinfectHour, F("wwdisinfecthour"), F("disinfection hour")) MAKE_PSTR_LIST(wwMaxTemp, F("wwmaxtemp"), F("maximum temperature"))