diff --git a/lib/CustomOpenTherm/CustomOpenTherm.h b/lib/CustomOpenTherm/CustomOpenTherm.h index 5c16962..cb9b08a 100644 --- a/lib/CustomOpenTherm/CustomOpenTherm.h +++ b/lib/CustomOpenTherm/CustomOpenTherm.h @@ -79,7 +79,7 @@ public: } } - unsigned long setBoilerStatus(bool enableCentralHeating, bool enableHotWater, bool enableCooling, bool enableOutsideTemperatureCompensation, bool enableCentralHeating2, bool summerWinterMode, bool dhwBlocking) { + unsigned long setBoilerStatus(bool enableCentralHeating, bool enableHotWater, bool enableCooling, bool enableOutsideTemperatureCompensation, bool enableCentralHeating2, bool summerWinterMode, bool dhwBlocking, uint8_t lb = 0) { unsigned int data = enableCentralHeating | (enableHotWater << 1) | (enableCooling << 2) @@ -87,7 +87,9 @@ public: | (enableCentralHeating2 << 4) | (summerWinterMode << 5) | (dhwBlocking << 6); + data <<= 8; + data |= lb; return this->sendRequest(buildRequest( OpenThermMessageType::READ_DATA, diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index c136de8..3c58da9 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -165,6 +165,16 @@ protected: heatingCh2Enabled = settings.opentherm.dhwPresent && settings.dhw.enable; } + // Set boiler status LB + // Some boilers require this, although this is against protocol + uint8_t statusLb = 0; + + // Immergas fix + // https://arduino.ru/forum/programmirovanie/termostat-opentherm-na-esp8266?page=15#comment-649392 + if (settings.opentherm.immergasFix) { + statusLb = 0xCA; + } + unsigned long response = this->instance->setBoilerStatus( heatingEnabled, settings.opentherm.dhwPresent && settings.dhw.enable, @@ -172,7 +182,8 @@ protected: settings.opentherm.nativeHeatingControl, heatingCh2Enabled, settings.opentherm.summerWinterMode, - settings.opentherm.dhwBlocking + settings.opentherm.dhwBlocking, + statusLb ); if (!CustomOpenTherm::isValidResponse(response)) { diff --git a/src/Settings.h b/src/Settings.h index 75d8d37..dba3e78 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -63,6 +63,7 @@ struct Settings { bool modulationSyncWithHeating = false; bool getMinMaxTemp = true; bool nativeHeatingControl = false; + bool immergasFix = false; } opentherm; struct { diff --git a/src/utils.h b/src/utils.h index 8b63434..b966f94 100644 --- a/src/utils.h +++ b/src/utils.h @@ -354,6 +354,7 @@ void settingsToJson(const Settings& src, JsonVariant dst, bool safe = false) { dst["opentherm"]["modulationSyncWithHeating"] = src.opentherm.modulationSyncWithHeating; dst["opentherm"]["getMinMaxTemp"] = src.opentherm.getMinMaxTemp; dst["opentherm"]["nativeHeatingControl"] = src.opentherm.nativeHeatingControl; + dst["opentherm"]["immergasFix"] = src.opentherm.immergasFix; dst["mqtt"]["enable"] = src.mqtt.enable; dst["mqtt"]["server"] = src.mqtt.server; @@ -800,6 +801,15 @@ bool jsonToSettings(const JsonVariantConst src, Settings& dst, bool safe = false } } + if (src["opentherm"]["immergasFix"].is()) { + bool value = src["opentherm"]["immergasFix"].as(); + + if (value != dst.opentherm.immergasFix) { + dst.opentherm.immergasFix = value; + changed = true; + } + } + // mqtt if (src["mqtt"]["enable"].is()) { diff --git a/src_data/locales/en.json b/src_data/locales/en.json index 9b1af14..d4595fc 100644 --- a/src_data/locales/en.json +++ b/src_data/locales/en.json @@ -269,7 +269,8 @@ "dhwToCh2": "Duplicate DHW to CH2", "dhwBlocking": "DHW blocking", "modulationSyncWithHeating": "Sync modulation with heating", - "getMinMaxTemp": "Get min/max temp from boiler" + "getMinMaxTemp": "Get min/max temp from boiler", + "immergasFix": "Fix for Immergas boilers" }, "faultState": { diff --git a/src_data/locales/ru.json b/src_data/locales/ru.json index 3aebdab..0637077 100644 --- a/src_data/locales/ru.json +++ b/src_data/locales/ru.json @@ -269,7 +269,8 @@ "dhwToCh2": "Дублировать параметры ГВС в канал 2", "dhwBlocking": "DHW blocking", "modulationSyncWithHeating": "Синхронизировать модуляцию с отоплением", - "getMinMaxTemp": "Получать мин. и макс. температуру от котла" + "getMinMaxTemp": "Получать мин. и макс. температуру от котла", + "immergasFix": "Фикс для котлов Immergas" }, "faultState": { diff --git a/src_data/pages/settings.html b/src_data/pages/settings.html index 5992dc3..f9e2668 100644 --- a/src_data/pages/settings.html +++ b/src_data/pages/settings.html @@ -443,6 +443,11 @@ settings.ot.options.getMinMaxTemp + + + settings.ot.options.immergasFix + +