From 1eee184887beedb48ca21acd8776d8f5b60d65b7 Mon Sep 17 00:00:00 2001 From: Yurii Date: Mon, 16 Jun 2025 01:04:07 +0300 Subject: [PATCH] feat: added OT option dhwStateAsDhwBlocking For Baxi Slim with Bertelli --- src/OpenThermTask.h | 8 +++++++- src/Settings.h | 1 + src/strings.h | 1 + src/utils.h | 10 ++++++++++ src_data/locales/en.json | 1 + src_data/locales/it.json | 1 + src_data/locales/ru.json | 1 + src_data/pages/settings.html | 6 ++++++ 8 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index f37bc80..808fb81 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -205,6 +205,12 @@ protected: summerWinterMode = vars.master.heating.enabled == summerWinterMode; } + // DHW blocking + bool dhwBlocking = settings.opentherm.options.dhwBlocking; + if (settings.opentherm.options.dhwStateAsDhwBlocking) { + dhwBlocking = vars.master.dhw.enabled == dhwBlocking; + } + unsigned long response = this->instance->setBoilerStatus( vars.master.heating.enabled, vars.master.dhw.enabled, @@ -212,7 +218,7 @@ protected: settings.opentherm.options.nativeHeatingControl, vars.master.ch2.enabled, summerWinterMode, - settings.opentherm.options.dhwBlocking, + dhwBlocking, statusLb ); diff --git a/src/Settings.h b/src/Settings.h index f939fbf..dc5444b 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -71,6 +71,7 @@ struct Settings { bool heatingToCh2 = false; bool dhwToCh2 = false; bool dhwBlocking = false; + bool dhwStateAsDhwBlocking = false; bool maxTempSyncWithTargetTemp = true; bool getMinMaxTemp = true; bool ignoreDiagState = false; diff --git a/src/strings.h b/src/strings.h index cd0c96b..c5ef678 100644 --- a/src/strings.h +++ b/src/strings.h @@ -68,6 +68,7 @@ const char S_DATE[] PROGMEM = "date"; const char S_DEADBAND[] PROGMEM = "deadband"; const char S_DHW[] PROGMEM = "dhw"; const char S_DHW_BLOCKING[] PROGMEM = "dhwBlocking"; +const char S_DHW_STATE_AS_DHW_BLOCKING[] PROGMEM = "dhwStateAsDhwBlocking"; const char S_DHW_SUPPORT[] PROGMEM = "dhwSupport"; const char S_DHW_TO_CH2[] PROGMEM = "dhwToCh2"; const char S_DIAG[] PROGMEM = "diag"; diff --git a/src/utils.h b/src/utils.h index 614dd3b..2758f7a 100644 --- a/src/utils.h +++ b/src/utils.h @@ -461,6 +461,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) { otOptions[FPSTR(S_HEATING_TO_CH2)] = src.opentherm.options.heatingToCh2; otOptions[FPSTR(S_DHW_TO_CH2)] = src.opentherm.options.dhwToCh2; otOptions[FPSTR(S_DHW_BLOCKING)] = src.opentherm.options.dhwBlocking; + otOptions[FPSTR(S_DHW_STATE_AS_DHW_BLOCKING)] = src.opentherm.options.dhwStateAsDhwBlocking; 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_IGNORE_DIAG_STATE)] = src.opentherm.options.ignoreDiagState; @@ -923,6 +924,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false } } + if (src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_DHW_STATE_AS_DHW_BLOCKING)].is()) { + bool value = src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_DHW_STATE_AS_DHW_BLOCKING)].as(); + + if (value != dst.opentherm.options.dhwStateAsDhwBlocking) { + dst.opentherm.options.dhwStateAsDhwBlocking = value; + changed = true; + } + } + 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(); diff --git a/src_data/locales/en.json b/src_data/locales/en.json index 44785f1..d8bf9ff 100644 --- a/src_data/locales/en.json +++ b/src_data/locales/en.json @@ -404,6 +404,7 @@ "heatingToCh2": "Duplicate heating to CH2", "dhwToCh2": "Duplicate DHW to CH2", "dhwBlocking": "DHW blocking", + "dhwStateAsDhwBlocking": "DHW state as DHW blocking", "maxTempSyncWithTargetTemp": "Sync max heating temp with target temp", "getMinMaxTemp": "Get min/max temp from boiler", "ignoreDiagState": "Ignore diag state", diff --git a/src_data/locales/it.json b/src_data/locales/it.json index 72455f2..d96e208 100644 --- a/src_data/locales/it.json +++ b/src_data/locales/it.json @@ -404,6 +404,7 @@ "heatingToCh2": "Riproduci riscaldamento su CH2", "dhwToCh2": "Riproduci ACS su CH2", "dhwBlocking": "Bloccare ACS", + "dhwStateAsDhwBlocking": "Stato ACS come bloccare ACS", "maxTempSyncWithTargetTemp": "Sincronizza la temperatura massima di riscaldamento con la temperatura target", "getMinMaxTemp": "Prendi temp min/max dalla caldaia", "ignoreDiagState": "Ignora lo stato diagnostico", diff --git a/src_data/locales/ru.json b/src_data/locales/ru.json index 40aa7f1..702f2ef 100644 --- a/src_data/locales/ru.json +++ b/src_data/locales/ru.json @@ -404,6 +404,7 @@ "heatingToCh2": "Дублировать параметры отопления в канал 2", "dhwToCh2": "Дублировать параметры ГВС в канал 2", "dhwBlocking": "DHW blocking", + "dhwStateAsDhwBlocking": "DHW blocking в качестве состояния ГВС", "maxTempSyncWithTargetTemp": "Синхронизировать макс. темп. отопления с целевой темп.", "getMinMaxTemp": "Получать мин. и макс. температуру от котла", "ignoreDiagState": "Игнорировать состояние диагностики", diff --git a/src_data/pages/settings.html b/src_data/pages/settings.html index a1eccb5..1582369 100644 --- a/src_data/pages/settings.html +++ b/src_data/pages/settings.html @@ -526,6 +526,11 @@ settings.ot.options.dhwBlocking + +