From 1311cad9131293876917de32c1264f5809cb1d26 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Mon, 23 Aug 2021 16:14:06 +0200 Subject: [PATCH] add some boiler and thermostat parameters --- src/devices/boiler.cpp | 33 ++++++++ src/devices/boiler.h | 5 ++ src/devices/thermostat.cpp | 166 ++++++++++++++++++++++++++++++++++++- src/devices/thermostat.h | 21 +++++ src/locale_EN.h | 26 +++++- 5 files changed, 243 insertions(+), 8 deletions(-) diff --git a/src/devices/boiler.cpp b/src/devices/boiler.cpp index fd514fc05..25b27361a 100644 --- a/src/devices/boiler.cpp +++ b/src/devices/boiler.cpp @@ -193,6 +193,9 @@ Boiler::Boiler(uint8_t device_type, int8_t device_id, uint8_t product_id, const // warm water - boiler_data_ww topic register_device_value(TAG_BOILER_DATA_WW, &wwSelTemp_, DeviceValueType::UINT, nullptr, FL_(wwSelTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_warmwater_temp)); register_device_value(TAG_BOILER_DATA_WW, &wwSetTemp_, DeviceValueType::UINT, nullptr, FL_(wwSetTemp), DeviceValueUOM::DEGREES); + register_device_value(TAG_BOILER_DATA_WW, &wwSelTempLow_, DeviceValueType::UINT, nullptr, FL_(wwSelTempLow), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_warmwater_temp_low)); + register_device_value(TAG_BOILER_DATA_WW, &wwSelTempOff_, DeviceValueType::UINT, nullptr, FL_(wwSelTempOff), DeviceValueUOM::DEGREES); + register_device_value(TAG_BOILER_DATA_WW, &wwSelTempSingle_, DeviceValueType::UINT, nullptr, FL_(wwSelTempSingle), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_warmwater_temp_single)); register_device_value(TAG_BOILER_DATA_WW, &wwType_, DeviceValueType::ENUM, FL_(enum_flow), FL_(wwType), DeviceValueUOM::NONE); register_device_value( TAG_BOILER_DATA_WW, &wwComfort_, DeviceValueType::ENUM, FL_(enum_comfort), FL_(wwComfort), DeviceValueUOM::LIST, MAKE_CF_CB(set_warmwater_mode)); @@ -563,6 +566,9 @@ void Boiler::process_UBAParameterWWPlus(std::shared_ptr telegram // has_update(telegram->read_value(wWSelTemp_, 6)); // settings, status in E9 has_update(telegram->read_value(wwHystOn_, 7)); has_update(telegram->read_value(wwHystOff_, 8)); + has_update(telegram->read_value(wwSelTempOff_, 0)); // confusing description in #96, hopefully this is right + has_update(telegram->read_value(wwSelTempSingle_, 16)); + has_update(telegram->read_value(wwSelTempLow_, 18)); } // 0xE9 - WW monitor ems+ @@ -778,6 +784,32 @@ bool Boiler::set_warmwater_temp(const char * value, const int8_t id) { return true; } +// Set the lower warm water temperature 0xEA +bool Boiler::set_warmwater_temp_low(const char * value, const int8_t id) { + int v = 0; + if (!Helpers::value2number(value, v)) { + LOG_WARNING(F("Set boiler lower warm water temperature: Invalid value")); + return false; + } + + LOG_INFO(F("Setting boiler lower warm water temperature to %d C"), v); + write_command(EMS_TYPE_UBAParameterWWPlus, 18, v, EMS_TYPE_UBAParameterWWPlus); + return true; +} + +// Set the warm water single charge temperature 0xEA +bool Boiler::set_warmwater_temp_single(const char * value, const int8_t id) { + int v = 0; + if (!Helpers::value2number(value, v)) { + LOG_WARNING(F("Set single charge warm water temperature: Invalid value")); + return false; + } + + LOG_INFO(F("Setting single charge warm water temperature to %d C"), v); + write_command(EMS_TYPE_UBAParameterWWPlus, 16, v, EMS_TYPE_UBAParameterWWPlus); + return true; +} + // Set the warm water disinfection temperature bool Boiler::set_disinfect_temp(const char * value, const int8_t id) { int v = 0; @@ -795,6 +827,7 @@ bool Boiler::set_disinfect_temp(const char * value, const int8_t id) { return true; } + // flow temp bool Boiler::set_flow_temp(const char * value, const int8_t id) { int v = 0; diff --git a/src/devices/boiler.h b/src/devices/boiler.h index b183ebae3..0b8b85fbb 100644 --- a/src/devices/boiler.h +++ b/src/devices/boiler.h @@ -57,6 +57,9 @@ class Boiler : public EMSdevice { // ww uint8_t wwSetTemp_; // Warm Water set temperature uint8_t wwSelTemp_; // Warm Water selected temperature + uint8_t wwSelTempLow_; // Warm Water lower selected temperature + uint8_t wwSelTempOff_; // Warm Water selected temperature for off position + uint8_t wwSelTempSingle_; // Warm Water 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 wwCircPump_; // Warm Water circulation pump available @@ -205,6 +208,8 @@ class Boiler : public EMSdevice { bool set_warmwater_circulation_pump(const char * value, const int8_t id); bool set_warmwater_circulation_mode(const char * value, const int8_t id); bool set_warmwater_temp(const char * value, const int8_t id); + bool set_warmwater_temp_low(const char * value, const int8_t id); + bool set_warmwater_temp_single(const char * value, const int8_t id); bool set_disinfect_temp(const char * value, const int8_t id); bool set_warmwater_maxpower(const char * value, const int8_t id); bool set_wWFlowTempOffset(const char * value, const int8_t id); diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index 895eebaf1..49fcc1f48 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -762,12 +762,20 @@ void Thermostat::process_IBASettings(std::shared_ptr telegram) { has_update(telegram->read_value(ibaBuildingType_, 6)); // building type: 0 = light, 1 = medium, 2 = heavy has_update(telegram->read_value(ibaMinExtTemperature_, 5)); // min ext temp for heating curve, in deg., 0xF6=-10, 0x0 = 0, 0xFF=-1 has_update(telegram->read_value(ibaClockOffset_, 12)); // offset (in sec) to clock, 0xff = -1 s, 0x02 = 2 s + has_update(telegram->read_value(ibaDamping_, 21)); // damping 0-off, 0xff-on } // Settings WW 0x37 - RC35 void Thermostat::process_RC35wwSettings(std::shared_ptr telegram) { - has_update(telegram->read_value(wwMode_, 2)); // 0 off, 1-on, 2-auto - has_update(telegram->read_value(wwCircMode_, 3)); // 0 off, 1-on, 2-auto + has_update(telegram->read_value(wwProgMode_, 0)); // 0-like hc, 0xFF own prog + has_update(telegram->read_value(wwCircProg_, 1)); // 0-like hc, 0xFF own prog + has_update(telegram->read_value(wwMode_, 2)); // 0 off, 1-on, 2-auto + has_update(telegram->read_value(wwCircMode_, 3)); // 0 off, 1-on, 2-auto + has_update(telegram->read_value(wwDisinfect_, 4)); // 0-off, 0xFF on + has_update(telegram->read_value(wwDisinfectDay_, 5)); // 0-6 Day of week, 7 every day + has_update(telegram->read_value(wwDisinfectHour_, 6)); + has_update(telegram->read_value(wwMaxTemp_, 8)); // Limiter 60 degrees + has_update(telegram->read_value(wwOneTimeKey_, 9)); // 0-off, 0xFF on } // type 0x6F - FR10/FR50/FR100/FR110/FR120 Junkers @@ -902,8 +910,9 @@ void Thermostat::process_RC300WWmode(std::shared_ptr telegram) { // circulation pump see: https://github.com/Th3M3/buderus_ems-wiki/blob/master/Einstellungen%20der%20Bedieneinheit%20RC310.md has_update(telegram->read_value(wwCircPump_, 1)); // FF=off, 0=on ? - has_update(telegram->read_value(wwMode_, 2)); // 0=off, 1=low, 2=high, 3=auto, 4=own prog - has_update(telegram->read_value(wwCircMode_, 3)); // 0=off, 1=on, 2=auto, 4=own? + has_update(telegram->read_value(wwMode_, 2)); // 0=off, 1=low, 2=high, 3=auto, 4=own prog + has_update(telegram->read_value(wwCircMode_, 3)); // 0=off, 1=on, 2=auto, 4=own? + has_update(telegram->read_value(wwChargeDuration_, 10)); // value in steps of 15 min } // types 0x31D and 0x31E @@ -1223,6 +1232,18 @@ bool Thermostat::set_building(const char * value, const int8_t id) { return false; } +// 0xA5 - Set the building settings +bool Thermostat::set_damping(const char * value, const int8_t id) { + bool dmp; + if (Helpers::value2bool(value, dmp)) { + LOG_INFO(F("Setting damping %s"), dmp ? "on" : "off"); + write_command(EMS_TYPE_IBASettings, 21, dmp ? 0xFF : 0, EMS_TYPE_IBASettings); + return true; + } + LOG_WARNING(F("Set damping: Invalid value")); + return false; +} + // 0xA5 Set the language settings bool Thermostat::set_language(const char * value, const int8_t id) { uint8_t lg = 0; @@ -1303,6 +1324,38 @@ bool Thermostat::set_wwtemplow(const char * value, const int8_t id) { return true; } +// Set ww charge duration in steps of 15 min, ems+ +bool Thermostat::set_wwchargeduration(const char * value, const int8_t id) { + uint8_t t = 0xFF; + if (!Helpers::value2enum(value, t, FL_(enum_wwChargeDuration))) { + LOG_WARNING(F("Set warm water charge duration: Invalid value")); + return false; + } + LOG_INFO(F("Setting warm water charge duration to %d min"), t * 15); + write_command(0x2F5, 10, t, 0x02F5); + return true; +} + +// set ww prio +bool Thermostat::set_wwprio(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) { + LOG_WARNING(F("Set wwprio: Heating Circuit %d not found or activated for device ID 0x%02X"), hc_num, device_id()); + return false; + } + bool b; + if (!Helpers::value2bool(value, b)) { + LOG_WARNING(F("Set wwprio: Invalid value")); + return false; + } + + LOG_INFO(F("Setting wwprio: %s"), b ? "on" : "off"); + write_command(set_typeids[hc->hc_num() - 1], 21, b ? 0xFF : 0x00, set_typeids[hc->hc_num() - 1]); + + return true; +} + // Set ww onetime RC300, ems+ bool Thermostat::set_wwonetime(const char * value, const int8_t id) { bool b = false; @@ -1338,6 +1391,90 @@ bool Thermostat::set_wwcircmode(const char * value, const int8_t id) { return true; } +bool Thermostat::set_wwDisinfect(const char * value, const int8_t id) { + bool b = false; + if (!Helpers::value2bool(value, b)) { + LOG_WARNING(F("Set warm water disinfect: Invalid value")); + return false; + } + LOG_INFO(F("Setting warm water disinfect to %s"), b ? F_(on) : F_(off)); + write_command(0x37, 4, b ? 0xFF : 0x00, 0x37); + return true; +} +bool Thermostat::set_wwDisinfectDay(const char * value, const int8_t id) { + uint8_t set = 0xFF; + if (!Helpers::value2enum(value, set, FL_(enum_wwDisinfectDay))) { + LOG_WARNING(F("Set warm water disinfection day: Invalid day")); + return false; + } + LOG_INFO(F("Setting warm water disinfection day to %s"), value); + write_command(0x37, 5, set, 0x37); + return true; +} + +bool Thermostat::set_wwDisinfectHour(const char * value, const int8_t id) { + int set; + if (!Helpers::value2number(value, set)) { + LOG_WARNING(F("Set warm water disinfection hour: Invalid")); + return false; + } + if (set < 0 || set > 23) { + LOG_WARNING(F("Set warm water disinfection hour: Invalid")); + return false; + } + LOG_INFO(F("Setting warm water disinfection hour to %s"), value); + write_command(0x37, 6, set, 0x37); + return true; +} + +bool Thermostat::set_wwMaxTemp(const char * value, const int8_t id) { + int t = 0; + if (!Helpers::value2number(value, t)) { + LOG_WARNING(F("Set warm water max temperature: Invalid value")); + return false; + } + if (t < 0 || t > 90) { + LOG_WARNING(F("Set warm water max temperature: Invalid value")); + return false; + } + LOG_INFO(F("Setting warm water max temperature to %d C"), t); + write_command(0x37, 8, t, 0x37); + return true; +} + +bool Thermostat::set_wwOneTimeKey(const char * value, const int8_t id) { + bool b = false; + if (!Helpers::value2bool(value, b)) { + LOG_WARNING(F("Set warm water loading one time key: Invalid value")); + return false; + } + LOG_INFO(F("Setting warm water loading one time key to %s"), value); + write_command(0x37, 9, b ? 0xFF : 0x00, 0x37); + return true; +} + +bool Thermostat::set_wwProgMode(const char * value, const int8_t id) { + uint8_t set = 0xFF; + if (!Helpers::value2enum(value, set, FL_(enum_wwProgMode))) { + LOG_WARNING(F("Set warm water program mode: Invalid mode")); + return false; + } + LOG_INFO(F("Setting warm water program mode to %s"), value); + write_command(0x37, 0, set ? 0xFF : 0x00, 0x37); + return true; +} + +bool Thermostat::set_wwCircProg(const char * value, const int8_t id) { + uint8_t set = 0xFF; + if (!Helpers::value2enum(value, set, FL_(enum_wwProgMode))) { + LOG_WARNING(F("Set warm water circulation program mode: Invalid mode")); + return false; + } + LOG_INFO(F("Setting warm water circulation program mode to %s"), value); + write_command(0x37, 1, set ? 0xFF : 0x00, 0x37); + return true; +} + // set the holiday as string dd.mm.yyyy-dd.mm.yyyy bool Thermostat::set_holiday(const char * value, const int8_t id) { uint8_t hc_num = (id == -1) ? AUTO_HEATING_CIRCUIT : id; @@ -2188,6 +2325,13 @@ void Thermostat::register_device_values() { TAG_THERMOSTAT_DATA, &wwSetTempLow_, DeviceValueType::UINT, nullptr, FL_(wwSetTempLow), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_wwtemplow)); register_device_value( TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode), FL_(wwCircMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwcircmode)); + register_device_value(TAG_THERMOSTAT_DATA, + &wwChargeDuration_, + DeviceValueType::ENUM, + FL_(enum_wwChargeDuration), + FL_(wwChargeDuration), + DeviceValueUOM::LIST, + MAKE_CF_CB(set_wwchargeduration)); register_device_value(TAG_THERMOSTAT_DATA, &wwExtra1_, DeviceValueType::UINT, nullptr, FL_(wwExtra1), DeviceValueUOM::DEGREES); register_device_value(TAG_THERMOSTAT_DATA, &wwExtra2_, DeviceValueType::UINT, nullptr, FL_(wwExtra2), DeviceValueUOM::DEGREES); break; @@ -2260,6 +2404,19 @@ void Thermostat::register_device_values() { register_device_value(TAG_THERMOSTAT_DATA, &wwMode_, DeviceValueType::ENUM, FL_(enum_wwMode2), FL_(wwMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwmode)); register_device_value( TAG_THERMOSTAT_DATA, &wwCircMode_, DeviceValueType::ENUM, FL_(enum_wwCircMode2), FL_(wwCircMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwcircmode)); + register_device_value( + TAG_THERMOSTAT_DATA, &wwProgMode_, DeviceValueType::ENUM, FL_(enum_wwProgMode), FL_(wwProgMode), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwProgMode)); + register_device_value( + TAG_THERMOSTAT_DATA, &wwCircProg_, DeviceValueType::ENUM, FL_(enum_wwProgMode), FL_(wwCircProg), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwCircProg)); + register_device_value( + TAG_THERMOSTAT_DATA, &wwDisinfect_, DeviceValueType::BOOL, nullptr, FL_(wwDisinfect), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_wwDisinfect)); + register_device_value( + TAG_THERMOSTAT_DATA, &wwDisinfectDay_, DeviceValueType::ENUM, FL_(enum_wwDisinfectDay), FL_(wwDisinfectDay), DeviceValueUOM::LIST, MAKE_CF_CB(set_wwDisinfectDay)); + register_device_value( + TAG_THERMOSTAT_DATA, &wwDisinfectHour_, DeviceValueType::UINT, nullptr, FL_(wwDisinfectHour), DeviceValueUOM::NONE, MAKE_CF_CB(set_wwDisinfectHour), 0, 23); + register_device_value(TAG_THERMOSTAT_DATA, &wwMaxTemp_, DeviceValueType::UINT, nullptr, FL_(wwMaxTemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_wwMaxTemp)); + register_device_value( + TAG_THERMOSTAT_DATA, &wwOneTimeKey_, DeviceValueType::BOOL, nullptr, FL_(wwOneTimeKey), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_wwOneTimeKey)); break; case EMS_DEVICE_FLAG_JUNKERS: register_device_value(TAG_THERMOSTAT_DATA, &dateTime_, DeviceValueType::TEXT, nullptr, FL_(dateTime), DeviceValueUOM::NONE, MAKE_CF_CB(set_datetime)); @@ -2405,6 +2562,7 @@ void Thermostat::register_device_values_hc(std::shared_ptrnoreducetemp, DeviceValueType::INT, nullptr, FL_(noreducetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_noreducetemp)); register_device_value(tag, &hc->remotetemp, DeviceValueType::SHORT, FL_(div10), FL_(remotetemp), DeviceValueUOM::DEGREES, MAKE_CF_CB(set_remotetemp)); register_device_value(tag, &dummy_, DeviceValueType::CMD, nullptr, FL_(switchtime), DeviceValueUOM::NONE, MAKE_CF_CB(set_switchtime)); + register_device_value(tag, &hc->wwprio, DeviceValueType::BOOL, nullptr, FL_(wwprio), DeviceValueUOM::BOOLEAN, MAKE_CF_CB(set_wwprio)); break; case EMS_DEVICE_FLAG_JUNKERS: register_device_value(tag, &hc->mode, DeviceValueType::ENUM, FL_(enum_mode4), FL_(mode), DeviceValueUOM::LIST, MAKE_CF_CB(set_mode)); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index edf994582..8fcc5e2af 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -65,6 +65,7 @@ class Thermostat : public EMSdevice { uint8_t pause; uint8_t party; int8_t noreducetemp; // signed -20°C to +10°C + uint8_t wwprio; uint8_t hc_num() const { return hc_num_; @@ -155,6 +156,7 @@ class Thermostat : public EMSdevice { int8_t ibaMinExtTemperature_; // min ext temp for heating curve, in deg., 0xF6=-10, 0x0 = 0, 0xFF=-1 uint8_t ibaBuildingType_; // building type: 0 = light, 1 = medium, 2 = heavy uint8_t ibaClockOffset_; // offset (in sec) to clock, 0xff = -1 s, 0x02 = 2 s + uint8_t ibaDamping_; // damping 0-off, 0xff-on int8_t dampedoutdoortemp_; uint16_t tempsensor1_; @@ -170,6 +172,14 @@ class Thermostat : public EMSdevice { uint8_t wwCircMode_; uint8_t wwSetTemp_; uint8_t wwSetTempLow_; + uint8_t wwChargeDuration_; + uint8_t wwDisinfect_; + uint8_t wwDisinfectDay_; + uint8_t wwDisinfectHour_; + uint8_t wwMaxTemp_; + uint8_t wwOneTimeKey_; + uint8_t wwProgMode_; + uint8_t wwCircProg_; std::vector> heating_circuits_; // each thermostat can have multiple heating circuits @@ -331,6 +341,7 @@ class Thermostat : public EMSdevice { bool set_switchtime(const char * value, const int8_t id); bool set_program(const char * value, const int8_t id); bool set_controlmode(const char * value, const int8_t id); + bool set_wwprio(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); @@ -338,12 +349,22 @@ class Thermostat : public EMSdevice { bool set_wwtemplow(const char * value, const int8_t id); bool set_wwonetime(const char * value, const int8_t id); bool set_wwcircmode(const char * value, const int8_t id); + bool set_wwchargeduration(const char * value, const int8_t id); + bool set_wwDisinfect(const char * value, const int8_t id); + bool set_wwDisinfectDay(const char * value, const int8_t id); + bool set_wwDisinfectHour(const char * value, const int8_t id); + bool set_wwMaxTemp(const char * value, const int8_t id); + bool set_wwOneTimeKey(const char * value, const int8_t id); + bool set_wwProgMode(const char * value, const int8_t id); + bool set_wwCircProg(const char * value, const int8_t id); + bool set_datetime(const char * value, const int8_t id); bool set_minexttemp(const char * value, const int8_t id); bool set_clockoffset(const char * value, const int8_t id); bool set_calinttemp(const char * value, const int8_t id); bool set_display(const char * value, const int8_t id); bool set_building(const char * value, const int8_t id); + bool set_damping(const char * value, const int8_t id); bool set_language(const char * value, const int8_t id); }; diff --git a/src/locale_EN.h b/src/locale_EN.h index 9c724cf26..d333705dc 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -83,6 +83,7 @@ MAKE_PSTR_WORD(commands) MAKE_PSTR_WORD(info) MAKE_PSTR_WORD(settings) MAKE_PSTR_WORD(value) +MAKE_PSTR_WORD(error) // devices MAKE_PSTR_WORD(boiler) @@ -115,7 +116,7 @@ MAKE_PSTR(log_level_fmt, "Log level: %s") MAKE_STR(productid_fmt, "%s EMS Product ID") -MAKE_PSTR_LIST(enum_syslog_level, F_(off), F("emerg"), F("alert"), F("crit"), F("error"), F("warn"), F("notice"), F_(info), F_(debug), F("trace"), F("all")) +MAKE_PSTR_LIST(enum_syslog_level, F_(off), F("emerg"), F("alert"), F("crit"), F_(error), F("warn"), F("notice"), F_(info), F_(debug), F("trace"), F("all")) MAKE_PSTR_LIST(enum_watch, F_(off), F_(on), F_(raw), F_(unknown)) // strings MAKE_PSTR(EMSESP, "EMS-ESP") @@ -239,7 +240,6 @@ MAKE_PSTR_WORD(buffer) MAKE_PSTR(bufferedflow, "buffered flow") MAKE_PSTR(layeredbuffer, "layered buffer") MAKE_PSTR_WORD(maintenance) -MAKE_PSTR_WORD(error) // boiler lists MAKE_PSTR_LIST(enum_off_time_date, F_(off), F_(time), F_(date)) @@ -329,6 +329,8 @@ MAKE_PSTR_LIST(enum_mode3, F_(night), F_(day), F_(auto)) // RC35, RC MAKE_PSTR_LIST(enum_mode4, F_(nofrost), F_(eco), F_(heat), F_(auto)) // JUNKERS MAKE_PSTR_LIST(enum_mode5, F_(auto), F_(off)) // CRF +MAKE_PSTR_LIST(enum_hamode, F_(off), F_(heat), F_(auto), F_(heat), F_(off), F_(heat), F_(auto), F_(auto), F_(auto), F_(auto)) + MAKE_PSTR_LIST(enum_modetype, F_(eco), F_(comfort)) MAKE_PSTR_LIST(enum_modetype2, F_(day)) MAKE_PSTR_LIST(enum_modetype3, F_(night), F_(day)) @@ -342,7 +344,9 @@ MAKE_PSTR_LIST(enum_controlmode2, F_(outdoor), F_(room)) MAKE_PSTR_LIST(enum_controlmode3, F_(off), F_(room), F_(outdoor), F("room+outdoor")) MAKE_PSTR_LIST(enum_control, F_(off), F_(rc20), F_(rc3x)) -MAKE_PSTR_LIST(enum_hamode, F_(off), F_(heat), F_(auto), F_(heat), F_(off), F_(heat), F_(auto), F_(auto), F_(auto), F_(auto)) +MAKE_PSTR_LIST(enum_wwProgMode, F("std prog"), F_(own_prog)) +MAKE_PSTR_LIST(enum_wwDisinfectDay, F("mo"), F("tu"), F("we"), F("th"), F("fr"), F("sa"), F("so"), F("every day")) +MAKE_PSTR_LIST(enum_wwChargeDuration, F_(off), F("15min"), F("30min"), F("45min"), F("60min"), F("75min"), F("90min"), F("105min"), F("120min")) // solar list MAKE_PSTR_LIST(enum_solarmode, F_(constant), F("pwm"), F("analog")) @@ -442,6 +446,9 @@ MAKE_PSTR_LIST(hpPh1, F("hpph1"), F("high pressure side temperature (PH1)")) // the following are warm water for the boiler and automatically tagged with 'ww' MAKE_PSTR_LIST(wwSelTemp, F("wwseltemp"), F("selected temperature")) +MAKE_PSTR_LIST(wwSelTempLow, F("wwseltemplow"), F("selected lower temperature")) +MAKE_PSTR_LIST(wwSelTempOff, F("wwseltempoff"), F("selected temperature for off")) +MAKE_PSTR_LIST(wwSelTempSingle, F("wwseltempsingle"), F("single charge temperature")) MAKE_PSTR_LIST(wwSetTemp, F("wwsettemp"), F("set temperature")) MAKE_PSTR_LIST(wwType, F("wwtype"), F("type")) MAKE_PSTR_LIST(wwComfort, F("wwcomfort"), F("comfort")) @@ -473,6 +480,13 @@ MAKE_PSTR_LIST(wwStarts2, F("wwstarts2"), F("# control starts")) MAKE_PSTR_LIST(wwWorkM, F("wwworkm"), F("active time")) 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(wwDisinfectDay, F("wwdisinfectday"), F("disinfection day")) +MAKE_PSTR_LIST(wwDisinfectHour, F("wwdisinfecthour"), F("disinfection hour")) +MAKE_PSTR_LIST(wwMaxTemp, F("wwmaxtemp"), F("maximum temperature")) +MAKE_PSTR_LIST(wwOneTimeKey, F("wwonetimekey"), F("one time key function")) // thermostat // extra commands @@ -491,20 +505,23 @@ MAKE_PSTR_LIST(ibaClockOffset, F("clockoffset"), F("clock offset")) MAKE_PSTR_LIST(ibaBuildingType, F("building"), F("building")) MAKE_PSTR_LIST(ibaCalIntTemperature, F("intoffset"), F("offset internal temperature")) MAKE_PSTR_LIST(ibaMinExtTemperature, F("minexttemp"), F("minimal external temperature")) +MAKE_PSTR_LIST(damping, F("damping"), F("damping outdoor temperature")) + MAKE_PSTR_LIST(tempsensor1, F("inttemp1"), F("temperature sensor 1")) MAKE_PSTR_LIST(tempsensor2, F("inttemp2"), F("temperature sensor 2")) MAKE_PSTR_LIST(dampedoutdoortemp, F("dampedoutdoortemp"), F("damped outdoor temperature")) MAKE_PSTR_LIST(floordrystatus, F("floordry"), F("floor drying")) -MAKE_PSTR_LIST(dampedoutdoortemp2, F("dampedoutdoortemp"), F("damped outdoor temperature")) MAKE_PSTR_LIST(floordrytemp, F("floordrytemp"), F("floor drying temperature")) MAKE_PSTR_LIST(wwMode, F("wwmode"), F("mode")) MAKE_PSTR_LIST(wwSetTempLow, F("wwsettemplow"), F("set low temperature")) +MAKE_PSTR_LIST(wwChargeDuration, F("wwchargeduration"), F("charge duration")) MAKE_PSTR_LIST(wwExtra1, F("wwextra1"), F("circuit 1 extra")) MAKE_PSTR_LIST(wwExtra2, F("wwextra2"), F("circuit 2 extra")) MAKE_PSTR_LIST(setpoint_roomTemp, F("seltemp"), F("selected room temperature")) MAKE_PSTR_LIST(curr_roomTemp, F("currtemp"), F("current room temperature")) MAKE_PSTR_LIST(mode, F("mode"), F("mode")) MAKE_PSTR_LIST(modetype, F("modetype"), F("mode type")) + MAKE_PSTR_LIST(daytemp, F("daytemp"), F("day temperature")) MAKE_PSTR_LIST(heattemp, F("heattemp"), F("heat temperature")) MAKE_PSTR_LIST(nighttemp, F("nighttemp"), F("night temperature")) @@ -527,6 +544,7 @@ MAKE_PSTR_LIST(control, F("control"), F("control device")) MAKE_PSTR_LIST(program, F("program"), F("program")) MAKE_PSTR_LIST(pause, F("pause"), F("pause time")) MAKE_PSTR_LIST(party, F("party"), F("party time")) +MAKE_PSTR_LIST(wwprio, F("wwprio"), F("warm water priority")) MAKE_PSTR_LIST(holidaytemp, F("holidaytemp"), F("holiday temperature")) MAKE_PSTR_LIST(summermode, F("summermode"), F("summer mode"))