From 94c45891b4477768c1152eb0c990e699e3cc3b72 Mon Sep 17 00:00:00 2001 From: tp1de Date: Tue, 24 May 2022 19:51:37 +0200 Subject: [PATCH] add nofrostmode1 for RC310 --- src/devices/thermostat.cpp | 19 +++++++++++++++++++ src/devices/thermostat.h | 2 ++ src/locale_EN.h | 3 +++ 3 files changed, 24 insertions(+) diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index e9d68fcee..7a51cf30f 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1010,6 +1010,7 @@ void Thermostat::process_RC300Curve(std::shared_ptr telegram) { has_update(telegram, hc->controlmode, 0); // 1-outdoor, 2-simple, 3-MPC, 4-room, 5-power, 6-const has_update(telegram, hc->heatingtype, 1); // 1=radiator, 2=convector, 3=floor + has_enumupdate(telegram, hc->nofrostmode1, 5, 1); // 1-room, 2-outdoor, 3- room & outdoor has_update(telegram, hc->nofrosttemp, 6); if (hc->heatingtype < 3) { @@ -2458,6 +2459,22 @@ bool Thermostat::set_nofrostmode(const char * value, const int8_t id) { return true; } +bool Thermostat::set_nofrostmode1(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; + } + + uint8_t set = 0xFF; + if (!Helpers::value2enum(value, set, FL_(enum_nofrostmode1))) { + return false; + } + + write_command(curve_typeids[hc->hc()], 5, set + 1, curve_typeids[hc->hc()]); + return true; +} + // sets the thermostat heatingtype for RC35, RC300 bool Thermostat::set_heatingtype(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; @@ -3862,6 +3879,8 @@ void Thermostat::register_device_values_hc(std::shared_ptrroominfl_factor, DeviceValueType::UINT, FL_(div10), FL_(roominfl_factor), DeviceValueUOM::NONE, MAKE_CF_CB(set_roominfl_factor)); register_device_value(tag, &hc->curroominfl, DeviceValueType::SHORT, FL_(div10), FL_(curroominfl), DeviceValueUOM::DEGREES_R); + register_device_value( + tag, &hc->nofrostmode1, DeviceValueType::ENUM, FL_(enum_nofrostmode1), FL_(nofrostmode1), DeviceValueUOM::NONE, MAKE_CF_CB(set_nofrostmode1)); register_device_value(tag, &hc->nofrosttemp, DeviceValueType::INT, nullptr, FL_(nofrosttemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_nofrosttemp)); register_device_value(tag, &hc->targetflowtemp, DeviceValueType::UINT, nullptr, FL_(targetflowtemp), DeviceValueUOM::DEGREES); register_device_value( diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index fa214cf24..d9ea04b61 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -65,6 +65,7 @@ class Thermostat : public EMSdevice { uint8_t reducemode; uint8_t reducemode1; // for RC310 uint8_t nofrostmode; + uint8_t nofrostmode1; // for RC310 uint8_t program; uint8_t controlmode; uint8_t control; @@ -414,6 +415,7 @@ class Thermostat : public EMSdevice { bool set_vacreducetemp(const char * value, const int8_t id); bool set_vacreducemode(const char * value, const int8_t id); bool set_nofrostmode(const char * value, const int8_t id); + bool set_nofrostmode1(const char * value, const int8_t id); bool set_remotetemp(const char * value, const int8_t id); bool set_roominfluence(const char * value, const int8_t id); diff --git a/src/locale_EN.h b/src/locale_EN.h index a375976cc..9d53f60ad 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -313,6 +313,7 @@ MAKE_PSTR_WORD(winter) MAKE_PSTR_WORD(outdoor) MAKE_PSTR_WORD(mpc) MAKE_PSTR_WORD(room) +MAKE_PSTR_WORD(room_outdoor) MAKE_PSTR_WORD(power) MAKE_PSTR_WORD(constant) MAKE_PSTR_WORD(simple) @@ -385,6 +386,7 @@ MAKE_PSTR_LIST(enum_modetype5, F_(off), F_(on)) MAKE_PSTR_LIST(enum_reducemode, F_(nofrost), F_(reduce), F_(room), F_(outdoor)) MAKE_PSTR_LIST(enum_reducemode1, F_(outdoor), F_(room), F_(reduce)) // RC310 values: 1-3 MAKE_PSTR_LIST(enum_nofrostmode, F_(off), F_(room), F_(outdoor)) +MAKE_PSTR_LIST(enum_nofrostmode1, F_(room), F_(outdoor), F_(room_outdoor)) MAKE_PSTR_LIST(enum_controlmode, F_(off), F_(optimized), F_(simple), F_(mpc), F_(room), F_(power), F_(constant)) MAKE_PSTR_LIST(enum_controlmode2, F_(outdoor), F_(room)) @@ -666,6 +668,7 @@ MAKE_PSTR_LIST(reducetemp, F("reducetemp"), F("off/reduce switch temperature")) MAKE_PSTR_LIST(vacreducetemp, F("vacreducetemp"), F("vacations off/reduce switch temperature")) MAKE_PSTR_LIST(vacreducemode, F("vacreducemode"), F("vacations reduce mode")) MAKE_PSTR_LIST(nofrostmode, F("nofrostmode"), F("nofrost mode")) +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"))