From 3c69f1295e76addcd019b2c32478c150ad176a6f Mon Sep 17 00:00:00 2001 From: Yurii Date: Thu, 10 Oct 2024 21:08:13 +0300 Subject: [PATCH] feat: added opentherm option for filtering numeric values --- src/OpenThermTask.h | 63 ++++++++++++++++++++++++++++++++---- src/Settings.h | 1 + src/utils.h | 10 ++++++ src_data/locales/en.json | 3 +- src_data/locales/ru.json | 3 +- src_data/pages/settings.html | 8 ++++- 6 files changed, 78 insertions(+), 10 deletions(-) diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index 6f27aff..788ad3a 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -810,12 +810,19 @@ protected: return false; } - vars.temperatures.outdoor = settings.sensors.outdoor.offset + convertTemp( + float value = settings.sensors.outdoor.offset + convertTemp( CustomOpenTherm::getFloat(response), settings.opentherm.unitSystem, settings.system.unitSystem ); + if (settings.opentherm.filteringNumValues && fabs(vars.temperatures.outdoor) >= 0.1f) { + vars.temperatures.outdoor += (value - vars.temperatures.outdoor) * EXT_SENSORS_FILTER_K; + + } else { + vars.temperatures.outdoor = value; + } + return true; } @@ -835,12 +842,19 @@ protected: return false; } - vars.temperatures.exhaust = convertTemp( + value = convertTemp( value, settings.opentherm.unitSystem, settings.system.unitSystem ); + if (settings.opentherm.filteringNumValues && fabs(vars.temperatures.exhaust) >= 0.1f) { + vars.temperatures.exhaust += (value - vars.temperatures.exhaust) * EXT_SENSORS_FILTER_K; + + } else { + vars.temperatures.exhaust = value; + } + return true; } @@ -860,12 +874,19 @@ protected: return false; } - vars.temperatures.heating = convertTemp( + value = convertTemp( value, settings.opentherm.unitSystem, settings.system.unitSystem ); + if (settings.opentherm.filteringNumValues && fabs(vars.temperatures.heating) >= 0.1f) { + vars.temperatures.heating += (value - vars.temperatures.heating) * EXT_SENSORS_FILTER_K; + + } else { + vars.temperatures.heating = value; + } + return true; } @@ -880,12 +901,20 @@ protected: return false; } - vars.temperatures.heatingReturn = convertTemp( + float value = convertTemp( CustomOpenTherm::getFloat(response), settings.opentherm.unitSystem, settings.system.unitSystem ); + if (settings.opentherm.filteringNumValues && fabs(vars.temperatures.heatingReturn) >= 0.1f) { + vars.temperatures.heatingReturn += (value - vars.temperatures.heatingReturn) * EXT_SENSORS_FILTER_K; + + } else { + vars.temperatures.heatingReturn = value; + } + + return true; } @@ -906,12 +935,19 @@ protected: return false; } - vars.temperatures.dhw = convertTemp( + value = convertTemp( value, settings.opentherm.unitSystem, settings.system.unitSystem ); + if (settings.opentherm.filteringNumValues && fabs(vars.temperatures.dhw) >= 0.1f) { + vars.temperatures.dhw += (value - vars.temperatures.dhw) * EXT_SENSORS_FILTER_K; + + } else { + vars.temperatures.dhw = value; + } + return true; } @@ -983,7 +1019,13 @@ protected: return false; } - vars.sensors.modulation = CustomOpenTherm::getFloat(response); + float value = CustomOpenTherm::getFloat(response); + if (settings.opentherm.filteringNumValues && fabs(vars.sensors.modulation) >= 0.1f) { + vars.sensors.modulation += (value - vars.sensors.modulation) * EXT_SENSORS_FILTER_K; + + } else { + vars.sensors.modulation = value; + } return true; } @@ -1004,12 +1046,19 @@ protected: this->pressureMultiplier = 10; } - vars.sensors.pressure = convertPressure( + value = convertPressure( value / this->pressureMultiplier, settings.opentherm.unitSystem, settings.system.unitSystem ); + if (settings.opentherm.filteringNumValues && fabs(vars.sensors.pressure) >= 0.1f) { + vars.sensors.pressure += (value - vars.sensors.pressure) * EXT_SENSORS_FILTER_K; + + } else { + vars.sensors.pressure = value; + } + return true; } }; diff --git a/src/Settings.h b/src/Settings.h index 333ff02..caefec4 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -64,6 +64,7 @@ struct Settings { bool getMinMaxTemp = true; bool nativeHeatingControl = false; bool immergasFix = false; + bool filteringNumValues = false; } opentherm; struct { diff --git a/src/utils.h b/src/utils.h index 4a77629..b9e7466 100644 --- a/src/utils.h +++ b/src/utils.h @@ -355,6 +355,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) { dst["opentherm"]["getMinMaxTemp"] = src.opentherm.getMinMaxTemp; dst["opentherm"]["nativeHeatingControl"] = src.opentherm.nativeHeatingControl; dst["opentherm"]["immergasFix"] = src.opentherm.immergasFix; + dst["opentherm"]["filteringNumValues"] = src.opentherm.filteringNumValues; dst["mqtt"]["enable"] = src.mqtt.enable; dst["mqtt"]["server"] = src.mqtt.server; @@ -810,6 +811,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false } } + if (src["opentherm"]["filteringNumValues"].is()) { + bool value = src["opentherm"]["filteringNumValues"].as(); + + if (value != dst.opentherm.filteringNumValues) { + dst.opentherm.filteringNumValues = value; + changed = true; + } + } + // mqtt if (src["mqtt"]["enable"].is()) { diff --git a/src_data/locales/en.json b/src_data/locales/en.json index d3df819..04405b0 100644 --- a/src_data/locales/en.json +++ b/src_data/locales/en.json @@ -271,7 +271,8 @@ "dhwBlocking": "DHW blocking", "modulationSyncWithHeating": "Sync modulation with heating", "getMinMaxTemp": "Get min/max temp from boiler", - "immergasFix": "Fix for Immergas boilers" + "immergasFix": "Fix for Immergas boilers", + "filteringNumValues": "Use filtering for numeric values" }, "faultState": { diff --git a/src_data/locales/ru.json b/src_data/locales/ru.json index 2e22763..0884611 100644 --- a/src_data/locales/ru.json +++ b/src_data/locales/ru.json @@ -271,7 +271,8 @@ "dhwBlocking": "DHW blocking", "modulationSyncWithHeating": "Синхронизировать модуляцию с отоплением", "getMinMaxTemp": "Получать мин. и макс. температуру от котла", - "immergasFix": "Фикс для котлов Immergas" + "immergasFix": "Фикс для котлов Immergas", + "filteringNumValues": "Использовать фильтрацию для числовых значений" }, "faultState": { diff --git a/src_data/pages/settings.html b/src_data/pages/settings.html index f9e2668..fdb7356 100644 --- a/src_data/pages/settings.html +++ b/src_data/pages/settings.html @@ -443,11 +443,16 @@ settings.ot.options.getMinMaxTemp - + + +