From 57cf98ca19d0bada27a789f8ac1f73c3de20169d Mon Sep 17 00:00:00 2001 From: Yurii Date: Tue, 15 Oct 2024 05:09:20 +0300 Subject: [PATCH] refactor: cosmetic changes; move maxModulation setting to opentherm section --- src/HaHelper.h | 24 ------- src/MqttTask.h | 1 - src/OpenThermTask.h | 16 ++--- src/Settings.h | 2 +- src/utils.h | 20 +++--- src_data/locales/en.json | 5 +- src_data/locales/ru.json | 9 +-- src_data/pages/settings.html | 124 ++++++++++++++++++----------------- 8 files changed, 91 insertions(+), 110 deletions(-) diff --git a/src/HaHelper.h b/src/HaHelper.h index ae15d6e..d5d39db 100644 --- a/src/HaHelper.h +++ b/src/HaHelper.h @@ -266,30 +266,6 @@ public: return this->publish(this->getTopic(FPSTR(HA_ENTITY_NUMBER), F("heating_max_temp")).c_str(), doc); } - bool publishNumberHeatingMaxModulation(bool enabledByDefault = true) { - JsonDocument doc; - doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = this->getObjectId(F("heating_max_modulation")); - doc[FPSTR(HA_OBJECT_ID)] = this->getObjectId(F("heating_max_modulation")); - doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); - doc[FPSTR(HA_DEVICE_CLASS)] = F("power_factor"); - doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("%"); - doc[FPSTR(HA_NAME)] = F("Max modulation"); - doc[FPSTR(HA_ICON)] = F("mdi:speedometer"); - doc[FPSTR(HA_STATE_TOPIC)] = this->getDeviceTopic(F("settings")); - doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.heating.maxModulation|int(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = this->getDeviceTopic(F("settings/set")); - doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"heating\": {\"maxModulation\" : {{ value }}}}"); - doc[FPSTR(HA_MIN)] = 1; - doc[FPSTR(HA_MAX)] = 100; - doc[FPSTR(HA_STEP)] = 1; - doc[FPSTR(HA_MODE)] = "box"; - doc[FPSTR(HA_EXPIRE_AFTER)] = 120; - doc.shrinkToFit(); - - return this->publish(this->getTopic(FPSTR(HA_ENTITY_NUMBER), F("heating_max_modulation")).c_str(), doc); - } - bool publishSwitchDhw(bool enabledByDefault = true) { JsonDocument doc; diff --git a/src/MqttTask.h b/src/MqttTask.h index de6023d..8c945eb 100644 --- a/src/MqttTask.h +++ b/src/MqttTask.h @@ -329,7 +329,6 @@ protected: this->haHelper->publishSensorBoilerHeatingMaxTemp(settings.system.unitSystem, false); this->haHelper->publishNumberHeatingMinTemp(settings.system.unitSystem, false); this->haHelper->publishNumberHeatingMaxTemp(settings.system.unitSystem, false); - this->haHelper->publishNumberHeatingMaxModulation(false); // pid this->haHelper->publishSwitchPid(); diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index 60fbffb..a42cfa2 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -271,10 +271,10 @@ protected: vars.parameters.maxPower ); - if (settings.heating.maxModulation < vars.parameters.minModulation) { - settings.heating.maxModulation = vars.parameters.minModulation; + if (settings.opentherm.maxModulation < vars.parameters.minModulation) { + settings.opentherm.maxModulation = vars.parameters.minModulation; fsSettings.update(); - Log.swarningln(FPSTR(L_SETTINGS_OT), F("Updated min modulation: %hhu%%"), settings.heating.maxModulation); + Log.swarningln(FPSTR(L_SETTINGS_OT), F("Updated min modulation: %hhu%%"), settings.opentherm.maxModulation); } if (fabsf(settings.opentherm.maxPower) < 0.1f && vars.parameters.maxPower > 0) { @@ -289,18 +289,18 @@ protected: if (!heatingEnabled && settings.opentherm.modulationSyncWithHeating) { if (this->setMaxModulationLevel(0)) { - Log.snoticeln(FPSTR(L_OT_HEATING), F("Set max modulation: 0% (off)")); + Log.snoticeln(FPSTR(L_OT), F("Set max modulation: 0% (off)")); } else { - Log.swarningln(FPSTR(L_OT_HEATING), F("Failed set max modulation: 0% (off)")); + Log.swarningln(FPSTR(L_OT), F("Failed set max modulation: 0% (off)")); } } else { - if (this->setMaxModulationLevel(settings.heating.maxModulation)) { - Log.snoticeln(FPSTR(L_OT_HEATING), F("Set max modulation: %hhu%%"), settings.heating.maxModulation); + if (this->setMaxModulationLevel(settings.opentherm.maxModulation)) { + Log.snoticeln(FPSTR(L_OT), F("Set max modulation: %hhu%%"), settings.opentherm.maxModulation); } else { - Log.swarningln(FPSTR(L_OT_HEATING), F("Failed set max modulation: %hhu%%"), settings.heating.maxModulation); + Log.swarningln(FPSTR(L_OT), F("Failed set max modulation: %hhu%%"), settings.opentherm.maxModulation); } } diff --git a/src/Settings.h b/src/Settings.h index d40b6de..ebc9515 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -54,6 +54,7 @@ struct Settings { byte faultStateGpio = DEFAULT_OT_FAULT_STATE_GPIO; byte invertFaultState = false; unsigned int memberIdCode = 0; + uint8_t maxModulation = 100; float pressureFactor = 1.0f; float dhwFlowRateFactor = 1.0f; float minPower = 0.0f; @@ -105,7 +106,6 @@ struct Settings { float hysteresis = 0.5f; byte minTemp = DEFAULT_HEATING_MIN_TEMP; byte maxTemp = DEFAULT_HEATING_MAX_TEMP; - byte maxModulation = 100; } heating; struct { diff --git a/src/utils.h b/src/utils.h index d72e92c..fcb56f3 100644 --- a/src/utils.h +++ b/src/utils.h @@ -345,6 +345,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) { dst["opentherm"]["faultStateGpio"] = src.opentherm.faultStateGpio; dst["opentherm"]["invertFaultState"] = src.opentherm.invertFaultState; dst["opentherm"]["memberIdCode"] = src.opentherm.memberIdCode; + dst["opentherm"]["maxModulation"] = src.opentherm.maxModulation; dst["opentherm"]["pressureFactor"] = roundd(src.opentherm.pressureFactor, 2); dst["opentherm"]["dhwFlowRateFactor"] = roundd(src.opentherm.dhwFlowRateFactor, 2); dst["opentherm"]["minPower"] = roundd(src.opentherm.minPower, 2); @@ -388,7 +389,6 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) { dst["heating"]["hysteresis"] = roundd(src.heating.hysteresis, 2); dst["heating"]["minTemp"] = src.heating.minTemp; dst["heating"]["maxTemp"] = src.heating.maxTemp; - dst["heating"]["maxModulation"] = src.heating.maxModulation; dst["dhw"]["enable"] = src.dhw.enable; dst["dhw"]["target"] = roundd(src.dhw.target, 1); @@ -700,6 +700,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false } } + if (!src["opentherm"]["maxModulation"].isNull()) { + unsigned char value = src["opentherm"]["maxModulation"].as(); + + if (value > 0 && value <= 100 && value != dst.opentherm.maxModulation) { + dst.opentherm.maxModulation = value; + changed = true; + } + } + if (!src["opentherm"]["pressureFactor"].isNull()) { float value = src["opentherm"]["pressureFactor"].as(); @@ -1205,15 +1214,6 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false } } - if (!src["heating"]["maxModulation"].isNull()) { - unsigned char value = src["heating"]["maxModulation"].as(); - - if (value > 0 && value <= 100 && value != dst.heating.maxModulation) { - dst.heating.maxModulation = value; - changed = true; - } - } - // dhw if (src["dhw"]["enable"].is()) { diff --git a/src_data/locales/en.json b/src_data/locales/en.json index baa1c55..30dc17e 100644 --- a/src_data/locales/en.json +++ b/src_data/locales/en.json @@ -213,8 +213,7 @@ }, "heating": { - "hyst": "Hysteresis (in degrees)", - "maxMod": "Max modulation level" + "hyst": "Hysteresis (in degrees)" }, "emergency": { @@ -256,10 +255,12 @@ }, "ot": { + "advanced": "Advanced Settings", "inGpio": "In GPIO", "outGpio": "Out GPIO", "ledGpio": "RX LED GPIO", "memberIdCode": "Master MemberID code", + "maxMod": "Max modulation level", "pressureFactor": { "title": "Coeff. pressure correction", "note": "If the pressure displayed is X10 from the real one, set the 0.1." diff --git a/src_data/locales/ru.json b/src_data/locales/ru.json index cb58765..39faa98 100644 --- a/src_data/locales/ru.json +++ b/src_data/locales/ru.json @@ -213,8 +213,7 @@ }, "heating": { - "hyst": "Гистерезис (в градусах)", - "maxMod": "Макс. уровень модуляции" + "hyst": "Гистерезис (в градусах)" }, "emergency": { @@ -256,10 +255,12 @@ }, "ot": { + "advanced": "Дополнительные настройки", "inGpio": "Вход GPIO", "outGpio": "Выход GPIO", "ledGpio": "RX LED GPIO", "memberIdCode": "Master MemberID код", + "maxMod": "Макс. уровень модуляции", "pressureFactor": { "title": "Коэфф. коррекции давления", "note": "Если давление отображается Х10 от реального, установите значение 0.1." @@ -269,11 +270,11 @@ "note": "Если поток ГВС отображается Х10 от реального, установите значение 0.1." }, "minPower": { - "title": "Мин. мощность котла (кВ)", + "title": "Мин. мощность котла (кВт)", "note": "Это значение соответствует уровню модуляции котла 0–1%. Обычно можно найти в спецификации котла как \"минимальная полезная тепловая мощность\"." }, "maxPower": { - "title": "Макс. мощность котла (кВ)", + "title": "Макс. мощность котла (кВт)", "note": "0 - попробовать определить автоматически. Обычно можно найти в спецификации котла как \"максимальная полезная тепловая мощность\"." }, "fnv": { diff --git a/src_data/pages/settings.html b/src_data/pages/settings.html index 3baf47e..2fecf74 100644 --- a/src_data/pages/settings.html +++ b/src_data/pages/settings.html @@ -166,17 +166,10 @@ -
- - - -
+ @@ -401,32 +394,23 @@ settings.ot.outGpio - -
+
+
-
-
- - -
@@ -491,40 +475,6 @@ settings.ot.options.immergasFix -
-
- - settings.ot.fnv.title - - - - - -
- -
-
- - - -
-
+
+ +
+ settings.ot.advanced +
+
+ + + +
+
+ +
+ + settings.ot.fnv.title + + + + + +
+ +
+
+ + + +
+
+
@@ -795,6 +799,7 @@ setInputValue('#opentherm-fault-state-gpio', data.opentherm.faultStateGpio < 255 ? data.opentherm.faultStateGpio : ''); setCheckboxValue('#opentherm-invert-fault-state', data.opentherm.invertFaultState); setInputValue('#opentherm-member-id-code', data.opentherm.memberIdCode); + setInputValue('#opentherm-max-modulation', data.opentherm.maxModulation); setInputValue('#opentherm-pressure-factor', data.opentherm.pressureFactor); setInputValue('#opentherm-dhw-fr-factor', data.opentherm.dhwFlowRateFactor); setInputValue('#opentherm-min-power', data.opentherm.minPower); @@ -856,7 +861,6 @@ "max": data.system.unitSystem == 0 ? 100 : 212 }); setInputValue('#heating-hysteresis', data.heating.hysteresis); - setInputValue('#heating-max-modulation', data.heating.maxModulation); setBusy('#heating-settings-busy', '#heating-settings', false); // DHW