diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index 037f126..d357d26 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -1021,14 +1021,16 @@ protected: if (this->needSetHeatingTemp(convertedTemp)) { // Set max heating temp - if (this->setMaxHeatingTemp(convertedTemp)) { - Log.sinfoln( - FPSTR(L_OT_HEATING), F("Set max heating temp: %.2f (converted: %.2f)"), - vars.master.heating.setpointTemp, convertedTemp - ); + if (settings.opentherm.options.maxTempSyncWithTargetTemp) { + if (this->setMaxHeatingTemp(convertedTemp)) { + Log.sinfoln( + FPSTR(L_OT_HEATING), F("Set max heating temp: %.2f (converted: %.2f)"), + vars.master.heating.setpointTemp, convertedTemp + ); - } else { - Log.swarningln(FPSTR(L_OT_HEATING), F("Failed set max heating temp")); + } else { + Log.swarningln(FPSTR(L_OT_HEATING), F("Failed set max heating temp")); + } } // Set target heating temp diff --git a/src/Settings.h b/src/Settings.h index 8d89268..88740a4 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -67,6 +67,7 @@ struct Settings { bool dhwToCh2 = false; bool dhwBlocking = false; bool modulationSyncWithHeating = false; + bool maxTempSyncWithTargetTemp = true; bool getMinMaxTemp = true; bool nativeHeatingControl = false; bool immergasFix = false; diff --git a/src/strings.h b/src/strings.h index 7b5034f..08d995d 100644 --- a/src/strings.h +++ b/src/strings.h @@ -118,6 +118,7 @@ const char S_MAX_FREE_BLOCK[] PROGMEM = "maxFreeBlock"; const char S_MAX_MODULATION[] PROGMEM = "maxModulation"; const char S_MAX_POWER[] PROGMEM = "maxPower"; const char S_MAX_TEMP[] PROGMEM = "maxTemp"; +const char S_MAX_TEMP_SYNC_WITH_TARGET_TEMP[] PROGMEM = "maxTempSyncWithTargetTemp"; const char S_MEMBER_ID[] PROGMEM = "memberId"; const char S_MIN[] PROGMEM = "min"; const char S_MIN_FREE[] PROGMEM = "minFree"; diff --git a/src/utils.h b/src/utils.h index 99c074d..6c13e62 100644 --- a/src/utils.h +++ b/src/utils.h @@ -388,6 +388,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) { otOptions[FPSTR(S_DHW_TO_CH2)] = src.opentherm.options.dhwToCh2; otOptions[FPSTR(S_DHW_BLOCKING)] = src.opentherm.options.dhwBlocking; otOptions[FPSTR(S_MODULATION_SYNC_WITH_HEATING)] = src.opentherm.options.modulationSyncWithHeating; + otOptions[FPSTR(S_MAX_TEMP_SYNC_WITH_TARGET_TEMP)] = src.opentherm.options.maxTempSyncWithTargetTemp; otOptions[FPSTR(S_GET_MIN_MAX_TEMP)] = src.opentherm.options.getMinMaxTemp; otOptions[FPSTR(S_NATIVE_HEATING_CONTROL)] = src.opentherm.options.nativeHeatingControl; otOptions[FPSTR(S_IMMERGAS_FIX)] = src.opentherm.options.immergasFix; @@ -821,6 +822,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false } } + if (src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_MAX_TEMP_SYNC_WITH_TARGET_TEMP)].is()) { + bool value = src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_MAX_TEMP_SYNC_WITH_TARGET_TEMP)].as(); + + if (value != dst.opentherm.options.maxTempSyncWithTargetTemp) { + dst.opentherm.options.maxTempSyncWithTargetTemp = value; + changed = true; + } + } + if (src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_GET_MIN_MAX_TEMP)].is()) { bool value = src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_GET_MIN_MAX_TEMP)].as(); diff --git a/src_data/locales/en.json b/src_data/locales/en.json index 58239c2..1c34587 100644 --- a/src_data/locales/en.json +++ b/src_data/locales/en.json @@ -378,6 +378,7 @@ "dhwToCh2": "Duplicate DHW to CH2", "dhwBlocking": "DHW blocking", "modulationSyncWithHeating": "Sync modulation with heating", + "maxTempSyncWithTargetTemp": "Sync max heating temp with target temp", "getMinMaxTemp": "Get min/max temp from boiler", "immergasFix": "Fix for Immergas boilers" }, diff --git a/src_data/locales/ru.json b/src_data/locales/ru.json index 2757ff9..aa3bc7d 100644 --- a/src_data/locales/ru.json +++ b/src_data/locales/ru.json @@ -378,6 +378,7 @@ "dhwToCh2": "Дублировать параметры ГВС в канал 2", "dhwBlocking": "DHW blocking", "modulationSyncWithHeating": "Синхронизировать модуляцию с отоплением", + "maxTempSyncWithTargetTemp": "Синхронизировать макс. темп. отопления с целевой темп.", "getMinMaxTemp": "Получать мин. и макс. температуру от котла", "immergasFix": "Фикс для котлов Immergas" }, diff --git a/src_data/pages/settings.html b/src_data/pages/settings.html index a65420f..9c7ac49 100644 --- a/src_data/pages/settings.html +++ b/src_data/pages/settings.html @@ -449,6 +449,11 @@ settings.ot.options.modulationSyncWithHeating + +