diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 3a93bd74c..f4b7ddf98 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -4,6 +4,7 @@ ### Added +- Added switchonoptimization for RC310 - Added enum_controlmode for RC310 (new enum list) - Added nofrostmode, reducemode, reducetemp & noreducetemp for RC310 - Added emergencyops and emergencytemp, wwmaxtemp, wwflowtempoffset and wwcomfort1 for RC310 diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 7ce7cdb6b..d4ce46fec 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1010,6 +1010,7 @@ void Thermostat::process_RC300Curve(std::shared_ptr telegram) { has_enumupdate(telegram, hc->controlmode, 0, 1); // 1-weather_compensated, 2-outside_footpoint,3-n/a, 4-room -- RC310 has_update(telegram, hc->heatingtype, 1); // 1=radiator, 2=convector, 3=floor + has_update(telegram, hc->switchonoptimization, 4); has_enumupdate(telegram, hc->nofrostmode, 5, 1); // 1-room, 2-outdoor, 3- room & outdoor has_update(telegram, hc->nofrosttemp, 6); @@ -2387,6 +2388,24 @@ bool Thermostat::set_fastheatup(const char * value, const int8_t id) { return true; } +// Set switchonoptimization RC310 +bool Thermostat::set_switchonoptimization(const char * value, const int8_t id) { +uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; + std::shared_ptr hc = heating_circuit(hc_num); + if (hc == nullptr) { + return false; + } + + bool b = false; + + if (!Helpers::value2bool(value, b)) { + return false; + } + write_command(curve_typeids[hc->hc()], 4, b ? 0xFF : 0x00, curve_typeids[hc->hc()]); + return true; +} + + // sets the thermostat reducemode for RC35 and RC310 bool Thermostat::set_reducemode(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; @@ -3881,6 +3900,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrtempautotemp, DeviceValueType::INT, FL_(div2), FL_(tempautotemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_tempautotemp), -1, 30); register_device_value(tag, &hc->fastHeatup, DeviceValueType::UINT, nullptr, FL_(fastheatup), DeviceValueUOM::PERCENT, MAKE_CF_CB(set_fastheatup)); + register_device_value(tag, &hc->switchonoptimization, DeviceValueType::BOOL, nullptr, FL_(switchonoptimization), DeviceValueUOM::NONE, MAKE_CF_CB(set_switchonoptimization)); register_device_value(tag, &hc->reducemode, DeviceValueType::ENUM, FL_(enum_reducemode1), FL_(reducemode), DeviceValueUOM::NONE, MAKE_CF_CB(set_reducemode)); register_device_value(tag, &hc->noreducetemp, DeviceValueType::INT, nullptr, FL_(noreducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_noreducetemp)); register_device_value(tag, &hc->reducetemp, DeviceValueType::INT, nullptr, FL_(reducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_reducetemp)); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index 516af32c8..bc1d3483a 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -80,6 +80,7 @@ class Thermostat : public EMSdevice { char switchtime1[16]; char switchtime2[16]; uint8_t climate; + uint8_t switchonoptimization; // RC 10 uint8_t reducehours; // night reduce duration @@ -425,6 +426,7 @@ class Thermostat : public EMSdevice { bool set_controlmode(const char * value, const int8_t id); bool set_wwprio(const char * value, const int8_t id); bool set_fastheatup(const char * value, const int8_t id); + bool set_switchonoptimization(const char * value, const int8_t id); // set functions - these don't use the id/hc, the parameters are ignored bool set_wwmode(const char * value, const int8_t id); diff --git a/src/locale_EN.h b/src/locale_EN.h index 8ed5594a2..0c1ae03e5 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -672,6 +672,7 @@ MAKE_PSTR_LIST(nofrostmode1, F("nofrostmode1"), F("nofrost mode")) // RC310 MAKE_PSTR_LIST(remotetemp, F("remotetemp"), F("room temperature from remote")) MAKE_PSTR_LIST(reducehours, F("reducehours"), F("duration for nighttemp")) MAKE_PSTR_LIST(reduceminutes, F("reduceminutes"), F("remaining time for nightmode")) +MAKE_PSTR_LIST(switchonoptimization, F("switchonoptimization"), F("switch-on optimization")) // heatpump MAKE_PSTR_LIST(airHumidity, F("airhumidity"), F("relative air humidity"))