From 4f305a6459680528f57798af6e14fe5a370dc80c Mon Sep 17 00:00:00 2001 From: Yurii Date: Sat, 16 Sep 2023 22:00:07 +0300 Subject: [PATCH] Use platformio and more updates --- .gitignore | 5 + assets/BOM.xlsx | Bin 0 -> 15342 bytes assets/equitherm calc.xlsx | Bin 0 -> 23079 bytes build/otgateway.ino.bin | Bin 432752 -> 0 bytes lib/CustomOpenTherm/CustomOpenTherm.h | 106 ++ {src/lib => lib/Equitherm}/Equitherm.h | 23 +- otgateway.ino | 4 - platformio.ini | 28 + src/HomeAssistantHelper.h | 1594 +++++++++++++----------- src/MainTask.h | 92 +- src/MqttTask.h | 35 +- src/OpenThermTask.h | 602 ++++----- src/RegulatorTask.h | 85 +- src/SensorsTask.h | 12 +- src/Settings.h | 14 +- src/WifiManagerTask.h | 86 +- src/defines.h | 10 +- src/lib/CustomOpenTherm.h | 47 - src/main.cpp | 3 +- 19 files changed, 1479 insertions(+), 1267 deletions(-) create mode 100644 assets/BOM.xlsx create mode 100644 assets/equitherm calc.xlsx delete mode 100644 build/otgateway.ino.bin create mode 100644 lib/CustomOpenTherm/CustomOpenTherm.h rename {src/lib => lib/Equitherm}/Equitherm.h (96%) delete mode 100644 otgateway.ino create mode 100644 platformio.ini delete mode 100644 src/lib/CustomOpenTherm.h diff --git a/.gitignore b/.gitignore index e69de29..89cc49c 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,5 @@ +.pio +.vscode/.browse.c_cpp.db* +.vscode/c_cpp_properties.json +.vscode/launch.json +.vscode/ipch diff --git a/assets/BOM.xlsx b/assets/BOM.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8dc213629c73051eb1501ed889fe3d24a0428950 GIT binary patch literal 15342 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 LW(c;Nzpnlt0_l7( literal 0 HcmV?d00001 diff --git a/assets/equitherm calc.xlsx b/assets/equitherm calc.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..832aeb864678b1fa8a732066a9e037ad0cbb6ceb GIT binary patch literal 23079 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

dtaf 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

    la23?WVK`3SUv^%=gO9HxUpjj5qx( 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 BMi2l1 diff --git a/lib/CustomOpenTherm/CustomOpenTherm.h b/lib/CustomOpenTherm/CustomOpenTherm.h new file mode 100644 index 0000000..5fc1e3b --- /dev/null +++ b/lib/CustomOpenTherm/CustomOpenTherm.h @@ -0,0 +1,106 @@ +#include +#include + +extern SchedulerClass Scheduler; + +class CustomOpenTherm : public OpenTherm { +private: + unsigned long send_ts = millis(); + void(*handleSendRequestCallback)(unsigned long, unsigned long, OpenThermResponseStatus status, byte attempt); + +public: + CustomOpenTherm(int inPin = 4, int outPin = 5, bool isSlave = false) : OpenTherm(inPin, outPin, isSlave) {} + void setHandleSendRequestCallback(void(*handleSendRequestCallback)(unsigned long, unsigned long, OpenThermResponseStatus status, byte attempt)) { + this->handleSendRequestCallback = handleSendRequestCallback; + } + + unsigned long sendRequest(unsigned long request, byte attempts = 5, byte _attempt = 0) { + _attempt++; + while (send_ts > 0 && millis() - send_ts < 200) { + Scheduler.yield(); + } + + unsigned long _response; + if (!sendRequestAync(request)) { + _response = 0; + } else { + while (!isReady()) { + Scheduler.yield(); + process(); + } + + _response = getLastResponse(); + } + + if (handleSendRequestCallback != NULL) { + handleSendRequestCallback(request, _response, getLastResponseStatus(), _attempt); + } + + send_ts = millis(); + if (getLastResponseStatus() == OpenThermResponseStatus::SUCCESS || _attempt >= attempts) { + return _response; + } else { + return sendRequest(request, attempts, _attempt); + } + } + + unsigned long setBoilerStatus(bool enableCentralHeating, bool enableHotWater, bool enableCooling, bool enableOutsideTemperatureCompensation, bool enableCentralHeating2, bool summerWinterMode, bool dhwBlocking) { + return sendRequest(buildSetBoilerStatusRequest(enableCentralHeating, enableHotWater, enableCooling, enableOutsideTemperatureCompensation, enableCentralHeating2, summerWinterMode, dhwBlocking)); + } + + unsigned long buildSetBoilerStatusRequest(bool enableCentralHeating, bool enableHotWater, bool enableCooling, bool enableOutsideTemperatureCompensation, bool enableCentralHeating2, bool summerWinterMode, bool dhwBlocking) { + unsigned int data = enableCentralHeating | (enableHotWater << 1) | (enableCooling << 2) | (enableOutsideTemperatureCompensation << 3) | (enableCentralHeating2 << 4) | (summerWinterMode << 5) | (dhwBlocking << 6); + data <<= 8; + return buildRequest(OpenThermMessageType::READ_DATA, OpenThermMessageID::Status, data); + } + + bool setBoilerTemperature(float temperature) { + unsigned int data = temperatureToData(temperature); + unsigned long response = sendRequest(buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::TSet, data)); + return isValidResponse(response); + } + + bool setBoilerTemperature2(float temperature) { + unsigned int data = temperatureToData(temperature); + unsigned long response = sendRequest(buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::TsetCH2, data)); + return isValidResponse(response); + } + + bool sendBoilerReset() { + unsigned int data = 1; + data <<= 8; + unsigned long response = sendRequest(buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::Command, data)); + return isValidResponse(response); + } + + bool sendServiceReset() { + unsigned int data = 10; + data <<= 8; + unsigned long response = sendRequest(buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::Command, data)); + return isValidResponse(response); + } + + bool sendWaterFilling() { + unsigned int data = 2; + data <<= 8; + unsigned long response = sendRequest(buildRequest(OpenThermMessageType::WRITE_DATA, OpenThermMessageID::Command, data)); + return isValidResponse(response); + } + + // converters + float f88(unsigned long response) { + const byte valueLB = response & 0xFF; + const byte valueHB = (response >> 8) & 0xFF; + + float value = (int8_t) valueHB; + return value + (float)valueLB / 256.0; + } + + int16_t s16(unsigned long response) { + const byte valueLB = response & 0xFF; + const byte valueHB = (response >> 8) & 0xFF; + + int16_t value = valueHB; + return ((value << 8) + valueLB); + } +}; diff --git a/src/lib/Equitherm.h b/lib/Equitherm/Equitherm.h similarity index 96% rename from src/lib/Equitherm.h rename to lib/Equitherm/Equitherm.h index 864a4f3..41cb046 100644 --- a/src/lib/Equitherm.h +++ b/lib/Equitherm/Equitherm.h @@ -1,4 +1,3 @@ -#pragma once #include #if defined(EQUITHERM_INTEGER) @@ -11,6 +10,13 @@ typedef float datatype; class Equitherm { public: + datatype targetTemp = 0; + datatype indoorTemp = 0; + datatype outdoorTemp = 0; + float Kn = 0.0; + float Kk = 0.0; + float Kt = 0.0; + Equitherm() {} // kn, kk, kt @@ -26,13 +32,6 @@ public: _maxOut = max_output; } - datatype targetTemp = 0; - datatype indoorTemp = 0; - datatype outdoorTemp = 0; - float Kn = 0.0; - float Kk = 0.0; - float Kt = 0.0; - // возвращает новое значение при вызове datatype getResult() { datatype output = getResultN() + getResultK() + getResultT(); @@ -40,6 +39,9 @@ public: return output; } +private: + int _minOut = 20, _maxOut = 90; + // температура контура отопления в зависимости от наружной температуры datatype getResultN() { float a = (-0.21 * Kn) - 0.06; // a = -0,21k — 0,06 @@ -56,9 +58,6 @@ public: // Расчет поправки (ошибки) термостата datatype getResultT() { - return (targetTemp - indoorTemp) * Kt; + return constrain((targetTemp - indoorTemp), -2, 2) * Kt; } - -private: - int _minOut = 20, _maxOut = 90; }; \ No newline at end of file diff --git a/otgateway.ino b/otgateway.ino deleted file mode 100644 index 6068fe7..0000000 --- a/otgateway.ino +++ /dev/null @@ -1,4 +0,0 @@ -/* - This file is needed by the Arduino IDE because the ino file needs to be named as the directory name. - Don't worry, the Arduino compiler will "merge" all files, including src/main.cpp -*/ diff --git a/platformio.ini b/platformio.ini new file mode 100644 index 0000000..7a46eef --- /dev/null +++ b/platformio.ini @@ -0,0 +1,28 @@ +; PlatformIO Project Configuration File +; +; Build options: build flags, source filter +; Upload options: custom upload port, speed and extra flags +; Library options: dependencies, extra library storages +; Advanced options: extra scripting +; +; Please visit documentation for the other options and examples +; https://docs.platformio.org/page/projectconf.html + +[env:d1_mini_pro] +platform = espressif8266 +board = d1_mini_pro +framework = arduino +lib_deps = + nrwiersma/ESP8266Scheduler@^1.0 + arduino-libraries/NTPClient@^3.2.1 + bblanchon/ArduinoJson@^6.20.0 + ihormelnyk/OpenTherm Library@^1.1.4 + knolleary/PubSubClient@^2.8 + jandrassy/TelnetStream@^1.2.4 + gyverlibs/EEManager@^2.0 + gyverlibs/GyverPID@^3.3 + gyverlibs/microDS18B20@^3.10 + https://github.com/tzapu/WiFiManager.git#v2.0.16-rc.2 +build_flags = -D PIO_FRAMEWORK_ARDUINO_LWIP2_HIGHER_BANDWIDTH +upload_speed = 921600 +monitor_speed = 115200 diff --git a/src/HomeAssistantHelper.h b/src/HomeAssistantHelper.h index c00a723..a3d6263 100644 --- a/src/HomeAssistantHelper.h +++ b/src/HomeAssistantHelper.h @@ -29,28 +29,28 @@ public: bool publishSelectOutdoorTempSource(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = F("{\"outdoorTempSource\": {% if value == 'Boiler' %}0{% elif value == 'Manual' %}1{% elif value == 'External' %}2{% endif %}}"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"outdoorTempSource\": {% if value == 'Boiler' %}0{% elif value == 'Manual' %}1{% elif value == 'External' %}2{% endif %}}"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_outdoorTempSource"; - doc["object_id"] = _prefix + "_outdoorTempSource"; - doc["entity_category"] = "config"; - doc["name"] = "Outdoor temperature source"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = F("{% if value_json.outdoorTempSource == 0 %}Boiler{% elif value_json.outdoorTempSource == 1 %}Manual{% elif value_json.outdoorTempSource == 2 %}External{% endif %}"); - doc["options"][0] = F("Boiler"); - doc["options"][1] = F("Manual"); - doc["options"][2] = F("External"); + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_outdoorTempSource"); + doc[F("object_id")] = _prefix + F("_outdoorTempSource"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Outdoor temperature source"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{% if value_json.outdoorTempSource == 0 %}Boiler{% elif value_json.outdoorTempSource == 1 %}Manual{% elif value_json.outdoorTempSource == 2 %}External{% endif %}"); + doc[F("options")][0] = F("Boiler"); + doc[F("options")][1] = F("Manual"); + doc[F("options")][2] = F("External"); - client.beginPublish((F("homeassistant/select/") + _prefix + "/outdoorTempSource/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/select/") + _prefix + F("/outdoorTempSource/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -60,29 +60,29 @@ public: bool publishSwitchDebug(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_debug"; - doc["object_id"] = _prefix + "_debug"; - doc["entity_category"] = "config"; - doc["name"] = "Debug"; - doc["icon"] = "mdi:code-braces"; - doc["state_topic"] = _prefix + F("/settings"); - doc["state_on"] = true; - doc["state_off"] = false; - doc["value_template"] = "{{ value_json.debug }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["payload_on"] = "{\"debug\": true}"; - doc["payload_off"] = "{\"debug\": false}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_debug"); + doc[F("object_id")] = _prefix + F("_debug"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Debug"); + doc[F("icon")] = F("mdi:code-braces"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.debug }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("payload_on")] = F("{\"debug\": true}"); + doc[F("payload_off")] = F("{\"debug\": false}"); - client.beginPublish((F("homeassistant/switch/") + _prefix + "/debug/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/debug/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -93,29 +93,29 @@ public: bool publishSwitchEmergency(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_emergency"; - doc["object_id"] = _prefix + "_emergency"; - doc["entity_category"] = "config"; - doc["name"] = "Use emergency"; - doc["icon"] = "mdi:sun-snowflake-variant"; - doc["state_topic"] = _prefix + F("/settings"); - doc["state_on"] = true; - doc["state_off"] = false; - doc["value_template"] = "{{ value_json.emergency.enable }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["payload_on"] = "{\"emergency\": {\"enable\" : true}}"; - doc["payload_off"] = "{\"emergency\": {\"enable\" : false}}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_emergency"); + doc[F("object_id")] = _prefix + F("_emergency"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Use emergency"); + doc[F("icon")] = F("mdi:sun-snowflake-variant"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.emergency.enable }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("payload_on")] = F("{\"emergency\": {\"enable\" : true}}"); + doc[F("payload_off")] = F("{\"emergency\": {\"enable\" : false}}"); - client.beginPublish((F("homeassistant/switch/") + _prefix + "/emergency/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/emergency/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -125,31 +125,31 @@ public: bool publishNumberEmergencyTarget(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_emergency_target"; - doc["object_id"] = _prefix + "_emergency_target"; - doc["entity_category"] = "config"; - doc["device_class"] = "temperature"; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "Emergency target temp"; - doc["icon"] = "mdi:thermometer-alert"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.emergency.target|float(0)|round(1) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"emergency\": {\"target\" : {{ value }}}}"; - doc["min"] = 5; - doc["max"] = 50; - doc["step"] = 0.5; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_emergency_target"); + doc[F("object_id")] = _prefix + F("_emergency_target"); + doc[F("entity_category")] = F("config"); + doc[F("device_class")] = F("temperature"); + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("Emergency target temp"); + doc[F("icon")] = F("mdi:thermometer-alert"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.emergency.target|float(0)|round(1) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"emergency\": {\"target\" : {{ value }}}}"); + doc[F("min")] = 5; + doc[F("max")] = 50; + doc[F("step")] = 0.5; - client.beginPublish((F("homeassistant/number/") + _prefix + "/emergency_target/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/emergency_target/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -159,31 +159,31 @@ public: bool publishSwitchEmergencyUseEquitherm(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/settings"); - doc["availability"]["value_template"] = F("{{ iif(value_json.outdoorTempSource != 1, 'online', 'offline') }}"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/settings"); + doc[F("availability")][F("value_template")] = F("{{ iif(value_json.outdoorTempSource != 1, 'online', 'offline') }}"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_emergency_use_equitherm"; - doc["object_id"] = _prefix + "_emergency_use_equitherm"; - doc["entity_category"] = "config"; - doc["name"] = "Use equitherm in emergency"; - doc["icon"] = "mdi:snowflake-alert"; - doc["state_topic"] = _prefix + F("/settings"); - doc["state_on"] = true; - doc["state_off"] = false; - doc["value_template"] = "{{ value_json.emergency.useEquitherm }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["payload_on"] = "{\"emergency\": {\"useEquitherm\" : true}}"; - doc["payload_off"] = "{\"emergency\": {\"useEquitherm\" : false}}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_emergency_use_equitherm"); + doc[F("object_id")] = _prefix + F("_emergency_use_equitherm"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Use equitherm in emergency"); + doc[F("icon")] = F("mdi:snowflake-alert"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.emergency.useEquitherm }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("payload_on")] = F("{\"emergency\": {\"useEquitherm\" : true}}"); + doc[F("payload_off")] = F("{\"emergency\": {\"useEquitherm\" : false}}"); - client.beginPublish((F("homeassistant/switch/") + _prefix + "/emergency_use_equitherm/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/emergency_use_equitherm/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -194,30 +194,63 @@ public: bool publishSwitchHeating(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_heating"; - doc["object_id"] = _prefix + "_heating"; - doc["entity_category"] = "config"; - doc["name"] = "Heating"; - doc["icon"] = "mdi:radiator"; - doc["state_topic"] = _prefix + F("/settings"); - doc["state_on"] = true; - doc["state_off"] = false; - doc["value_template"] = "{{ value_json.heating.enable }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["payload_on"] = "{\"heating\": {\"enable\" : true}}"; - doc["payload_off"] = "{\"heating\": {\"enable\" : false}}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_heating"); + doc[F("object_id")] = _prefix + F("_heating"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Heating"); + doc[F("icon")] = F("mdi:radiator"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.heating.enable }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("payload_on")] = F("{\"heating\": {\"enable\" : true}}"); + doc[F("payload_off")] = F("{\"heating\": {\"enable\" : false}}"); - client.beginPublish((F("homeassistant/switch/") + _prefix + "/heating/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/heating/config")).c_str(), measureJson(doc), true); + //BufferingPrint bufferedClient(client, 32); + //serializeJson(doc, bufferedClient); + //bufferedClient.flush(); + serializeJson(doc, client); + return client.endPublish(); + } + + bool publishSwitchHeatingTurbo(bool enabledByDefault = true) { + StaticJsonDocument<1536> doc; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; + if (_deviceConfigUrl) { + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; + } + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_heating_turbo"); + doc[F("object_id")] = _prefix + F("_heating_turbo"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Turbo heating"); + doc[F("icon")] = F("mdi:rocket-launch-outline"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.heating.turbo }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("payload_on")] = F("{\"heating\": {\"turbo\" : true}}"); + doc[F("payload_off")] = F("{\"heating\": {\"turbo\" : false}}"); + + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/heating_turbo/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -227,32 +260,32 @@ public: bool publishNumberHeatingTarget(byte minTemp = 20, byte maxTemp = 90, bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_heating_target"; - doc["object_id"] = _prefix + "_heating_target"; - doc["entity_category"] = "config"; - doc["device_class"] = "temperature"; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "Heating target"; - doc["icon"] = "mdi:radiator"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.heating.target|float(0)|round(1) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"heating\": {\"target\" : {{ value }}}}"; - doc["min"] = minTemp; - doc["max"] = maxTemp; - doc["step"] = 0.5; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_heating_target"); + doc[F("object_id")] = _prefix + F("_heating_target"); + doc[F("entity_category")] = F("config"); + doc[F("device_class")] = F("temperature"); + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("Heating target"); + doc[F("icon")] = F("mdi:radiator"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.heating.target|float(0)|round(1) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"heating\": {\"target\" : {{ value }}}}"); + doc[F("min")] = minTemp; + doc[F("max")] = maxTemp; + doc[F("step")] = 0.5; - client.beginPublish((F("homeassistant/number/") + _prefix + "/heating_target/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/heating_target/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -262,31 +295,31 @@ public: bool publishNumberHeatingHysteresis(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_heating_hysteresis"; - doc["object_id"] = _prefix + "_heating_hysteresis"; - doc["entity_category"] = "config"; - doc["device_class"] = "temperature"; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "Heating hysteresis"; - doc["icon"] = "mdi:altimeter"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.heating.hysteresis|float(0)|round(1) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"heating\": {\"hysteresis\" : {{ value }}}}"; - doc["min"] = 0; - doc["max"] = 5; - doc["step"] = 0.1; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_heating_hysteresis"); + doc[F("object_id")] = _prefix + F("_heating_hysteresis"); + doc[F("entity_category")] = F("config"); + doc[F("device_class")] = F("temperature"); + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("Heating hysteresis"); + doc[F("icon")] = F("mdi:altimeter"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.heating.hysteresis|float(0)|round(1) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"heating\": {\"hysteresis\" : {{ value }}}}"); + doc[F("min")] = 0; + doc[F("max")] = 5; + doc[F("step")] = 0.1; - client.beginPublish((F("homeassistant/number/") + _prefix + "/heating_hysteresis/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/heating_hysteresis/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -296,28 +329,28 @@ public: bool publishSensorHeatingSetpoint(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_heating_setpoint"; - doc["object_id"] = _prefix + "_heating_setpoint"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "temperature"; - doc["state_class"] = "measurement"; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "Heating setpoint"; - doc["icon"] = "mdi:coolant-temperature"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ value_json.parameters.heatingSetpoint|int(0) }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_heating_setpoint"); + doc[F("object_id")] = _prefix + F("_heating_setpoint"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("temperature"); + doc[F("state_class")] = F("measurement"); + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("Heating setpoint"); + doc[F("icon")] = F("mdi:coolant-temperature"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ value_json.parameters.heatingSetpoint|int(0) }}"); - client.beginPublish((F("homeassistant/sensor/") + _prefix + "/heating_setpoint/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/sensor/") + _prefix + F("/heating_setpoint/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -328,30 +361,30 @@ public: bool publishSwitchDHW(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_dhw"; - doc["object_id"] = _prefix + "_dhw"; - doc["entity_category"] = "config"; - doc["name"] = "DHW"; - doc["icon"] = "mdi:water-pump"; - doc["state_topic"] = _prefix + F("/settings"); - doc["state_on"] = true; - doc["state_off"] = false; - doc["value_template"] = "{{ value_json.dhw.enable }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["payload_on"] = "{\"dhw\": {\"enable\" : true}}"; - doc["payload_off"] = "{\"dhw\": {\"enable\" : false}}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_dhw"); + doc[F("object_id")] = _prefix + F("_dhw"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("DHW"); + doc[F("icon")] = F("mdi:water-pump"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.dhw.enable }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("payload_on")] = F("{\"dhw\": {\"enable\" : true}}"); + doc[F("payload_off")] = F("{\"dhw\": {\"enable\" : false}}"); - client.beginPublish((F("homeassistant/switch/") + _prefix + "/dhw/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/dhw/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -361,32 +394,32 @@ public: bool publishNumberDHWTarget(byte minTemp = 40, byte maxTemp = 60, bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_dhw_target"; - doc["object_id"] = _prefix + "_dhw_target"; - doc["entity_category"] = "config"; - doc["device_class"] = "temperature"; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "DHW target"; - doc["icon"] = "mdi:water-pump"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.dhw.target|int(0) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"dhw\": {\"target\" : {{ value|int(0) }}}}"; - doc["min"] = minTemp; - doc["max"] = maxTemp; - doc["step"] = 1; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_dhw_target"); + doc[F("object_id")] = _prefix + F("_dhw_target"); + doc[F("entity_category")] = F("config"); + doc[F("device_class")] = F("temperature"); + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("DHW target"); + doc[F("icon")] = F("mdi:water-pump"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.dhw.target|int(0) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"dhw\": {\"target\" : {{ value|int(0) }}}}"); + doc[F("min")] = minTemp; + doc[F("max")] = maxTemp; + doc[F("step")] = 1; - client.beginPublish((F("homeassistant/number/") + _prefix + "/dhw_target/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/dhw_target/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -397,29 +430,29 @@ public: bool publishSwitchPID(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_pid"; - doc["object_id"] = _prefix + "_pid"; - doc["entity_category"] = "config"; - doc["name"] = "PID"; - doc["icon"] = "mdi:chart-bar-stacked"; - doc["state_topic"] = _prefix + F("/settings"); - doc["state_on"] = true; - doc["state_off"] = false; - doc["value_template"] = "{{ value_json.pid.enable }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["payload_on"] = "{\"pid\": {\"enable\" : true}}"; - doc["payload_off"] = "{\"pid\": {\"enable\" : false}}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_pid"); + doc[F("object_id")] = _prefix + F("_pid"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("PID"); + doc[F("icon")] = F("mdi:chart-bar-stacked"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.pid.enable }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("payload_on")] = F("{\"pid\": {\"enable\" : true}}"); + doc[F("payload_off")] = F("{\"pid\": {\"enable\" : false}}"); - client.beginPublish((F("homeassistant/switch/") + _prefix + "/pid/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/pid/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -429,28 +462,28 @@ public: bool publishNumberPIDFactorP(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["unique_id"] = _prefix + "_pid_p"; - doc["object_id"] = _prefix + "_pid_p"; - doc["entity_category"] = "config"; - doc["name"] = "PID factor P"; - doc["icon"] = "mdi:alpha-p-circle-outline"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.pid.p_factor|float(0)|round(3) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"pid\": {\"p_factor\" : {{ value }}}}"; - doc["min"] = 0.001; - doc["max"] = 10; - doc["step"] = 0.001; + doc[F("unique_id")] = _prefix + F("_pid_p"); + doc[F("object_id")] = _prefix + F("_pid_p"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("PID factor P"); + doc[F("icon")] = F("mdi:alpha-p-circle-outline"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.pid.p_factor|float(0)|round(3) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"pid\": {\"p_factor\" : {{ value }}}}"); + doc[F("min")] = 0.001; + doc[F("max")] = 10; + doc[F("step")] = 0.001; - client.beginPublish((F("homeassistant/number/") + _prefix + "/pid_p_factor/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/pid_p_factor/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -460,28 +493,28 @@ public: bool publishNumberPIDFactorI(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["unique_id"] = _prefix + "_pid_i"; - doc["object_id"] = _prefix + "_pid_i"; - doc["entity_category"] = "config"; - doc["name"] = "PID factor I"; - doc["icon"] = "mdi:alpha-i-circle-outline"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.pid.i_factor|float(0)|round(3) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"pid\": {\"i_factor\" : {{ value }}}}"; - doc["min"] = 0; - doc["max"] = 10; - doc["step"] = 0.001; + doc[F("unique_id")] = _prefix + F("_pid_i"); + doc[F("object_id")] = _prefix + F("_pid_i"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("PID factor I"); + doc[F("icon")] = F("mdi:alpha-i-circle-outline"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.pid.i_factor|float(0)|round(3) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"pid\": {\"i_factor\" : {{ value }}}}"); + doc[F("min")] = 0; + doc[F("max")] = 10; + doc[F("step")] = 0.001; - client.beginPublish((F("homeassistant/number/") + _prefix + "/pid_i_factor/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/pid_i_factor/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -491,28 +524,28 @@ public: bool publishNumberPIDFactorD(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["unique_id"] = _prefix + "_pid_d"; - doc["object_id"] = _prefix + "_pid_d"; - doc["entity_category"] = "config"; - doc["name"] = "PID factor D"; - doc["icon"] = "mdi:alpha-d-circle-outline"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.pid.d_factor|float(0)|round(3) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"pid\": {\"d_factor\" : {{ value }}}}"; - doc["min"] = 0; - doc["max"] = 10; - doc["step"] = 0.001; + doc[F("unique_id")] = _prefix + F("_pid_d"); + doc[F("object_id")] = _prefix + F("_pid_d"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("PID factor D"); + doc[F("icon")] = F("mdi:alpha-d-circle-outline"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.pid.d_factor|float(0)|round(3) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"pid\": {\"d_factor\" : {{ value }}}}"); + doc[F("min")] = 0; + doc[F("max")] = 10; + doc[F("step")] = 0.001; - client.beginPublish((F("homeassistant/number/") + _prefix + "/pid_d_factor/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/pid_d_factor/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -523,29 +556,29 @@ public: bool publishSwitchEquitherm(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_equitherm"; - doc["object_id"] = _prefix + "_equitherm"; - doc["entity_category"] = "config"; - doc["name"] = "Equitherm"; - doc["icon"] = "mdi:sun-snowflake-variant"; - doc["state_topic"] = _prefix + F("/settings"); - doc["state_on"] = true; - doc["state_off"] = false; - doc["value_template"] = "{{ value_json.equitherm.enable }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["payload_on"] = "{\"equitherm\": {\"enable\" : true}}"; - doc["payload_off"] = "{\"equitherm\": {\"enable\" : false}}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_equitherm"); + doc[F("object_id")] = _prefix + F("_equitherm"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Equitherm"); + doc[F("icon")] = F("mdi:sun-snowflake-variant"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.equitherm.enable }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("payload_on")] = F("{\"equitherm\": {\"enable\" : true}}"); + doc[F("payload_off")] = F("{\"equitherm\": {\"enable\" : false}}"); - client.beginPublish((F("homeassistant/switch/") + _prefix + "/equitherm/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/equitherm/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -555,28 +588,28 @@ public: bool publishNumberEquithermFactorN(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["unique_id"] = _prefix + "_equitherm_n"; - doc["object_id"] = _prefix + "_equitherm_n"; - doc["entity_category"] = "config"; - doc["name"] = "Equitherm factor N"; - doc["icon"] = "mdi:alpha-n-circle-outline"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.equitherm.n_factor|float(0)|round(3) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"equitherm\": {\"n_factor\" : {{ value }}}}"; - doc["min"] = 0.001; - doc["max"] = 5; - doc["step"] = 0.001; + doc[F("unique_id")] = _prefix + F("_equitherm_n"); + doc[F("object_id")] = _prefix + F("_equitherm_n"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Equitherm factor N"); + doc[F("icon")] = F("mdi:alpha-n-circle-outline"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.equitherm.n_factor|float(0)|round(3) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"equitherm\": {\"n_factor\" : {{ value }}}}"); + doc[F("min")] = 0.001; + doc[F("max")] = 5; + doc[F("step")] = 0.001; - client.beginPublish((F("homeassistant/number/") + _prefix + "/equitherm_n_factor/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/equitherm_n_factor/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -586,28 +619,28 @@ public: bool publishNumberEquithermFactorK(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["unique_id"] = _prefix + "_equitherm_k"; - doc["object_id"] = _prefix + "_equitherm_k"; - doc["entity_category"] = "config"; - doc["name"] = "Equitherm factor K"; - doc["icon"] = "mdi:alpha-k-circle-outline"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.equitherm.k_factor|float(0)|round(2) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"equitherm\": {\"k_factor\" : {{ value }}}}"; - doc["min"] = 0; - doc["max"] = 10; - doc["step"] = 0.01; + doc[F("unique_id")] = _prefix + F("_equitherm_k"); + doc[F("object_id")] = _prefix + F("_equitherm_k"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Equitherm factor K"); + doc[F("icon")] = F("mdi:alpha-k-circle-outline"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.equitherm.k_factor|float(0)|round(2) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"equitherm\": {\"k_factor\" : {{ value }}}}"); + doc[F("min")] = 0; + doc[F("max")] = 10; + doc[F("step")] = 0.01; - client.beginPublish((F("homeassistant/number/") + _prefix + "/equitherm_k_factor/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/equitherm_k_factor/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -617,30 +650,30 @@ public: bool publishNumberEquithermFactorT(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/settings"); - doc["availability"]["value_template"] = F("{{ iif(value_json.pid.enable, 'offline', 'online') }}"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/settings"); + doc[F("availability")][F("value_template")] = F("{{ iif(value_json.pid.enable, 'offline', 'online') }}"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["unique_id"] = _prefix + "_equitherm_t"; - doc["object_id"] = _prefix + "_equitherm_t"; - doc["entity_category"] = "config"; - doc["name"] = "Equitherm factor T"; - doc["icon"] = "mdi:alpha-t-circle-outline"; - doc["state_topic"] = _prefix + F("/settings"); - doc["value_template"] = "{{ value_json.equitherm.t_factor|float(0)|round(2) }}"; - doc["command_topic"] = _prefix + "/settings/set"; - doc["command_template"] = "{\"equitherm\": {\"t_factor\" : {{ value }}}}"; - doc["min"] = 0; - doc["max"] = 10; - doc["step"] = 0.01; + doc[F("unique_id")] = _prefix + F("_equitherm_t"); + doc[F("object_id")] = _prefix + F("_equitherm_t"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Equitherm factor T"); + doc[F("icon")] = F("mdi:alpha-t-circle-outline"); + doc[F("state_topic")] = _prefix + F("/settings"); + doc[F("value_template")] = F("{{ value_json.equitherm.t_factor|float(0)|round(2) }}"); + doc[F("command_topic")] = _prefix + F("/settings/set"); + doc[F("command_template")] = F("{\"equitherm\": {\"t_factor\" : {{ value }}}}"); + doc[F("min")] = 0; + doc[F("max")] = 10; + doc[F("step")] = 0.01; - client.beginPublish((F("homeassistant/number/") + _prefix + "/equitherm_t_factor/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/equitherm_t_factor/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -651,29 +684,29 @@ public: bool publishSwitchTuning(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_tuning"; - doc["object_id"] = _prefix + "_tuning"; - doc["entity_category"] = "config"; - doc["name"] = "Tuning"; - doc["icon"] = "mdi:tune-vertical"; - doc["state_topic"] = _prefix + F("/state"); - doc["state_on"] = true; - doc["state_off"] = false; - doc["value_template"] = "{{ value_json.tuning.enable }}"; - doc["command_topic"] = _prefix + "/state/set"; - doc["payload_on"] = "{\"tuning\": {\"enable\" : true}}"; - doc["payload_off"] = "{\"tuning\": {\"enable\" : false}}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_tuning"); + doc[F("object_id")] = _prefix + F("_tuning"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Tuning"); + doc[F("icon")] = F("mdi:tune-vertical"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("state_on")] = true; + doc[F("state_off")] = false; + doc[F("value_template")] = F("{{ value_json.tuning.enable }}"); + doc[F("command_topic")] = _prefix + F("/state/set"); + doc[F("payload_on")] = F("{\"tuning\": {\"enable\" : true}}"); + doc[F("payload_off")] = F("{\"tuning\": {\"enable\" : false}}"); - client.beginPublish((F("homeassistant/switch/") + _prefix + "/tuning/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/switch/") + _prefix + F("/tuning/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -683,29 +716,29 @@ public: bool publishSelectTuningRegulator(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["availability_mode"] = F("all"); - doc["command_topic"] = _prefix + "/state/set"; - doc["command_template"] = F("{\"tuning\": {\"regulator\": {% if value == 'Equitherm' %}0{% elif value == 'PID' %}1{% endif %}}}"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("availability_mode")] = F("all"); + doc[F("command_topic")] = _prefix + F("/state/set"); + doc[F("command_template")] = F("{\"tuning\": {\"regulator\": {% if value == 'Equitherm' %}0{% elif value == 'PID' %}1{% endif %}}}"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_tuning_regulator"; - doc["object_id"] = _prefix + "_tuning_regulator"; - doc["entity_category"] = "config"; - doc["name"] = "Tuning regulator"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = F("{% if value_json.tuning.regulator == 0 %}Equitherm{% elif value_json.tuning.regulator == 1 %}PID{% endif %}"); - doc["options"][0] = F("Equitherm"); - doc["options"][1] = F("PID"); + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_tuning_regulator"); + doc[F("object_id")] = _prefix + F("_tuning_regulator"); + doc[F("entity_category")] = F("config"); + doc[F("name")] = F("Tuning regulator"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{% if value_json.tuning.regulator == 0 %}Equitherm{% elif value_json.tuning.regulator == 1 %}PID{% endif %}"); + doc[F("options")][0] = F("Equitherm"); + doc[F("options")][1] = F("PID"); - client.beginPublish((F("homeassistant/select/") + _prefix + "/tuning_regulator/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/select/") + _prefix + F("/tuning_regulator/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -716,26 +749,26 @@ public: bool publishBinSensorStatus(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_status"; - doc["object_id"] = _prefix + "_status"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "problem"; - doc["name"] = "Status"; - doc["icon"] = "mdi:list-status"; - doc["state_topic"] = _prefix + F("/status"); - doc["value_template"] = "{{ iif(value == 'online', 'OFF', 'ON') }}"; - doc["expire_after"] = 60; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_status"); + doc[F("object_id")] = _prefix + F("_status"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("problem"); + doc[F("name")] = F("Status"); + doc[F("icon")] = F("mdi:list-status"); + doc[F("state_topic")] = _prefix + F("/status"); + doc[F("value_template")] = F("{{ iif(value == 'online', 'OFF', 'ON') }}"); + doc[F("expire_after")] = 60; - client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + "/status/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + F("/status/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -745,25 +778,25 @@ public: bool publishBinSensorOtStatus(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_ot_status"; - doc["object_id"] = _prefix + "_ot_status"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "problem"; - doc["name"] = "Opentherm status"; - doc["icon"] = "mdi:list-status"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ iif(value_json.states.otStatus, 'OFF', 'ON') }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_ot_status"); + doc[F("object_id")] = _prefix + F("_ot_status"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("problem"); + doc[F("name")] = F("Opentherm status"); + doc[F("icon")] = F("mdi:list-status"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ iif(value_json.states.otStatus, 'OFF', 'ON') }}"); - client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + "/ot_status/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + F("/ot_status/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -773,26 +806,26 @@ public: bool publishBinSensorHeating(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_heating"; - doc["object_id"] = _prefix + "_heating"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "running"; - doc["name"] = "Heating"; - doc["icon"] = "mdi:radiator"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = F("{{ iif(value_json.states.heating, 'ON', 'OFF') }}"); + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_heating"); + doc[F("object_id")] = _prefix + F("_heating"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("running"); + doc[F("name")] = F("Heating"); + doc[F("icon")] = F("mdi:radiator"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ iif(value_json.states.heating, 'ON', 'OFF') }}"); - client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + "/heating/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + F("/heating/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -802,26 +835,26 @@ public: bool publishBinSensorDHW(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_dhw"; - doc["object_id"] = _prefix + "_dhw"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "running"; - doc["name"] = "DHW"; - doc["icon"] = "mdi:water-pump"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = F("{{ iif(value_json.states.dhw, 'ON', 'OFF') }}"); + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_dhw"); + doc[F("object_id")] = _prefix + F("_dhw"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("running"); + doc[F("name")] = F("DHW"); + doc[F("icon")] = F("mdi:water-pump"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ iif(value_json.states.dhw, 'ON', 'OFF') }}"); - client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + "/dhw/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + F("/dhw/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -831,26 +864,26 @@ public: bool publishBinSensorFlame(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_flame"; - doc["object_id"] = _prefix + "_flame"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "running"; - doc["name"] = "Flame"; - doc["icon"] = "mdi:fire"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = F("{{ iif(value_json.states.flame, 'ON', 'OFF') }}"); + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_flame"); + doc[F("object_id")] = _prefix + F("_flame"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("running"); + doc[F("name")] = F("Flame"); + doc[F("icon")] = F("mdi:fire"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ iif(value_json.states.flame, 'ON', 'OFF') }}"); - client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + "/flame/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + F("/flame/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -860,27 +893,27 @@ public: bool publishBinSensorFault(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/state"); - doc["availability"]["value_template"] = F("{{ iif(value_json.states.otStatus, 'online', 'offline') }}"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/state"); + doc[F("availability")][F("value_template")] = F("{{ iif(value_json.states.otStatus, 'online', 'offline') }}"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_fault"; - doc["object_id"] = _prefix + "_fault"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "problem"; - doc["name"] = "Fault"; - doc["icon"] = "mdi:water-boiler-alert"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ iif(value_json.states.fault, 'ON', 'OFF') }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_fault"); + doc[F("object_id")] = _prefix + F("_fault"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("problem"); + doc[F("name")] = F("Fault"); + doc[F("icon")] = F("mdi:water-boiler-alert"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ iif(value_json.states.fault, 'ON', 'OFF') }}"); - client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + "/fault/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + F("/fault/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -890,26 +923,26 @@ public: bool publishBinSensorDiagnostic(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_diagnostic"; - doc["object_id"] = _prefix + "_diagnostic"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "problem"; - doc["name"] = "Diagnostic"; - doc["icon"] = "mdi:account-wrench"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ iif(value_json.states.diagnostic, 'ON', 'OFF') }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_diagnostic"); + doc[F("object_id")] = _prefix + F("_diagnostic"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("problem"); + doc[F("name")] = F("Diagnostic"); + doc[F("icon")] = F("mdi:account-wrench"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ iif(value_json.states.diagnostic, 'ON', 'OFF') }}"); - client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + "/diagnostic/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/binary_sensor/") + _prefix + F("/diagnostic/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -919,8 +952,35 @@ public: bool publishSensorFaultCode(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/state"); - doc["availability"]["value_template"] = F("{{ iif(value_json.states.fault, 'online', 'offline') }}"); + doc[F("availability")][F("topic")] = _prefix + F("/state"); + doc[F("availability")][F("value_template")] = F("{{ iif(value_json.states.fault, 'online', 'offline') }}"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; + if (_deviceConfigUrl) { + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; + } + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_fault_code"); + doc[F("object_id")] = _prefix + F("_fault_code"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("name")] = F("Fault code"); + doc[F("icon")] = F("mdi:chat-alert-outline"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ \"E%02d\"|format(value_json.states.faultCode) }}"); + + client.beginPublish((F("homeassistant/sensor/") + _prefix + F("/fault_code/config")).c_str(), measureJson(doc), true); + //BufferingPrint bufferedClient(client, 32); + //serializeJson(doc, bufferedClient); + //bufferedClient.flush(); + serializeJson(doc, client); + return client.endPublish(); + } + + bool publishSensorRssi(bool enabledByDefault = false) { + StaticJsonDocument<1536> doc; doc["device"]["identifiers"][0] = _prefix; doc["device"]["sw_version"] = _deviceVersion; doc["device"]["manufacturer"] = _deviceManufacturer; @@ -929,16 +989,20 @@ public: if (_deviceConfigUrl) { doc["device"]["configuration_url"] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_fault_code"; - doc["object_id"] = _prefix + "_fault_code"; - doc["entity_category"] = "diagnostic"; - doc["name"] = "Fault code"; - doc["icon"] = "mdi:chat-alert-outline"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = F("{{ \"E%02d\"|format(value_json.states.faultCode) }}"); - client.beginPublish((F("homeassistant/sensor/") + _prefix + "/fault_code/config").c_str(), measureJson(doc), true); + doc["enabled_by_default"] = enabledByDefault; + doc["unique_id"] = _prefix + "_rssi"; + doc["object_id"] = _prefix + "_rssi"; + doc["entity_category"] = "diagnostic"; + doc["device_class"] = "signal_strength"; + doc["state_class"] = "measurement"; + doc["unit_of_measurement"] = "dBm"; + doc["name"] = "RSSI"; + doc["icon"] = "mdi:signal"; + doc["state_topic"] = _prefix + F("/state"); + doc["value_template"] = "{{ value_json.states.rssi|float(0)|round(1) }}"; + + client.beginPublish((F("homeassistant/sensor/") + _prefix + "/rssi/config").c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -949,28 +1013,28 @@ public: bool publishSensorModulation(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_modulation_level"; - doc["object_id"] = _prefix + "_modulation_level"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "power_factor"; - doc["state_class"] = "measurement"; - doc["unit_of_measurement"] = "%"; - doc["name"] = "Modulation level"; - doc["icon"] = "mdi:fire-circle"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ value_json.sensors.modulation|float(0)|round(0) }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_modulation_level"); + doc[F("object_id")] = _prefix + F("_modulation_level"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("power_factor"); + doc[F("state_class")] = F("measurement"); + doc[F("unit_of_measurement")] = F("%"); + doc[F("name")] = F("Modulation level"); + doc[F("icon")] = F("mdi:fire-circle"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ value_json.sensors.modulation|float(0)|round(0) }}"); - client.beginPublish((F("homeassistant/sensor/") + _prefix + "/modulation/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/sensor/") + _prefix + F("/modulation/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -980,28 +1044,28 @@ public: bool publishSensorPressure(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_pressure"; - doc["object_id"] = _prefix + "_pressure"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "pressure"; - doc["state_class"] = "measurement"; - doc["unit_of_measurement"] = "bar"; - doc["name"] = "Pressure"; - doc["icon"] = "mdi:gauge"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ value_json.sensors.pressure|float(0)|round(2) }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_pressure"); + doc[F("object_id")] = _prefix + F("_pressure"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("pressure"); + doc[F("state_class")] = F("measurement"); + doc[F("unit_of_measurement")] = F("bar"); + doc[F("name")] = F("Pressure"); + doc[F("icon")] = F("mdi:gauge"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ value_json.sensors.pressure|float(0)|round(2) }}"); - client.beginPublish((F("homeassistant/sensor/") + _prefix + "/pressure/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/sensor/") + _prefix + F("/pressure/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -1012,31 +1076,31 @@ public: bool publishNumberIndoorTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - //doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + //doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_indoor_temp"; - doc["object_id"] = _prefix + "_indoor_temp"; - doc["entity_category"] = "config"; - //doc["entity_registry_visible_default"] = false; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "Indoor temperature"; - doc["icon"] = "mdi:home-thermometer"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ value_json.temperatures.indoor|float(0)|round(1) }}"; - doc["command_topic"] = _prefix + "/state/set"; - doc["command_template"] = "{\"temperatures\": {\"indoor\":{{ value }}}}"; - doc["min"] = -70; - doc["max"] = 50; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_indoor_temp"); + doc[F("object_id")] = _prefix + F("_indoor_temp"); + doc[F("entity_category")] = F("config"); + //doc[F("entity_registry_visible_default")] = false; + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("Indoor temperature"); + doc[F("icon")] = F("mdi:home-thermometer"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ value_json.temperatures.indoor|float(0)|round(1) }}"); + doc[F("command_topic")] = _prefix + F("/state/set"); + doc[F("command_template")] = F("{\"temperatures\": {\"indoor\":{{ value }}}}"); + doc[F("min")] = -70; + doc[F("max")] = 50; - client.beginPublish((F("homeassistant/number/") + _prefix + "/indoor_temp/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/indoor_temp/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -1046,30 +1110,30 @@ public: bool publishNumberOutdoorTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_outdoor_temp"; - doc["object_id"] = _prefix + "_outdoor_temp"; - doc["entity_category"] = "config"; - //doc["entity_registry_visible_default"] = false; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "Outdoor temperature"; - doc["icon"] = "mdi:home-thermometer-outline"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ value_json.temperatures.outdoor|float(0)|round(1) }}"; - doc["command_topic"] = _prefix + "/state/set"; - doc["command_template"] = "{\"temperatures\": {\"outdoor\":{{ value }}}}"; - doc["min"] = -70; - doc["max"] = 50; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_outdoor_temp"); + doc[F("object_id")] = _prefix + F("_outdoor_temp"); + doc[F("entity_category")] = F("config"); + //doc[F("entity_registry_visible_default")] = false; + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("Outdoor temperature"); + doc[F("icon")] = F("mdi:home-thermometer-outline"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ value_json.temperatures.outdoor|float(0)|round(1) }}"); + doc[F("command_topic")] = _prefix + F("/state/set"); + doc[F("command_template")] = F("{\"temperatures\": {\"outdoor\":{{ value }}}}"); + doc[F("min")] = -70; + doc[F("max")] = 50; - client.beginPublish((F("homeassistant/number/") + _prefix + "/outdoor_temp/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/number/") + _prefix + F("/outdoor_temp/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -1079,31 +1143,31 @@ public: bool publishSensorOutdoorTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"][0]["topic"] = _prefix + F("/status"); - doc["availability"][1]["topic"] = _prefix + F("/settings"); - doc["availability"][1]["value_template"] = F("{{ iif(value_json.outdoorTempSource == 2, 'online', 'offline') }}"); - doc["availability_mode"] = "any"; - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][0][F("topic")] = _prefix + F("/status"); + doc[F("availability")][1][F("topic")] = _prefix + F("/settings"); + doc[F("availability")][1][F("value_template")] = F("{{ iif(value_json.outdoorTempSource == 2, 'online', 'offline') }}"); + doc[F("availability_mode")] = F("any"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_outdoor_temp"; - doc["object_id"] = _prefix + "_outdoor_temp"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "temperature"; - doc["state_class"] = "measurement"; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "Outdoor temperature"; - doc["icon"] = "mdi:home-thermometer-outline"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ value_json.temperatures.outdoor|float(0)|round(1) }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_outdoor_temp"); + doc[F("object_id")] = _prefix + F("_outdoor_temp"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("temperature"); + doc[F("state_class")] = F("measurement"); + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("Outdoor temperature"); + doc[F("icon")] = F("mdi:home-thermometer-outline"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ value_json.temperatures.outdoor|float(0)|round(1) }}"); - client.beginPublish((F("homeassistant/sensor/") + _prefix + "/outdoor_temp/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/sensor/") + _prefix + F("/outdoor_temp/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -1113,28 +1177,28 @@ public: bool publishSensorHeatingTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_heating_temp"; - doc["object_id"] = _prefix + "_heating_temp"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "temperature"; - doc["state_class"] = "measurement"; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "Heating temperature"; - doc["icon"] = "mdi:radiator"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ value_json.temperatures.heating|float(0)|round(2) }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_heating_temp"); + doc[F("object_id")] = _prefix + F("_heating_temp"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("temperature"); + doc[F("state_class")] = F("measurement"); + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("Heating temperature"); + doc[F("icon")] = F("mdi:radiator"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ value_json.temperatures.heating|float(0)|round(2) }}"); - client.beginPublish((F("homeassistant/sensor/") + _prefix + "/heating_temp/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/sensor/") + _prefix + F("/heating_temp/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -1144,28 +1208,28 @@ public: bool publishSensorDHWTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_dhw_temp"; - doc["object_id"] = _prefix + "_dhw_temp"; - doc["entity_category"] = "diagnostic"; - doc["device_class"] = "temperature"; - doc["state_class"] = "measurement"; - doc["unit_of_measurement"] = "°C"; - doc["name"] = "DHW temperature"; - doc["icon"] = "mdi:water-pump"; - doc["state_topic"] = _prefix + F("/state"); - doc["value_template"] = "{{ value_json.temperatures.dhw|float(0)|round(2) }}"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_dhw_temp"); + doc[F("object_id")] = _prefix + F("_dhw_temp"); + doc[F("entity_category")] = F("diagnostic"); + doc[F("device_class")] = F("temperature"); + doc[F("state_class")] = F("measurement"); + doc[F("unit_of_measurement")] = F("°C"); + doc[F("name")] = F("DHW temperature"); + doc[F("icon")] = F("mdi:water-pump"); + doc[F("state_topic")] = _prefix + F("/state"); + doc[F("value_template")] = F("{{ value_json.temperatures.dhw|float(0)|round(2) }}"); - client.beginPublish((F("homeassistant/sensor/") + _prefix + "/dhw_temp/config").c_str(), measureJson(doc), true); + client.beginPublish((F("homeassistant/sensor/") + _prefix + F("/dhw_temp/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -1175,43 +1239,55 @@ public: bool publishClimateHeating(byte minTemp = 20, byte maxTemp = 90, bool enabledByDefault = true) { - StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + StaticJsonDocument<2048> doc; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_heating"; - doc["object_id"] = _prefix + "_heating"; - doc["name"] = "Heating"; - doc["icon"] = "mdi:radiator"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_heating"); + doc[F("object_id")] = _prefix + F("_heating"); + doc[F("name")] = F("Heating"); + doc[F("icon")] = F("mdi:radiator"); - doc["current_temperature_topic"] = _prefix + F("/state"); - doc["value_template"] = F("{{ value_json.temperatures.indoor|float(0)|round(2) }}"); + doc[F("current_temperature_topic")] = _prefix + F("/state"); + doc[F("current_temperature_template")] = F("{% if value_json.temperatures.indoor|float(0) != 0 %}{{ value_json.temperatures.indoor|float(0)|round(2) }}" + "{% else %}{{ value_json.temperatures.heating|float(0)|round(2) }}{% endif %}"); - doc["temperature_command_topic"] = _prefix + "/settings/set"; - doc["temperature_command_template"] = "{\"heating\": {\"target\" : {{ value }}}}"; + doc[F("temperature_command_topic")] = _prefix + F("/settings/set"); + doc[F("temperature_command_template")] = F("{\"heating\": {\"target\" : {{ value }}}}"); - doc["temperature_state_topic"] = _prefix + F("/settings"); - doc["temperature_state_template"] = F("{{ value_json.heating.target|float(0)|round(1) }}"); + doc[F("temperature_state_topic")] = _prefix + F("/settings"); + doc[F("temperature_state_template")] = F("{{ value_json.heating.target|float(0)|round(1) }}"); - doc["mode_command_topic"] = _prefix + "/settings/set"; - doc["mode_command_template"] = F("{% if value == 'heat' %}{\"heating\": {\"enable\" : true}}" + doc[F("mode_command_topic")] = _prefix + F("/settings/set"); + doc[F("mode_command_template")] = F("{% if value == 'heat' %}{\"heating\": {\"enable\" : true}}" "{% elif value == 'off' %}{\"heating\": {\"enable\" : false}}{% endif %}"); - doc["mode_state_topic"] = _prefix + F("/settings"); - doc["mode_state_template"] = F("{{ iif(value_json.heating.enable, 'heat', 'off') }}"); - doc["modes"][0] = "off"; - doc["modes"][1] = "heat"; - doc["min_temp"] = minTemp; - doc["max_temp"] = maxTemp; - doc["temp_step"] = 0.5; + doc[F("mode_state_topic")] = _prefix + F("/settings"); + doc[F("mode_state_template")] = F("{{ iif(value_json.heating.enable, 'heat', 'off') }}"); + doc[F("modes")][0] = F("off"); + doc[F("modes")][1] = F("heat"); - client.beginPublish((F("homeassistant/climate/") + _prefix + "_heating/config").c_str(), measureJson(doc), true); + doc[F("action_topic")] = _prefix + F("/state"); + doc[F("action_template")] = F("{{ iif(value_json.states.heating, 'heating', 'idle') }}"); + + doc[F("preset_mode_command_topic")] = _prefix + F("/settings/set"); + doc[F("preset_mode_command_template")] = F("{% if value == 'boost' %}{\"heating\": {\"turbo\" : true}}" + "{% elif value == 'none' %}{\"heating\": {\"turbo\" : false}}{% endif %}"); + doc[F("preset_mode_state_topic")] = _prefix + F("/settings"); + doc[F("preset_mode_value_template")] = F("{{ iif(value_json.heating.turbo, 'boost', 'none') }}"); + doc[F("preset_modes")][0] = F("boost"); + + doc[F("min_temp")] = minTemp; + doc[F("max_temp")] = maxTemp; + doc[F("temp_step")] = 0.5; + + client.beginPublish((F("homeassistant/climate/") + _prefix + F("_heating/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -1221,42 +1297,46 @@ public: bool publishClimateDHW(byte minTemp = 40, byte maxTemp = 60, bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc["availability"]["topic"] = _prefix + F("/status"); - doc["device"]["identifiers"][0] = _prefix; - doc["device"]["sw_version"] = _deviceVersion; - doc["device"]["manufacturer"] = _deviceManufacturer; - doc["device"]["model"] = _deviceModel; - doc["device"]["name"] = _deviceName; + doc[F("availability")][F("topic")] = _prefix + F("/status"); + doc[F("device")][F("identifiers")][0] = _prefix; + doc[F("device")][F("sw_version")] = _deviceVersion; + doc[F("device")][F("manufacturer")] = _deviceManufacturer; + doc[F("device")][F("model")] = _deviceModel; + doc[F("device")][F("name")] = _deviceName; if (_deviceConfigUrl) { - doc["device"]["configuration_url"] = _deviceConfigUrl; + doc[F("device")][F("configuration_url")] = _deviceConfigUrl; } - doc["enabled_by_default"] = enabledByDefault; - doc["unique_id"] = _prefix + "_dhw"; - doc["object_id"] = _prefix + "_dhw"; - doc["name"] = "DHW"; - doc["icon"] = "mdi:water-pump"; + doc[F("enabled_by_default")] = enabledByDefault; + doc[F("unique_id")] = _prefix + F("_dhw"); + doc[F("object_id")] = _prefix + F("_dhw"); + doc[F("name")] = F("DHW"); + doc[F("icon")] = F("mdi:water-pump"); - doc["current_temperature_topic"] = _prefix + F("/state"); - doc["value_template"] = F("{{ value_json.temperatures.dhw|float(0)|round(1) }}"); + doc[F("current_temperature_topic")] = _prefix + F("/state"); + doc[F("current_temperature_template")] = F("{{ value_json.temperatures.dhw|float(0)|round(1) }}"); - doc["temperature_command_topic"] = _prefix + "/settings/set"; - doc["temperature_command_template"] = "{\"dhw\": {\"target\" : {{ value|int(0) }}}}"; + doc[F("temperature_command_topic")] = _prefix + F("/settings/set"); + doc[F("temperature_command_template")] = F("{\"dhw\": {\"target\" : {{ value|int(0) }}}}"); - doc["temperature_state_topic"] = _prefix + F("/settings"); - doc["temperature_state_template"] = F("{{ value_json.dhw.target|int(0) }}"); + doc[F("temperature_state_topic")] = _prefix + F("/settings"); + doc[F("temperature_state_template")] = F("{{ value_json.dhw.target|int(0) }}"); - doc["mode_command_topic"] = _prefix + "/settings/set"; - doc["mode_command_template"] = F("{% if value == 'heat' %}{\"dhw\": {\"enable\" : true}}" + doc[F("mode_command_topic")] = _prefix + F("/settings/set"); + doc[F("mode_command_template")] = F("{% if value == 'heat' %}{\"dhw\": {\"enable\" : true}}" "{% elif value == 'off' %}{\"dhw\": {\"enable\" : false}}{% endif %}"); - doc["mode_state_topic"] = _prefix + F("/settings"); - doc["mode_state_template"] = F("{{ iif(value_json.dhw.enable, 'heat', 'off') }}"); - doc["modes"][0] = "off"; - doc["modes"][1] = "heat"; - doc["min_temp"] = minTemp; - doc["max_temp"] = maxTemp; + doc[F("mode_state_topic")] = _prefix + F("/settings"); + doc[F("mode_state_template")] = F("{{ iif(value_json.dhw.enable, 'heat', 'off') }}"); + doc[F("modes")][0] = F("off"); + doc[F("modes")][1] = F("heat"); - client.beginPublish((F("homeassistant/climate/") + _prefix + "_dhw/config").c_str(), measureJson(doc), true); + doc[F("action_topic")] = _prefix + F("/state"); + doc[F("action_template")] = F("{{ iif(value_json.states.dhw, 'heating', 'idle') }}"); + + doc[F("min_temp")] = minTemp; + doc[F("max_temp")] = maxTemp; + + client.beginPublish((F("homeassistant/climate/") + _prefix + F("_dhw/config")).c_str(), measureJson(doc), true); //BufferingPrint bufferedClient(client, 32); //serializeJson(doc, bufferedClient); //bufferedClient.flush(); @@ -1266,11 +1346,11 @@ public: bool deleteNumberOutdoorTemp() { - return client.publish((F("homeassistant/number/") + _prefix + "/outdoor_temp/config").c_str(), NULL, true); + return client.publish((F("homeassistant/number/") + _prefix + F("/outdoor_temp/config")).c_str(), NULL, true); } bool deleteSensorOutdoorTemp() { - return client.publish((F("homeassistant/sensor/") + _prefix + "/outdoor_temp/config").c_str(), NULL, true); + return client.publish((F("homeassistant/sensor/") + _prefix + F("/outdoor_temp/config")).c_str(), NULL, true); } private: diff --git a/src/MainTask.h b/src/MainTask.h index 2cafa75..26e8fc2 100644 --- a/src/MainTask.h +++ b/src/MainTask.h @@ -1,16 +1,22 @@ extern MqttTask* tMqtt; extern SensorsTask* tSensors; +extern OpenThermTask* tOt; -class MainTask : public Task { +class MainTask: public Task { public: - MainTask(bool _enabled = false, unsigned long _interval = 0) : Task(_enabled, _interval) {} + MainTask(bool _enabled = false, unsigned long _interval = 0): Task(_enabled, _interval) {} protected: + unsigned long lastHeapInfo = 0; + unsigned long firstFailConnect = 0; + unsigned short minFreeHeapSize = 65535; + + void setup() { + pinMode(LED_STATUS_PIN, OUTPUT); + //pinMode(LED_OT_RX_PIN, OUTPUT); + } void loop() { - static unsigned long lastHeapInfo = 0; - static unsigned short minFreeHeapSize = 65535; - if (eeSettings.tick()) { INFO("Settings updated (EEPROM)"); } @@ -20,12 +26,27 @@ protected: tMqtt->enable(); } + if ( firstFailConnect != 0 ) { + firstFailConnect = 0; + } + + vars.states.rssi = WiFi.RSSI(); + } else { if (tMqtt->isEnabled()) { tMqtt->disable(); } - vars.states.emergency = true; + if (settings.emergency.enable && !vars.states.emergency) { + if (firstFailConnect == 0) { + firstFailConnect = millis(); + } + + if (millis() - firstFailConnect > EMERGENCY_TIME_TRESHOLD) { + vars.states.emergency = true; + INFO("Emergency mode enabled"); + } + } } if (!tSensors->isEnabled() && settings.outdoorTempSource == 2) { @@ -34,6 +55,12 @@ protected: tSensors->disable(); } + if (!tOt->isEnabled() && settings.opentherm.inPin > 0 && settings.opentherm.outPin > 0 && settings.opentherm.inPin != settings.opentherm.outPin) { + tOt->enable(); + } + + ledStatus(); + #ifdef USE_TELNET yield(); @@ -58,4 +85,57 @@ protected: } } } + + void ledStatus() { + static byte blinkLeft = 0; + static bool ledOn = false; + static unsigned long changeTime = 0; + + byte errNo = 0; + if (!vars.states.otStatus) { + errNo = 1; + } else if (vars.states.fault) { + errNo = 2; + } else if (vars.states.emergency) { + errNo = 3; + } + + if (errNo == 0) { + if (!ledOn) { + digitalWrite(LED_STATUS_PIN, true); + ledOn = true; + } + + if (blinkLeft > 0) { + blinkLeft = 0; + } + + } else { + if (blinkLeft == 0) { + if (ledOn) { + digitalWrite(LED_STATUS_PIN, false); + ledOn = false; + changeTime = millis(); + } + + if (millis() - changeTime >= 3000) { + blinkLeft = errNo; + } + } + + if (blinkLeft > 0 && millis() - changeTime >= 500) { + if (ledOn) { + digitalWrite(LED_STATUS_PIN, false); + ledOn = false; + blinkLeft--; + + } else { + digitalWrite(LED_STATUS_PIN, true); + ledOn = true; + } + + changeTime = millis(); + } + } + } }; \ No newline at end of file diff --git a/src/MqttTask.h b/src/MqttTask.h index 75f8936..3114f3f 100644 --- a/src/MqttTask.h +++ b/src/MqttTask.h @@ -8,15 +8,17 @@ PubSubClient client(espClient); HomeAssistantHelper haHelper; -class MqttTask : public Task { +class MqttTask: public Task { public: - MqttTask(bool _enabled = false, unsigned long _interval = 0) : Task(_enabled, _interval) {} + MqttTask(bool _enabled = false, unsigned long _interval = 0): Task(_enabled, _interval) {} protected: unsigned long lastReconnectAttempt = 0; - unsigned short int reconnectAttempts = 0; + unsigned long firstFailConnect = 0; void setup() { + DEBUG("[MQTT] Started"); + client.setServer(settings.mqtt.server, settings.mqtt.port); client.setCallback(__callback); haHelper.setPrefix(settings.mqtt.prefix); @@ -38,15 +40,21 @@ protected: publishHaEntities(); publishNonStaticHaEntities(true); - reconnectAttempts = 0; + firstFailConnect = 0; lastReconnectAttempt = 0; } else { INFO("Failed to connect to MQTT server\n"); - if (!vars.states.emergency && ++reconnectAttempts >= EMERGENCY_TRESHOLD) { - vars.states.emergency = true; - INFO("Emergency mode enabled"); + if (settings.emergency.enable && !vars.states.emergency) { + if (firstFailConnect == 0) { + firstFailConnect = millis(); + } + + if (millis() - firstFailConnect > EMERGENCY_TIME_TRESHOLD) { + vars.states.emergency = true; + INFO("Emergency mode enabled"); + } } forceARP(); @@ -117,6 +125,11 @@ protected: flag = true; } + if (!doc["heating"]["turbo"].isNull() && doc["heating"]["turbo"].is()) { + settings.heating.turbo = doc["heating"]["turbo"].as(); + flag = true; + } + if (!doc["heating"]["target"].isNull() && (doc["heating"]["target"].is() || doc["heating"]["target"].is())) { settings.heating.target = round(doc["heating"]["target"].as() * 10) / 10; flag = true; @@ -221,7 +234,7 @@ protected: DEBUG("Received restart message..."); Scheduler.delay(10000); DEBUG("Restart..."); - + eeSettings.updateNow(); ESP.restart(); } @@ -272,6 +285,7 @@ protected: // heating haHelper.publishSwitchHeating(false); + haHelper.publishSwitchHeatingTurbo(); //haHelper.publishNumberHeatingTarget(false); haHelper.publishNumberHeatingHysteresis(); haHelper.publishSensorHeatingSetpoint(false); @@ -305,6 +319,7 @@ protected: haHelper.publishBinSensorFault(); haHelper.publishBinSensorDiagnostic(); haHelper.publishSensorFaultCode(); + haHelper.publishSensorRssi(); // sensors haHelper.publishSensorModulation(false); @@ -383,6 +398,7 @@ protected: doc["emergency"]["useEquitherm"] = settings.emergency.useEquitherm; doc["heating"]["enable"] = settings.heating.enable; + doc["heating"]["turbo"] = settings.heating.turbo; doc["heating"]["target"] = settings.heating.target; doc["heating"]["hysteresis"] = settings.heating.hysteresis; @@ -420,6 +436,7 @@ protected: doc["states"]["fault"] = vars.states.fault; doc["states"]["diagnostic"] = vars.states.diagnostic; doc["states"]["faultCode"] = vars.states.faultCode; + doc["states"]["rssi"] = vars.states.rssi; doc["sensors"]["modulation"] = vars.sensors.modulation; doc["sensors"]["pressure"] = vars.sensors.pressure; @@ -454,7 +471,7 @@ protected: if (settings.debug) { DEBUG_F("MQTT received message\n\r Topic: %s\n\r Data: ", topic); - for (int i = 0; i < length; i++) { + for (unsigned int i = 0; i < length; i++) { DEBUG_STREAM.print((char)payload[i]); } DEBUG_STREAM.print("\n"); diff --git a/src/OpenThermTask.h b/src/OpenThermTask.h index e5f3685..32fa8dc 100644 --- a/src/OpenThermTask.h +++ b/src/OpenThermTask.h @@ -1,107 +1,133 @@ -#include "lib/CustomOpenTherm.h" +#include +#include -CustomOpenTherm ot(OPENTHERM_IN_PIN, OPENTHERM_OUT_PIN); +CustomOpenTherm* ot; -class OpenThermTask : public Task { +class OpenThermTask: public Task { public: - OpenThermTask(bool _enabled = false, unsigned long _interval = 0) : Task(_enabled, _interval) {} + OpenThermTask(bool _enabled = false, unsigned long _interval = 0): Task(_enabled, _interval) {} protected: void setup() { - ot.begin(handleInterrupt, responseCallback); - ot.setHandleSendRequestCallback(sendRequestCallback); + ot = new CustomOpenTherm(settings.opentherm.inPin, settings.opentherm.outPin); + + ot->begin(handleInterrupt, responseCallback); + ot->setHandleSendRequestCallback(sendRequestCallback); + +#ifdef LED_OT_RX_PIN + pinMode(LED_OT_RX_PIN, OUTPUT); +#endif } void loop() { static byte currentHeatingTemp, currentDHWTemp = 0; - byte newHeatingTemp, newDHWTemp = 0; unsigned long localResponse; - setMasterMemberIdCode(); - DEBUG_F("Slave member id code: %u \n", vars.parameters.slaveMemberIdCode); + if ( setMasterMemberIdCode() ) { + DEBUG_F("Slave member id code: %u\r\n", vars.parameters.slaveMemberIdCode); + DEBUG_F("Master member id code: %u\r\n", settings.opentherm.memberIdCode > 0 ? settings.opentherm.memberIdCode : vars.parameters.slaveMemberIdCode); - localResponse = ot.setBoilerStatus( - settings.heating.enable && pump, - settings.dhw.enable + } else { + WARN("Slave member id failed"); + } + + bool heatingEnable = (vars.states.emergency || settings.heating.enable) && pump && isReady(); + localResponse = ot->setBoilerStatus( + heatingEnable, + settings.dhw.enable, + false, false, true, false, false ); - - if (!ot.isValidResponse(localResponse)) { + if (!ot->isValidResponse(localResponse)) { + WARN_F("Invalid response after setBoilerStatus: %s\r\n", ot->statusToString(ot->getLastResponseStatus())); return; } - vars.states.heating = ot.isCentralHeatingActive(localResponse); - vars.states.dhw = ot.isHotWaterActive(localResponse); - vars.states.flame = ot.isFlameOn(localResponse); - vars.states.fault = ot.isFault(localResponse); - vars.states.diagnostic = ot.isDiagnostic(localResponse); + INFO_F("Heating enabled: %d\r\n", heatingEnable); + setMaxModulationLevel(heatingEnable ? 100 : 0); - /*if (vars.dump_request.value) - { - testSupportedIDs(); - vars.dump_request.value = false; - }*/ - - - - /*if ( ot.isValidResponse(localResponse) ) { - vars.SlaveMemberIDcode.value = localResponse >> 0 & 0xFF; - uint8_t flags = (localResponse & 0xFFFF) >> 8 & 0xFF; - vars.dhw_present.value = flags & 0x01; - vars.control_type.value = flags & 0x02; - vars.cooling_present.value = flags & 0x04; - vars.dhw_tank_present.value = flags & 0x08; - vars.pump_control_present.value = flags & 0x10; - vars.ch2_present.value = flags & 0x20; - }*/ + vars.states.heating = ot->isCentralHeatingActive(localResponse); + vars.states.dhw = ot->isHotWaterActive(localResponse); + vars.states.flame = ot->isFlameOn(localResponse); + vars.states.fault = ot->isFault(localResponse); + vars.states.diagnostic = ot->isDiagnostic(localResponse); + yield(); // Команды чтения данных котла - if (millis() - prevUpdateNonEssentialVars > 30000) { + if (millis() - prevUpdateNonEssentialVars > 60000) { updateSlaveParameters(); updateMasterParameters(); - // crash? - DEBUG_F("Master type: %u, version: %u \n", vars.parameters.masterType, vars.parameters.masterVersion); - DEBUG_F("Slave type: %u, version: %u \n", vars.parameters.slaveType, vars.parameters.slaveVersion); + + DEBUG_F("Master type: %u, version: %u\r\n", vars.parameters.masterType, vars.parameters.masterVersion); + DEBUG_F("Slave type: %u, version: %u\r\n", vars.parameters.slaveType, vars.parameters.slaveVersion); updateMinMaxDhwTemp(); updateMinMaxHeatingTemp(); + if (settings.outdoorTempSource == 0) { updateOutsideTemp(); } if (vars.states.fault) { updateFaultCode(); + ot->sendBoilerReset(); + } + + if ( vars.states.diagnostic ) { + ot->sendServiceReset(); } - updatePressure(); prevUpdateNonEssentialVars = millis(); + yield(); } - updateHeatingTemp(); - updateDHWTemp(); - updateModulationLevel(); + + updatePressure(); + if ( settings.dhw.enable || settings.heating.enable || heatingEnable ) { + updateModulationLevel(); + } + + if ( settings.dhw.enable ) { + updateDHWTemp(); + } else { + vars.temperatures.dhw = 0; + } + + if ( settings.heating.enable || heatingEnable ) { + updateHeatingTemp(); + } else { + vars.temperatures.heating = 0; + } + + yield(); // // Температура ГВС - newDHWTemp = settings.dhw.target; - if (newDHWTemp != currentDHWTemp) { + byte newDHWTemp = settings.dhw.target; + if (settings.dhw.enable && newDHWTemp != currentDHWTemp) { if (newDHWTemp < vars.parameters.dhwMinTemp || newDHWTemp > vars.parameters.dhwMaxTemp) { newDHWTemp = constrain(newDHWTemp, vars.parameters.dhwMinTemp, vars.parameters.dhwMaxTemp); } - INFO_F("Set DHW temp = %u \n", newDHWTemp); + INFO_F("Set DHW temp = %u\r\n", newDHWTemp); // Записываем заданную температуру ГВС - if (ot.setDHWSetpoint(newDHWTemp)) { + if (ot->setDHWSetpoint(newDHWTemp)) { currentDHWTemp = newDHWTemp; + + } else { + WARN("Failed set DHW temp"); } } // // Температура отопления - if (fabs(vars.parameters.heatingSetpoint - currentHeatingTemp) > 0.0001) { - INFO_F("Set heating temp = %u \n", vars.parameters.heatingSetpoint); + if (heatingEnable && fabs(vars.parameters.heatingSetpoint - currentHeatingTemp) > 0.0001) { + INFO_F("Setting heating temp = %u \n", vars.parameters.heatingSetpoint); // Записываем заданную температуру - if (ot.setBoilerTemperature(vars.parameters.heatingSetpoint)) { + if (ot->setBoilerTemperature(vars.parameters.heatingSetpoint)) { currentHeatingTemp = vars.parameters.heatingSetpoint; + + } else { + WARN("Failed set heating temp"); } } @@ -111,35 +137,51 @@ protected: float halfHyst = settings.heating.hysteresis / 2; if (pump && vars.temperatures.indoor - settings.heating.target + 0.0001 >= halfHyst) { pump = false; + } else if (!pump && vars.temperatures.indoor - settings.heating.target - 0.0001 <= -(halfHyst)) { pump = true; } + } else if (!pump) { pump = true; } } void static IRAM_ATTR handleInterrupt() { - ot.handleInterrupt(); + ot->handleInterrupt(); } void static sendRequestCallback(unsigned long request, unsigned long response, OpenThermResponseStatus status, byte attempt) { - printRequestDetail(ot.getDataID(request), status, request, response, attempt); + printRequestDetail(ot->getDataID(request), status, request, response, attempt); } void static responseCallback(unsigned long result, OpenThermResponseStatus status) { static byte attempt = 0; + switch (status) { case OpenThermResponseStatus::TIMEOUT: - if (++attempt > OPENTHERM_OFFLINE_TRESHOLD) { + if (vars.states.otStatus && ++attempt > OPENTHERM_OFFLINE_TRESHOLD) { vars.states.otStatus = false; attempt = OPENTHERM_OFFLINE_TRESHOLD; } break; + case OpenThermResponseStatus::SUCCESS: attempt = 0; - vars.states.otStatus = true; + if (!vars.states.otStatus) { + vars.states.otStatus = true; + } + +#ifdef LED_OT_RX_PIN + { + digitalWrite(LED_OT_RX_PIN, true); + unsigned long ts = millis(); + while (millis() - ts < 2) {} + digitalWrite(LED_OT_RX_PIN, false); + } +#endif break; + default: break; } @@ -148,9 +190,15 @@ protected: protected: bool pump = true; unsigned long prevUpdateNonEssentialVars = 0; + unsigned long startupTime = millis(); + + + bool isReady() { + return millis() - startupTime > 60000; + } void static printRequestDetail(OpenThermMessageID id, OpenThermResponseStatus status, unsigned long request, unsigned long response, byte attempt) { - sprintf(buffer, "OT REQUEST ID: %4d Request: %8x Response: %8x Attempt: %2d Status: %s", id, request, response, attempt, ot.statusToString(status)); + sprintf(buffer, "OT REQUEST ID: %4d Request: %8lx Response: %8lx Attempt: %2d Status: %s", id, request, response, attempt, ot->statusToString(status)); if (status != OpenThermResponseStatus::SUCCESS) { //WARN(buffer); DEBUG(buffer); @@ -159,267 +207,7 @@ protected: } } - /* - bool getBoilerTemp() - { - unsigned long response; - return sendRequest(ot.buildGetBoilerTemperatureRequest(),response); - } - - bool getDHWTemp() - { - unsigned long response; - unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Tdhw, 0); - return sendRequest(request,response); - } - - bool getOutsideTemp() - { - unsigned long response; - unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Toutside, 0); - return sendRequest(request,response); - } - - bool setDHWTemp(float val) - { - unsigned long request = ot.buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::TdhwSet, ot.temperatureToData(val)); - unsigned long response; - return sendRequest(request,response); - } - - bool getFaultCode() - { - unsigned long response; - unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0); - return sendRequest(request,response); - } - - bool getModulationLevel() { - unsigned long response; - unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0); - return sendRequest(request,response); - } - - bool getPressure() { - unsigned long response; - unsigned long request = ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::CHPressure, 0); - return sendRequest(request,response); - } - - bool sendRequest(unsigned long request, unsigned long& response) - { - send_newts = millis(); - if (send_newts - send_ts < 200) { - // Преждем чем слать что то - надо подождать 100ms согласно специфиикации протокола ОТ - delay(200 - (send_newts - send_ts)); - } - - bool result = ot.sendRequestAync(request); - if(!result) { - WARN("Не могу отправить запрос"); - WARN("Шина " + ot.isReady() ? "готова" : "не готова"); - return false; - } - while (!ot.isReady()) - { - ot.process(); - yield(); // This is local Task yield() call which allow us to switch to another task in scheduler - } - send_ts = millis(); - response = ot_response; - //printRequestDetail(ot.getDataID(request), request, response); - - return true; // Response is global variable - } - - void testSupportedIDs() - { - // Basic - unsigned long request; - unsigned long response; - OpenThermMessageID id; - //Command - id = OpenThermMessageID::Command; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - //ASFlags - id = OpenThermMessageID::ASFflags; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //TrOverride - id = OpenThermMessageID::TrOverride; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //TSP - id = OpenThermMessageID::TSP; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //TSPindexTSPvalue - id = OpenThermMessageID::TSPindexTSPvalue; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //FHBsize - id = OpenThermMessageID::FHBsize; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //FHBindexFHBvalue - id = OpenThermMessageID::FHBindexFHBvalue; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //MaxCapacityMinModLevel - id = OpenThermMessageID::MaxCapacityMinModLevel; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //TrSet - id = OpenThermMessageID::TrSet; - request = ot.buildRequest(OpenThermRequestType::WRITE, id, ot.temperatureToData(21)); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //RelModLevel - id = OpenThermMessageID::RelModLevel; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //CHPressure - id = OpenThermMessageID::CHPressure; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //DHWFlowRate - id = OpenThermMessageID::DHWFlowRate; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //DayTime - id = OpenThermMessageID::DayTime; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //Date - id = OpenThermMessageID::Date; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //Year - id = OpenThermMessageID::Year; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //TrSetCH2 - id = OpenThermMessageID::TrSetCH2; - request = ot.buildRequest(OpenThermRequestType::WRITE, id, ot.temperatureToData(21)); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //Tr - id = OpenThermMessageID::Tr; - request = ot.buildRequest(OpenThermRequestType::WRITE, id, ot.temperatureToData(21)); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //Tret - id = OpenThermMessageID::Tret; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //Texhaust - id = OpenThermMessageID::Texhaust; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //Hcratio - id = OpenThermMessageID::Hcratio; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //RemoteOverrideFunction - id = OpenThermMessageID::RemoteOverrideFunction; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //OEMDiagnosticCode - id = OpenThermMessageID::OEMDiagnosticCode; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //BurnerStarts - id = OpenThermMessageID::BurnerStarts; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //CHPumpStarts - id = OpenThermMessageID::CHPumpStarts; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //DHWPumpValveStarts - id = OpenThermMessageID::DHWPumpValveStarts; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //DHWBurnerStarts - id = OpenThermMessageID::DHWBurnerStarts; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //BurnerOperationHours - id = OpenThermMessageID::BurnerOperationHours; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //CHPumpOperationHours - id = OpenThermMessageID::CHPumpOperationHours; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //DHWPumpValveOperationHours - id = OpenThermMessageID::DHWPumpValveOperationHours; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - - //DHWBurnerOperationHours - id = OpenThermMessageID::DHWBurnerOperationHours; - request = ot.buildRequest(OpenThermRequestType::READ, id, 0); - if(sendRequest(request,response)) - printRequestDetail(id, ot.getLastResponseStatus(), request, response); - } - */ - - void setMasterMemberIdCode() { + bool setMasterMemberIdCode() { //======================================================================================= // Эта группа элементов данных определяет информацию о конфигурации как на ведомых, так // и на главных сторонах. Каждый из них имеет группу флагов конфигурации (8 бит) @@ -430,40 +218,88 @@ protected: // с "кодом идентификатора участника", который идентифицирует производителя устройства. //======================================================================================= - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SConfigSMemberIDcode, 0)); // 0xFFFF - if (!ot.isValidResponse(response)) { - return; - } + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SConfigSMemberIDcode, 0)); // 0xFFFF + /*uint8_t flags = (response & 0xFFFF) >> 8; + DEBUG_F( + "MasterMemberIdCode:\r\n DHW present: %u\r\n Control type: %u\r\n Cooling configuration: %u\r\n DHW configuration: %u\r\n Pump control: %u\r\n CH2 present: %u\r\n Remote water filling function: %u\r\n Heat/cool mode control: %u\r\n Slave MemberID Code: %u\r\n", + flags & 0x01, + flags & 0x02, + flags & 0x04, + flags & 0x08, + flags & 0x10, + flags & 0x20, + flags & 0x40, + flags & 0x80, + response & 0xFF + );*/ - vars.parameters.slaveMemberIdCode = response >> 0 & 0xFF; - ot.sendRequest(ot.buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::MConfigMMemberIDcode, vars.parameters.slaveMemberIdCode)); + if (ot->isValidResponse(response)) { + vars.parameters.slaveMemberIdCode = response & 0xFF; + + } else if ( settings.opentherm.memberIdCode <= 0 ) { + return false; + } + + response = ot->sendRequest(ot->buildRequest( + OpenThermRequestType::WRITE, + OpenThermMessageID::MConfigMMemberIDcode, + settings.opentherm.memberIdCode > 0 ? settings.opentherm.memberIdCode : vars.parameters.slaveMemberIdCode + )); + + return ot->isValidResponse(response); } - void updateMasterParameters() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::MasterVersion, 0x013F)); - if (!ot.isValidResponse(response)) { - return; + bool setMaxModulationLevel(byte value) { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::MaxRelModLevelSetting, (unsigned int)(value * 256))); + + return ot->isValidResponse(response); + } + + bool setOpenThermVersionMaster() { + unsigned long response; + response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::OpenThermVersionSlave, 0)); + if (!ot->isValidResponse(response)) { + return false; + } + // INFO_F("Opentherm version slave: %f\n", ot->getFloat(response)); + + response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::WRITE_DATA, OpenThermMessageID::OpenThermVersionMaster, response)); + if (!ot->isValidResponse(response)) { + return false; + } + // INFO_F("Opentherm version master: %f\n", ot->getFloat(response)); + + return true; + } + + bool updateMasterParameters() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::WRITE, OpenThermMessageID::MasterVersion, 0x013F)); + if (!ot->isValidResponse(response)) { + return false; } vars.parameters.masterType = (response & 0xFFFF) >> 8; vars.parameters.masterVersion = response & 0xFF; + + return true; } - void updateSlaveParameters() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SlaveVersion, 0)); - if (!ot.isValidResponse(response)) { - return; + bool updateSlaveParameters() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::SlaveVersion, 0)); + if (!ot->isValidResponse(response)) { + return false; } vars.parameters.slaveType = (response & 0xFFFF) >> 8; vars.parameters.slaveVersion = response & 0xFF; + + return true; } - void updateMinMaxDhwTemp() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::TdhwSetUBTdhwSetLB, 0)); - - if (!ot.isValidResponse(response)) { - return; + bool updateMinMaxDhwTemp() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::TdhwSetUBTdhwSetLB, 0)); + if (!ot->isValidResponse(response)) { + return false; } byte minTemp = response & 0xFF; @@ -472,14 +308,17 @@ protected: if (minTemp >= 0 && maxTemp > 0 && maxTemp > minTemp) { vars.parameters.dhwMinTemp = minTemp; vars.parameters.dhwMaxTemp = maxTemp; + + return true; } + + return false; } - void updateMinMaxHeatingTemp() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::MaxTSetUBMaxTSetLB, 0)); - - if (!ot.isValidResponse(response)) { - return; + bool updateMinMaxHeatingTemp() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::MaxTSetUBMaxTSetLB, 0)); + if (!ot->isValidResponse(response)) { + return false; } byte minTemp = response & 0xFF; @@ -488,55 +327,80 @@ protected: if (minTemp >= 0 && maxTemp > 0 && maxTemp > minTemp) { vars.parameters.heatingMinTemp = minTemp; vars.parameters.heatingMaxTemp = maxTemp; + + return true; } + + return false; } - void updateOutsideTemp() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Toutside, 0)); - - if (ot.isValidResponse(response)) { - vars.temperatures.outdoor = ot.getFloat(response); + bool updateOutsideTemp() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::Toutside, 0)); + if (!ot->isValidResponse(response)) { + return false; } + + vars.temperatures.outdoor = ot->getFloat(response); + return true; } - void updateHeatingTemp() { - unsigned long response = ot.sendRequest(ot.buildGetBoilerTemperatureRequest()); - - if (ot.isValidResponse(response)) { - vars.temperatures.heating = ot.getFloat(response); + bool updateHeatingTemp() { + unsigned long response = ot->sendRequest(ot->buildGetBoilerTemperatureRequest()); + if (!ot->isValidResponse(response)) { + return false; } + + vars.temperatures.heating = ot->getFloat(response); + return true; } - void updateDHWTemp() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermMessageType::READ_DATA, OpenThermMessageID::Tdhw, 0)); - - if (ot.isValidResponse(response)) { - vars.temperatures.dhw = ot.getFloat(response); + bool updateDHWTemp() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermMessageType::READ, OpenThermMessageID::Tdhw, 0)); + if (!ot->isValidResponse(response)) { + return false; } + + vars.temperatures.dhw = ot->getFloat(response); + return true; } - void updateFaultCode() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0)); + bool updateFaultCode() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::ASFflags, 0)); - if (ot.isValidResponse(response)) { - vars.states.faultCode = response & 0xFF; + if (!ot->isValidResponse(response)) { + return false; } + + vars.states.faultCode = response & 0xFF; + return true; } - void updateModulationLevel() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0)); + bool updateModulationLevel() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::RelModLevel, 0)); - if (ot.isValidResponse(response)) { - vars.sensors.modulation = ot.getFloat(response); + if (!ot->isValidResponse(response)) { + return false; } + + float modulation = ot->f88(response); + if (!vars.states.flame) { + vars.sensors.modulation = 0; + } else { + vars.sensors.modulation = modulation; + } + + return true; } - void updatePressure() { - unsigned long response = ot.sendRequest(ot.buildRequest(OpenThermRequestType::READ, OpenThermMessageID::CHPressure, 0)); + bool updatePressure() { + unsigned long response = ot->sendRequest(ot->buildRequest(OpenThermRequestType::READ, OpenThermMessageID::CHPressure, 0)); - if (ot.isValidResponse(response)) { - vars.sensors.pressure = ot.getFloat(response); + if (!ot->isValidResponse(response)) { + return false; } + + vars.sensors.pressure = ot->getFloat(response); + return true; } }; diff --git a/src/RegulatorTask.h b/src/RegulatorTask.h index d9ed965..8095967 100644 --- a/src/RegulatorTask.h +++ b/src/RegulatorTask.h @@ -1,4 +1,4 @@ -#include "lib/Equitherm.h" +#include #include #include @@ -6,9 +6,9 @@ Equitherm etRegulator; GyverPID pidRegulator(0, 0, 0, 10000); PIDtuner pidTuner; -class RegulatorTask : public LeanTask { +class RegulatorTask: public LeanTask { public: - RegulatorTask(bool _enabled = false, unsigned long _interval = 0) : LeanTask(_enabled, _interval) {} + RegulatorTask(bool _enabled = false, unsigned long _interval = 0): LeanTask(_enabled, _interval) {} protected: bool tunerInit = false; @@ -21,21 +21,39 @@ protected: void setup() {} void loop() { - byte newTemp; + byte newTemp = vars.parameters.heatingSetpoint; if (vars.states.emergency) { + if (settings.heating.turbo) { + settings.heating.turbo = false; + + INFO("[REGULATOR] Turbo mode auto disabled"); + } + newTemp = getEmergencyModeTemp(); } else { - if ( vars.tuning.enable || tunerInit ) { + if (vars.tuning.enable || tunerInit) { + if (settings.heating.turbo) { + settings.heating.turbo = false; + + INFO("[REGULATOR] Turbo mode auto disabled"); + } + newTemp = getTuningModeTemp(); - if ( newTemp == 0 ) { + if (newTemp == 0) { vars.tuning.enable = false; } } - - if ( !vars.tuning.enable ) { + + if (!vars.tuning.enable) { + if (settings.heating.turbo && (fabs(settings.heating.target - vars.temperatures.indoor) < 1 || (settings.equitherm.enable && settings.pid.enable))) { + settings.heating.turbo = false; + + INFO("[REGULATOR] Turbo mode auto disabled"); + } + newTemp = getNormalModeTemp(); } } @@ -56,13 +74,13 @@ protected: // if use equitherm if (settings.emergency.useEquitherm && settings.outdoorTempSource != 1) { - float etResult = getEquithermTemp(); + float etResult = getEquithermTemp(vars.parameters.heatingMinTemp, vars.parameters.heatingMaxTemp); if (fabs(prevEtResult - etResult) + 0.0001 >= 0.5) { prevEtResult = etResult; newTemp += etResult; - INFO_F("[REGULATOR][EQUITHERM] New emergency result: %u (%f) \n", (byte) round(etResult), etResult); + INFO_F("[REGULATOR][EQUITHERM] New emergency result: %u (%f) \n", (int)round(etResult), etResult); } else { newTemp += prevEtResult; @@ -81,19 +99,23 @@ protected: if (fabs(prevHeatingTarget - settings.heating.target) > 0.0001) { prevHeatingTarget = settings.heating.target; - INFO_F("[REGULATOR] New target: %f \n", settings.heating.target); + + if (settings.equitherm.enable && settings.pid.enable) { + pidRegulator.integral = 0; + INFO_F("[REGULATOR][PID] Integral sum has been reset"); + } } // if use equitherm if (settings.equitherm.enable) { - float etResult = getEquithermTemp(); + float etResult = getEquithermTemp(vars.parameters.heatingMinTemp, vars.parameters.heatingMaxTemp); if (fabs(prevEtResult - etResult) + 0.0001 >= 0.5) { prevEtResult = etResult; newTemp += etResult; - INFO_F("[REGULATOR][EQUITHERM] New result: %u (%f) \n", (byte) round(etResult), etResult); + INFO_F("[REGULATOR][EQUITHERM] New result: %u (%f) \n", (int)round(etResult), etResult); } else { newTemp += prevEtResult; @@ -102,13 +124,16 @@ protected: // if use pid if (settings.pid.enable) { - float pidResult = getPidTemp(); + float pidResult = getPidTemp( + settings.equitherm.enable ? -30 : vars.parameters.heatingMinTemp, + settings.equitherm.enable ? 30 : vars.parameters.heatingMaxTemp + ); if (fabs(prevPidResult - pidResult) + 0.0001 >= 0.5) { prevPidResult = pidResult; newTemp += pidResult; - INFO_F("[REGULATOR][PID] New result: %u (%f) \n", (byte) round(pidResult), pidResult); + INFO_F("[REGULATOR][PID] New result: %u (%f) \n", (int)round(pidResult), pidResult); } else { newTemp += prevPidResult; @@ -124,8 +149,8 @@ protected: } byte getTuningModeTemp() { - if ( tunerInit && (!vars.tuning.enable || vars.tuning.regulator != tunerRegulator) ) { - if ( tunerRegulator == 0 ) { + if (tunerInit && (!vars.tuning.enable || vars.tuning.regulator != tunerRegulator)) { + if (tunerRegulator == 0) { pidTuner.reset(); } @@ -135,19 +160,21 @@ protected: INFO(F("[REGULATOR][TUNING] Stopped")); } - if ( !vars.tuning.enable ) { + if (!vars.tuning.enable) { return 0; } - if ( vars.tuning.regulator == 0 ) { + if (vars.tuning.regulator == 0) { // @TODO дописать INFO(F("[REGULATOR][TUNING][EQUITHERM] Not implemented")); return 0; - } else if ( vars.tuning.regulator == 1 ) { + } else if (vars.tuning.regulator == 1) { // PID tuner - float defaultTemp = settings.equitherm.enable ? getEquithermTemp() : settings.heating.target; + float defaultTemp = settings.equitherm.enable + ? getEquithermTemp(vars.parameters.heatingMinTemp, vars.parameters.heatingMaxTemp) + : settings.heating.target; if (tunerInit && pidTuner.getState() == 3) { INFO(F("[REGULATOR][TUNING][PID] Finished")); @@ -203,8 +230,8 @@ protected: } } - float getEquithermTemp() { - if ( vars.states.emergency ) { + float getEquithermTemp(int minTemp, int maxTemp) { + if (vars.states.emergency) { etRegulator.Kt = 0; etRegulator.indoorTemp = 0; etRegulator.outdoorTemp = vars.temperatures.outdoor; @@ -215,12 +242,16 @@ protected: etRegulator.outdoorTemp = round(vars.temperatures.outdoor); } else { - etRegulator.Kt = settings.equitherm.t_factor; + if (settings.heating.turbo) { + etRegulator.Kt = 10; + } else { + etRegulator.Kt = settings.equitherm.t_factor; + } etRegulator.indoorTemp = vars.temperatures.indoor; etRegulator.outdoorTemp = vars.temperatures.outdoor; } - etRegulator.setLimits(vars.parameters.heatingMinTemp, vars.parameters.heatingMaxTemp); + etRegulator.setLimits(minTemp, maxTemp); etRegulator.Kn = settings.equitherm.n_factor; // etRegulator.Kn = tuneEquithermN(etRegulator.Kn, vars.temperatures.indoor, settings.heating.target, 300, 1800, 0.01, 1); etRegulator.Kk = settings.equitherm.k_factor; @@ -229,12 +260,12 @@ protected: return etRegulator.getResult(); } - float getPidTemp() { + float getPidTemp(int minTemp, int maxTemp) { pidRegulator.Kp = settings.pid.p_factor; pidRegulator.Ki = settings.pid.i_factor; pidRegulator.Kd = settings.pid.d_factor; - pidRegulator.setLimits(vars.parameters.heatingMinTemp, vars.parameters.heatingMaxTemp); + pidRegulator.setLimits(minTemp, maxTemp); pidRegulator.input = vars.temperatures.indoor; pidRegulator.setpoint = settings.heating.target; diff --git a/src/SensorsTask.h b/src/SensorsTask.h index c6d5913..fc565fe 100644 --- a/src/SensorsTask.h +++ b/src/SensorsTask.h @@ -2,9 +2,9 @@ MicroDS18B20 outdoorSensor; -class SensorsTask : public LeanTask { +class SensorsTask: public LeanTask { public: - SensorsTask(bool _enabled = false, unsigned long _interval = 0) : LeanTask(_enabled, _interval) {} + SensorsTask(bool _enabled = false, unsigned long _interval = 0): LeanTask(_enabled, _interval) {} protected: float filteredOutdoorTemp = 0; @@ -16,9 +16,9 @@ protected: if (outdoorSensor.online()) { if (outdoorSensor.readTemp()) { float rawTemp = outdoorSensor.getTemp(); - INFO_F("[SENSORS][DS18B20] Raw temp: %f \n", rawTemp); + DEBUG_F("[SENSORS][DS18B20] Raw temp: %f \n", rawTemp); - if ( emptyOutdoorTemp ) { + if (emptyOutdoorTemp) { filteredOutdoorTemp = rawTemp; emptyOutdoorTemp = false; @@ -27,8 +27,8 @@ protected: } filteredOutdoorTemp = floor(filteredOutdoorTemp * 100) / 100; - - if ( fabs(vars.temperatures.outdoor - filteredOutdoorTemp) > 0.099 ) { + + if (fabs(vars.temperatures.outdoor - filteredOutdoorTemp) > 0.099) { vars.temperatures.outdoor = filteredOutdoorTemp; INFO_F("[SENSORS][DS18B20] New temp: %f \n", filteredOutdoorTemp); } diff --git a/src/Settings.h b/src/Settings.h index d19f7c2..d986c80 100644 --- a/src/Settings.h +++ b/src/Settings.h @@ -4,6 +4,12 @@ struct Settings { byte outdoorTempSource = 0; char hostname[80] = "opentherm"; + struct { + byte inPin = 5; + byte outPin = 4; + unsigned int memberIdCode = 4; + } opentherm; + struct { char server[80]; int port = 1883; @@ -21,6 +27,7 @@ struct Settings { struct { bool enable = true; + bool turbo = false; float target = 40.0f; float hysteresis = 0.5f; } heating; @@ -39,9 +46,9 @@ struct Settings { struct { bool enable = false; - float n_factor = 0.67f; - float k_factor = 1.0f; - float t_factor = 5.0f; + float n_factor = 0.7f; + float k_factor = 3.0f; + float t_factor = 2.0f; } equitherm; } settings; @@ -61,6 +68,7 @@ struct Variables { bool fault = false; bool diagnostic = false; byte faultCode = 0; + int8_t rssi = 0; } states; struct { diff --git a/src/WifiManagerTask.h b/src/WifiManagerTask.h index d5ef20a..24a4fb7 100644 --- a/src/WifiManagerTask.h +++ b/src/WifiManagerTask.h @@ -1,21 +1,20 @@ -// #include -#define WM_MDNS #include -//#include -//#include // Wifimanager WiFiManager wm; -WiFiManagerParameter *wmHostname; -WiFiManagerParameter *wmMqttServer; -WiFiManagerParameter *wmMqttPort; -WiFiManagerParameter *wmMqttUser; -WiFiManagerParameter *wmMqttPassword; -WiFiManagerParameter *wmMqttPrefix; +WiFiManagerParameter* wmHostname; +WiFiManagerParameter* wmOtInPin; +WiFiManagerParameter* wmOtOutPin; +WiFiManagerParameter* wmOtMemberIdCode; +WiFiManagerParameter* wmMqttServer; +WiFiManagerParameter* wmMqttPort; +WiFiManagerParameter* wmMqttUser; +WiFiManagerParameter* wmMqttPassword; +WiFiManagerParameter* wmMqttPrefix; -class WifiManagerTask : public Task { +class WifiManagerTask: public Task { public: - WifiManagerTask(bool _enabled = false, unsigned long _interval = 0) : Task(_enabled, _interval) {} + WifiManagerTask(bool _enabled = false, unsigned long _interval = 0): Task(_enabled, _interval) {} protected: void setup() { @@ -25,6 +24,18 @@ protected: wmHostname = new WiFiManagerParameter("hostname", "Hostname", settings.hostname, 80); wm.addParameter(wmHostname); + sprintf(buffer, "%d", settings.opentherm.inPin); + wmOtInPin = new WiFiManagerParameter("ot_in_pin", "Opentherm pin IN", buffer, 1); + wm.addParameter(wmOtInPin); + + sprintf(buffer, "%d", settings.opentherm.outPin); + wmOtOutPin = new WiFiManagerParameter("ot_out_pin", "Opentherm pin OUT", buffer, 1); + wm.addParameter(wmOtOutPin); + + sprintf(buffer, "%d", settings.opentherm.memberIdCode); + wmOtMemberIdCode = new WiFiManagerParameter("ot_member_id_code", "Opentherm member id code", buffer, 5); + wm.addParameter(wmOtMemberIdCode); + wmMqttServer = new WiFiManagerParameter("mqtt_server", "MQTT server", settings.mqtt.server, 80); wm.addParameter(wmMqttServer); @@ -46,15 +57,22 @@ protected: wm.setHostname(settings.hostname); wm.setWiFiAutoReconnect(true); + wm.setAPClientCheck(true); wm.setConfigPortalBlocking(false); wm.setSaveParamsCallback(saveParamsCallback); - wm.setConfigPortalTimeout(300); - wm.setDisableConfigPortal(false); + wm.setConfigPortalTimeout(180); + //wm.setDisableConfigPortal(false); - wm.autoConnect(AP_SSID); + wm.autoConnect(AP_SSID, AP_PASSWORD); } void loop() { + static unsigned short prevCounterLiters = 0; + + /*if (WiFi.status() != WL_CONNECTED && !wm.getWebPortalActive() && !wm.getConfigPortalActive()) { + wm.autoConnect(AP_SSID); + }*/ + if (connected && WiFi.status() != WL_CONNECTED) { connected = false; INFO("[wifi] Disconnected"); @@ -62,6 +80,10 @@ protected: } else if (!connected && WiFi.status() == WL_CONNECTED) { connected = true; + if (wm.getConfigPortalActive()) { + wm.stopConfigPortal(); + } + INFO_F("[wifi] Connected. IP address: %s, RSSI: %d\n", WiFi.localIP().toString().c_str(), WiFi.RSSI()); } @@ -73,14 +95,34 @@ protected: } void static saveParamsCallback() { - strcpy(settings.hostname, (*wmHostname).getValue()); - strcpy(settings.mqtt.server, (*wmMqttServer).getValue()); - settings.mqtt.port = atoi((*wmMqttPort).getValue()); - strcpy(settings.mqtt.user, (*wmMqttUser).getValue()); - strcpy(settings.mqtt.password, (*wmMqttPassword).getValue()); - strcpy(settings.mqtt.prefix, (*wmMqttPrefix).getValue()); + strcpy(settings.hostname, wmHostname->getValue()); + settings.opentherm.inPin = atoi(wmOtInPin->getValue()); + settings.opentherm.outPin = atoi(wmOtOutPin->getValue()); + settings.opentherm.memberIdCode = atoi(wmOtMemberIdCode->getValue()); + strcpy(settings.mqtt.server, wmMqttServer->getValue()); + settings.mqtt.port = atoi(wmMqttPort->getValue()); + strcpy(settings.mqtt.user, wmMqttUser->getValue()); + strcpy(settings.mqtt.password, wmMqttPassword->getValue()); + strcpy(settings.mqtt.prefix, wmMqttPrefix->getValue()); - INFO_F("Settings\nHostname: %s, Server: %s, port: %d, user: %s, pass: %s\n", settings.hostname, settings.mqtt.server, settings.mqtt.port, settings.mqtt.user, settings.mqtt.password); + INFO_F( + "New settings:\r\n" + " Hostname: %s\r\n" + " OT in pin: %d" + " OT out pin: %d" + " OT member id code: %d" + " Mqtt server: %s:%d\r\n" + " Mqtt user: %s\r\n" + " Mqtt pass: %s\r\n", + settings.hostname, + settings.opentherm.inPin, + settings.opentherm.outPin, + settings.opentherm.memberIdCode, + settings.mqtt.server, + settings.mqtt.port, + settings.mqtt.user, + settings.mqtt.password + ); eeSettings.updateNow(); INFO(F("Settings saved")); } diff --git a/src/defines.h b/src/defines.h index 5b20709..536e7e4 100644 --- a/src/defines.h +++ b/src/defines.h @@ -1,13 +1,12 @@ -#define OT_GATEWAY_VERSION "1.0.7" +#define OT_GATEWAY_VERSION "1.2.1" #define AP_SSID "OpenTherm Gateway" +#define AP_PASSWORD "otgateway123456" #define USE_TELNET -#define EMERGENCY_TRESHOLD 10 +#define EMERGENCY_TIME_TRESHOLD 120000 #define MQTT_RECONNECT_INTERVAL 5000 #define MQTT_KEEPALIVE 30 -#define OPENTHERM_IN_PIN 4 -#define OPENTHERM_OUT_PIN 5 #define OPENTHERM_OFFLINE_TRESHOLD 10 #define DS18B20_PIN 2 @@ -16,6 +15,9 @@ #define DS_CHECK_CRC true #define DS_CRC_USE_TABLE true +#define LED_STATUS_PIN 13 +#define LED_OT_RX_PIN 15 + #define CONFIG_URL "http://%s/" diff --git a/src/lib/CustomOpenTherm.h b/src/lib/CustomOpenTherm.h deleted file mode 100644 index 17b7fa6..0000000 --- a/src/lib/CustomOpenTherm.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once -#include -#include - -extern SchedulerClass Scheduler; - -class CustomOpenTherm : public OpenTherm { -private: - unsigned long send_ts = millis(); - void(*handleSendRequestCallback)(unsigned long, unsigned long, OpenThermResponseStatus status, byte attempt); - -public: - CustomOpenTherm(int inPin = 4, int outPin = 5, bool isSlave = false) : OpenTherm(inPin, outPin, isSlave) {} - void setHandleSendRequestCallback(void(*handleSendRequestCallback)(unsigned long, unsigned long, OpenThermResponseStatus status, byte attempt)) { - this->handleSendRequestCallback = handleSendRequestCallback; - } - - unsigned long sendRequest(unsigned long request, byte attempts = 5, byte _attempt = 0) { - _attempt++; - while (send_ts > 0 && millis() - send_ts < 200) { - Scheduler.yield(); - } - - unsigned long _response; - if (!sendRequestAync(request)) { - _response = 0; - } else { - while (!isReady()) { - Scheduler.yield(); - process(); - } - - _response = getLastResponse(); - } - - if (handleSendRequestCallback != NULL) { - handleSendRequestCallback(request, _response, getLastResponseStatus(), _attempt); - } - - send_ts = millis(); - if (getLastResponseStatus() == OpenThermResponseStatus::SUCCESS || _attempt >= attempts) { - return _response; - } else { - return sendRequest(request, attempts, _attempt); - } - } -}; diff --git a/src/main.cpp b/src/main.cpp index 9cc301e..673eda5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,3 +1,4 @@ +#include #include "defines.h" #include #include @@ -52,7 +53,7 @@ void setup() { tMqtt = new MqttTask(false); Scheduler.start(tMqtt); - tOt = new OpenThermTask(true); + tOt = new OpenThermTask(false); Scheduler.start(tOt); tSensors = new SensorsTask(false, DS18B20_INTERVAL);