From 8641f9f1e41ed394c69daf23007e0c56d8e1f6e3 Mon Sep 17 00:00:00 2001 From: Yurii Date: Wed, 10 Dec 2025 17:31:19 +0300 Subject: [PATCH] feat: added OT option `alwaysSetIndoorTemp` #180 --- src/OpenThermTask.h | 9 ++++++--- src/Settings.h | 1 + src/strings.h | 1 + src/utils.h | 10 ++++++++++ src_data/locales/en.json | 1 + src_data/pages/settings.html | 6 ++++++ 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index c609597..72e73fd 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -1209,8 +1209,8 @@ protected: } } - // Native heating control - if (settings.opentherm.options.nativeHeatingControl) { + // Set indoor temp for Native heating control/Always set indoor temp + if (settings.opentherm.options.nativeHeatingControl || settings.opentherm.options.alwaysSetIndoorTemp) { // Converted current indoor temp float convertedTemp = convertTemp(vars.master.heating.indoorTemp, settings.system.unitSystem, settings.opentherm.unitSystem); @@ -1237,10 +1237,13 @@ protected: Log.swarningln(FPSTR(L_OT_HEATING), F("Failed set current CH2 indoor temp")); } } + } + // Native heating control + if (settings.opentherm.options.nativeHeatingControl) { // Converted target indoor temp - convertedTemp = convertTemp(vars.master.heating.targetTemp, settings.system.unitSystem, settings.opentherm.unitSystem); + float convertedTemp = convertTemp(vars.master.heating.targetTemp, settings.system.unitSystem, settings.opentherm.unitSystem); // Set target indoor temp if (this->needSetHeatingTemp(convertedTemp)) { diff --git a/src/Settings.h b/src/Settings.h index 43c3871..c60bedc 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -78,6 +78,7 @@ struct Settings { bool autoFaultReset = false; bool autoDiagReset = false; bool setDateAndTime = false; + bool alwaysSetIndoorTemp = true; bool nativeHeatingControl = false; bool immergasFix = false; } options; diff --git a/src/strings.h b/src/strings.h index 510c392..8789901 100644 --- a/src/strings.h +++ b/src/strings.h @@ -38,6 +38,7 @@ const char S_ACTION[] PROGMEM = "action"; const char S_ACTIONS[] PROGMEM = "actions"; const char S_ACTIVE[] PROGMEM = "active"; const char S_ADDRESS[] PROGMEM = "address"; +const char S_ALWAYS_SET_INDOOR_TEMP[] PROGMEM = "alwaysSetIndoorTemp"; const char S_ANTI_STUCK_INTERVAL[] PROGMEM = "antiStuckInterval"; const char S_ANTI_STUCK_TIME[] PROGMEM = "antiStuckTime"; const char S_AP[] PROGMEM = "ap"; diff --git a/src/utils.h b/src/utils.h index c3d5dfc..9e8f45a 100644 --- a/src/utils.h +++ b/src/utils.h @@ -468,6 +468,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) { otOptions[FPSTR(S_AUTO_FAULT_RESET)] = src.opentherm.options.autoFaultReset; otOptions[FPSTR(S_AUTO_DIAG_RESET)] = src.opentherm.options.autoDiagReset; otOptions[FPSTR(S_SET_DATE_AND_TIME)] = src.opentherm.options.setDateAndTime; + otOptions[FPSTR(S_ALWAYS_SET_INDOOR_TEMP)] = src.opentherm.options.alwaysSetIndoorTemp; otOptions[FPSTR(S_NATIVE_HEATING_CONTROL)] = src.opentherm.options.nativeHeatingControl; otOptions[FPSTR(S_IMMERGAS_FIX)] = src.opentherm.options.immergasFix; @@ -1003,6 +1004,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false } } + if (src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_ALWAYS_SET_INDOOR_TEMP)].is()) { + bool value = src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_ALWAYS_SET_INDOOR_TEMP)].as(); + + if (value != dst.opentherm.options.alwaysSetIndoorTemp) { + dst.opentherm.options.alwaysSetIndoorTemp = value; + changed = true; + } + } + if (src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_NATIVE_HEATING_CONTROL)].is()) { bool value = src[FPSTR(S_OPENTHERM)][FPSTR(S_OPTIONS)][FPSTR(S_NATIVE_HEATING_CONTROL)].as(); diff --git a/src_data/locales/en.json b/src_data/locales/en.json index 732a5f7..2941205 100644 --- a/src_data/locales/en.json +++ b/src_data/locales/en.json @@ -457,6 +457,7 @@ "autoFaultReset": "Auto fault reset (not recommended!)", "autoDiagReset": "Auto diag reset (not recommended!)", "setDateAndTime": "Set date & time on boiler", + "alwaysSetIndoorTemp": "Always set indoor temperature", "immergasFix": "Fix for Immergas boilers" }, diff --git a/src_data/pages/settings.html b/src_data/pages/settings.html index 8630dbc..8dd7495 100644 --- a/src_data/pages/settings.html +++ b/src_data/pages/settings.html @@ -687,6 +687,11 @@ settings.ot.options.setDateAndTime + +