From 95f0478fa7ad15a83b42205a3412498b84975571 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Tue, 30 Jul 2024 15:18:01 +0200 Subject: [PATCH] add switchProgMode #1903 --- CHANGELOG_LATEST.md | 1 + src/devices/thermostat.cpp | 18 +++++++++++++++++- src/devices/thermostat.h | 2 ++ src/locale_common.h | 1 + src/locale_translations.h | 2 ++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index 3caf2ce47..a11958fb5 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -34,6 +34,7 @@ - RT800 remote emulation [#1867](https://github.com/emsesp/EMS-ESP32/issues/1867) - RC310 cooling parameters [#1857](https://github.com/emsesp/EMS-ESP32/issues/1857) - command `api/device/entities` [#1897](https://github.com/emsesp/EMS-ESP32/issues/1897) +- switchprogmode [#1903] ## Fixed diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index e086adf91..3400b4c16 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -1106,7 +1106,8 @@ void Thermostat::process_RC300Set(std::shared_ptr telegram) { has_enumupdate(telegram, hc->reducemode, 5, 1); // 1-outdoor temp threshold, 2-room temp threshold, 3-reduced mode has_update(telegram, hc->reducetemp, 9); has_update(telegram, hc->noreducetemp, 12); - has_update(telegram, hc->remoteseltemp, 17); // see https://github.com/emsesp/EMS-ESP32/issues/590 + has_enumupdate(telegram, hc->switchProgMode, 13, 1); // 1-level, 2-absolute + has_update(telegram, hc->remoteseltemp, 17); // see https://github.com/emsesp/EMS-ESP32/issues/590 has_update(telegram, hc->boost, 23); has_update(telegram, hc->boosttime, 24); has_update(telegram, hc->cooling, 28); @@ -2280,6 +2281,19 @@ bool Thermostat::set_cooloffdelay(const char * value, const int8_t id) { return true; } +bool Thermostat::set_switchProgMode(const char * value, const int8_t id) { + auto hc = heating_circuit(id); + if (hc == nullptr) { + return false; + } + uint8_t set; + if (!Helpers::value2enum(value, set, FL_(enum_switchProgMode))) { + return false; + } + write_command(set_typeids[hc->hc()], 13, set + 1, set_typeids[hc->hc()]); + return true; +} + // sets the thermostat ww circulation working mode, where mode is a string bool Thermostat::set_wwcircmode(const char * value, const int8_t id) { uint8_t dhw = id2dhw(id); @@ -4511,6 +4525,8 @@ void Thermostat::register_device_values_hc(std::shared_ptrcoolstart, DeviceValueType::UINT8, FL_(coolstart), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_coolstart), 20, 35); register_device_value(tag, &hc->coolondelay, DeviceValueType::UINT8, FL_(coolondelay), DeviceValueUOM::HOURS, MAKE_CF_CB(set_coolondelay), 1, 48); register_device_value(tag, &hc->cooloffdelay, DeviceValueType::UINT8, FL_(cooloffdelay), DeviceValueUOM::HOURS, MAKE_CF_CB(set_cooloffdelay), 1, 48); + register_device_value( + tag, &hc->switchProgMode, DeviceValueType::ENUM, FL_(enum_switchProgMode), FL_(control), DeviceValueUOM::NONE, MAKE_CF_CB(set_switchProgMode)); break; case EMSdevice::EMS_DEVICE_FLAG_CRF: diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index afb7097f2..aa91d7113 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -86,6 +86,7 @@ class Thermostat : public EMSdevice { uint8_t climate; uint8_t switchonoptimization; uint8_t statusbyte; // from RC300monitor + uint8_t switchProgMode; // RC 10 uint8_t reducehours; // night reduce duration uint16_t reduceminutes; // remaining minutes to night->day @@ -655,6 +656,7 @@ class Thermostat : public EMSdevice { bool set_cooling(const char * value, const int8_t id); bool set_coolondelay(const char * value, const int8_t id); bool set_cooloffdelay(const char * value, const int8_t id); + bool set_switchProgMode(const char * value, const int8_t id); }; } // namespace emsesp diff --git a/src/locale_common.h b/src/locale_common.h index 0f28f5a17..db6620621 100644 --- a/src/locale_common.h +++ b/src/locale_common.h @@ -349,6 +349,7 @@ MAKE_ENUM(enum_control1, FL_(rc310), FL_(rc200), FL_(rc100), FL_(rc100h), FL_(tc MAKE_ENUM(enum_control2, FL_(off), FL_(dash), FL_(rc100), FL_(rc100h), FL_(dash), FL_(rc120rf), FL_(rc220), FL_(single)) // BC400 MAKE_ENUM(enum_switchmode, FL_(off), FL_(eco), FL_(comfort), FL_(heat)) +MAKE_ENUM(enum_switchProgMode, FL_(level), FL_(absolute)) MAKE_ENUM(enum_dayOfWeek, FL_(day_mo), FL_(day_tu), FL_(day_we), FL_(day_th), FL_(day_fr), FL_(day_sa), FL_(day_su), FL_(all)) MAKE_ENUM(enum_progMode2, FL_(own_1), FL_(family), FL_(morning), FL_(evening), FL_(am), FL_(pm), FL_(midday), FL_(singles), FL_(seniors), FL_(new), FL_(own_2)) diff --git a/src/locale_translations.h b/src/locale_translations.h index baf5c6100..6b93877d2 100644 --- a/src/locale_translations.h +++ b/src/locale_translations.h @@ -279,6 +279,8 @@ MAKE_WORD_TRANSLATION(functioning_mode, "functioning mode", "Funktionsweise", "f MAKE_WORD_TRANSLATION(unmixed, "unmixed", "ungemischt", "", "", "niezmieszany", "", "", "", "", "") // TODO translate MAKE_WORD_TRANSLATION(unmixedIPM, "unmixed IPM", "ungemischt IPM", "", "", "niezmieszany IPM", "", "", "", "", "") // TODO translate MAKE_WORD_TRANSLATION(mixed, "mixed IPM", "gemischt IPM", "", "", "zmieszany IPM", "", "", "", "", "") // TODO translate +MAKE_WORD_TRANSLATION(level, "level", "Level") // TODO translate +MAKE_WORD_TRANSLATION(absolute, "absolute", "Absolut") // TODO translate // mixer MAKE_WORD_TRANSLATION(stopped, "stopped", "gestoppt", "gestopt", "stoppad", "zatrzymany", "stoppet", "arrêté", "durdu", "fermato", "zastavený")