diff --git a/src/device_library.h b/src/device_library.h index 726972c5f..21fd47917 100644 --- a/src/device_library.h +++ b/src/device_library.h @@ -130,6 +130,7 @@ // Heat Pumps - 0x38 {200, DeviceType::HEATPUMP, F("HP Module"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, +{248, DeviceType::HEATPUMP, F("Hybrid Manager HM200"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, {252, DeviceType::HEATPUMP, F("HP Module"), DeviceFlags::EMS_DEVICE_FLAG_NONE}, // Connect devices - 0x02 diff --git a/src/devices/thermostat.cpp b/src/devices/thermostat.cpp index b7c26b62f..4d502f6ac 100644 --- a/src/devices/thermostat.cpp +++ b/src/devices/thermostat.cpp @@ -973,7 +973,7 @@ void Thermostat::process_RC300Summer(std::shared_ptr telegram) { has_update(telegram, hc->offsettemp, 2); if (!is_fetch(summer2_typeids[hc->hc()])) { has_update(telegram, hc->summertemp, 6); - has_update(telegram, hc->summer_setmode, 7); + has_update(telegram, hc->summersetmode, 7); } if (hc->heatingtype < 3) { @@ -993,7 +993,7 @@ void Thermostat::process_RC300Summer2(std::shared_ptr telegram) if (hc == nullptr) { return; } - has_update(telegram, hc->summer_setmode, 0); + has_update(telegram, hc->hpoperatingmode, 0); has_update(telegram, hc->summertemp, 1); } @@ -2348,13 +2348,16 @@ bool Thermostat::set_summermode(const char * value, const int8_t id) { } uint8_t set = 0xFF; - if (!Helpers::value2enum(value, set, FL_(enum_summermode))) { - return false; - } if (is_fetch(summer2_typeids[hc->hc()])) { + if (!Helpers::value2enum(value, set, FL_(enum_hpoperatingmode))) { + return false; + } write_command(summer2_typeids[hc->hc()], 0, set, summer2_typeids[hc->hc()]); } else { + if (!Helpers::value2enum(value, set, FL_(enum_summermode))) { + return false; + } write_command(summer_typeids[hc->hc()], 7, set, summer_typeids[hc->hc()]); } @@ -2963,7 +2966,7 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co factor = 1; break; case HeatingCircuit::Mode::DESIGN: - if (hc->heatingtype == 3) { + if (hc->heatingtype == 3 && model == EMS_DEVICE_FLAG_RC35) { offset = EMS_OFFSET_RC35Set_temp_design_floor; } else { offset = EMS_OFFSET_RC35Set_temp_design; @@ -3002,7 +3005,7 @@ bool Thermostat::set_temperature(const float temperature, const uint8_t mode, co factor = 1; break; case HeatingCircuit::Mode::MAXFLOW: - if (hc->heatingtype == 3) { + if (hc->heatingtype == 3 && model == EMS_DEVICE_FLAG_RC35) { offset = 35; } else { offset = 15; @@ -3831,7 +3834,9 @@ void Thermostat::register_device_values_hc(std::shared_ptrheatingtype, DeviceValueType::ENUM, FL_(enum_heatingtype), FL_(heatingtype), DeviceValueUOM::NONE, MAKE_CF_CB(set_heatingtype)); register_device_value( - tag, &hc->summer_setmode, DeviceValueType::ENUM, FL_(enum_summermode), FL_(summersetmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); + tag, &hc->summersetmode, DeviceValueType::ENUM, FL_(enum_summermode), FL_(summersetmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); + register_device_value( + tag, &hc->hpoperatingmode, DeviceValueType::ENUM, FL_(enum_hpoperatingmode), FL_(hpoperatingmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_summermode)); register_device_value(tag, &hc->summermode, DeviceValueType::ENUM, FL_(enum_summer), FL_(summermode), DeviceValueUOM::NONE); register_device_value( tag, &hc->controlmode, DeviceValueType::ENUM, FL_(enum_controlmode), FL_(controlmode), DeviceValueUOM::NONE, MAKE_CF_CB(set_controlmode)); diff --git a/src/devices/thermostat.h b/src/devices/thermostat.h index a62a61050..2fde27634 100644 --- a/src/devices/thermostat.h +++ b/src/devices/thermostat.h @@ -54,7 +54,8 @@ class Thermostat : public EMSdevice { uint8_t designtemp; // heating curve design temp at MinExtTemp int8_t offsettemp; // heating curve offest temp at roomtemp signed! uint8_t manualtemp; - uint8_t summer_setmode; + uint8_t summersetmode; + uint8_t hpoperatingmode; uint8_t roominfluence; uint8_t roominfl_factor; int16_t curroominfl; diff --git a/src/locale_DE.h b/src/locale_DE.h index 7a668d1c2..a57e54abc 100644 --- a/src/locale_DE.h +++ b/src/locale_DE.h @@ -364,6 +364,7 @@ MAKE_PSTR_LIST(enum_wwMode2, F_(off), F_(on), F_(auto)) MAKE_PSTR_LIST(enum_wwMode3, F_(on), F_(off), F_(auto)) MAKE_PSTR_LIST(enum_heatingtype, F_(off), F_(radiator), F_(convector), F_(floor)) MAKE_PSTR_LIST(enum_summermode, F_(summer), F_(auto), F_(winter)) +MAKE_PSTR_LIST(enum_hpoperatingmode, F_(off), F_(auto), F("heizen"), F("kühlen")) MAKE_PSTR_LIST(enum_summer, F_(winter), F_(summer)) MAKE_PSTR_LIST(enum_mode, F_(manual), F_(auto)) // RC100, RC300, RC310 @@ -649,6 +650,7 @@ MAKE_PSTR_LIST(nofrosttemp, F("nofrosttemp"), F("Frostschutztemperatur")) MAKE_PSTR_LIST(targetflowtemp, F("targetflowtemp"), F("berechnete Flusstemperatur")) MAKE_PSTR_LIST(heatingtype, F("heatingtype"), F("Heizungstyp")) MAKE_PSTR_LIST(summersetmode, F("summersetmode"), F("Einstellung Sommerbetrieb")) +MAKE_PSTR_LIST(hpoperatingmode, F("hpoperatingmode"), F("Wärmepumpe Betriebsmodus")) MAKE_PSTR_LIST(controlmode, F("controlmode"), F("Kontrollmodus")) MAKE_PSTR_LIST(control, F("control"), F("Fernsteuerung")) MAKE_PSTR_LIST(holidays, F("holidays"), F("holiday dates")) diff --git a/src/locale_EN.h b/src/locale_EN.h index 677a3e104..938d5f912 100644 --- a/src/locale_EN.h +++ b/src/locale_EN.h @@ -364,6 +364,7 @@ MAKE_PSTR_LIST(enum_wwMode2, F_(off), F_(on), F_(auto)) MAKE_PSTR_LIST(enum_wwMode3, F_(on), F_(off), F_(auto)) MAKE_PSTR_LIST(enum_heatingtype, F_(off), F_(radiator), F_(convector), F_(floor)) MAKE_PSTR_LIST(enum_summermode, F_(summer), F_(auto), F_(winter)) +MAKE_PSTR_LIST(enum_hpoperatingmode, F_(off), F_(auto), F("heating"), F("cooling")) MAKE_PSTR_LIST(enum_summer, F_(winter), F_(summer)) MAKE_PSTR_LIST(enum_mode, F_(manual), F_(auto)) // RC100, RC300, RC310 @@ -638,6 +639,7 @@ MAKE_PSTR_LIST(nofrosttemp, F("nofrosttemp"), F("nofrost temperature")) MAKE_PSTR_LIST(targetflowtemp, F("targetflowtemp"), F("target flow temperature")) MAKE_PSTR_LIST(heatingtype, F("heatingtype"), F("heating type")) MAKE_PSTR_LIST(summersetmode, F("summersetmode"), F("set summer mode")) +MAKE_PSTR_LIST(hpoperatingmode, F("hpoperatingmode"), F("heatpump operating mode")) MAKE_PSTR_LIST(controlmode, F("controlmode"), F("control mode")) MAKE_PSTR_LIST(control, F("control"), F("control device")) MAKE_PSTR_LIST(holidays, F("holidays"), F("holiday dates"))