From 0dee4c20ce3fd0fbe51c105324581a6b45ba497d Mon Sep 17 00:00:00 2001 From: Yurii Date: Thu, 23 Nov 2023 09:08:02 +0300 Subject: [PATCH] refactoring --- lib/HomeAssistantHelper/strings.h | 85 +++++++++++++++++++------------ src/HaHelper.h | 77 ++++++++++++++-------------- src/MqttTask.h | 6 +-- src/main.cpp | 2 +- 4 files changed, 96 insertions(+), 74 deletions(-) diff --git a/lib/HomeAssistantHelper/strings.h b/lib/HomeAssistantHelper/strings.h index 30f6024..aecf265 100644 --- a/lib/HomeAssistantHelper/strings.h +++ b/lib/HomeAssistantHelper/strings.h @@ -3,35 +3,56 @@ #define PROGMEM #endif -const char HA_DEVICE[] PROGMEM = "device"; -const char HA_IDENTIFIERS[] PROGMEM = "identifiers"; -const char HA_SW_VERSION[] PROGMEM = "sw_version"; -const char HA_MANUFACTURER[] PROGMEM = "manufacturer"; -const char HA_MODEL[] PROGMEM = "model"; -const char HA_NAME[] PROGMEM = "name"; -const char HA_CONF_URL[] PROGMEM = "configuration_url"; -const char HA_COMMAND_TOPIC[] PROGMEM = "command_topic"; -const char HA_COMMAND_TEMPLATE[] PROGMEM = "command_template"; -const char HA_ENABLED_BY_DEFAULT[] PROGMEM = "enabled_by_default"; -const char HA_UNIQUE_ID[] PROGMEM = "unique_id"; -const char HA_OBJECT_ID[] PROGMEM = "object_id"; -const char HA_ENTITY_CATEGORY[] PROGMEM = "entity_category"; -const char HA_STATE_TOPIC[] PROGMEM = "state_topic"; -const char HA_VALUE_TEMPLATE[] PROGMEM = "value_template"; -const char HA_OPTIONS[] PROGMEM = "options"; -const char HA_AVAILABILITY[] PROGMEM = "availability"; -const char HA_AVAILABILITY_MODE[] PROGMEM = "availability_mode"; -const char HA_TOPIC[] PROGMEM = "topic"; -const char HA_DEVICE_CLASS[] PROGMEM = "device_class"; -const char HA_UNIT_OF_MEASUREMENT[] PROGMEM = "unit_of_measurement"; -const char HA_ICON[] PROGMEM = "icon"; -const char HA_MIN[] PROGMEM = "min"; -const char HA_MAX[] PROGMEM = "max"; -const char HA_STEP[] PROGMEM = "step"; -const char HA_MODE[] PROGMEM = "mode"; -const char HA_STATE_ON[] PROGMEM = "state_on"; -const char HA_STATE_OFF[] PROGMEM = "state_off"; -const char HA_PAYLOAD_ON[] PROGMEM = "payload_on"; -const char HA_PAYLOAD_OFF[] PROGMEM = "payload_off"; -const char HA_STATE_CLASS[] PROGMEM = "state_class"; -const char HA_EXPIRE_AFTER[] PROGMEM = "expire_after"; \ No newline at end of file +const char HA_DEVICE[] PROGMEM = "device"; +const char HA_IDENTIFIERS[] PROGMEM = "identifiers"; +const char HA_SW_VERSION[] PROGMEM = "sw_version"; +const char HA_MANUFACTURER[] PROGMEM = "manufacturer"; +const char HA_MODEL[] PROGMEM = "model"; +const char HA_NAME[] PROGMEM = "name"; +const char HA_CONF_URL[] PROGMEM = "configuration_url"; +const char HA_COMMAND_TOPIC[] PROGMEM = "command_topic"; +const char HA_COMMAND_TEMPLATE[] PROGMEM = "command_template"; +const char HA_ENABLED_BY_DEFAULT[] PROGMEM = "enabled_by_default"; +const char HA_UNIQUE_ID[] PROGMEM = "unique_id"; +const char HA_OBJECT_ID[] PROGMEM = "object_id"; +const char HA_ENTITY_CATEGORY[] PROGMEM = "entity_category"; +const char HA_STATE_TOPIC[] PROGMEM = "state_topic"; +const char HA_VALUE_TEMPLATE[] PROGMEM = "value_template"; +const char HA_OPTIONS[] PROGMEM = "options"; +const char HA_AVAILABILITY[] PROGMEM = "availability"; +const char HA_AVAILABILITY_MODE[] PROGMEM = "availability_mode"; +const char HA_TOPIC[] PROGMEM = "topic"; +const char HA_DEVICE_CLASS[] PROGMEM = "device_class"; +const char HA_UNIT_OF_MEASUREMENT[] PROGMEM = "unit_of_measurement"; +const char HA_ICON[] PROGMEM = "icon"; +const char HA_MIN[] PROGMEM = "min"; +const char HA_MAX[] PROGMEM = "max"; +const char HA_STEP[] PROGMEM = "step"; +const char HA_MODE[] PROGMEM = "mode"; +const char HA_STATE_ON[] PROGMEM = "state_on"; +const char HA_STATE_OFF[] PROGMEM = "state_off"; +const char HA_PAYLOAD_ON[] PROGMEM = "payload_on"; +const char HA_PAYLOAD_OFF[] PROGMEM = "payload_off"; +const char HA_STATE_CLASS[] PROGMEM = "state_class"; +const char HA_EXPIRE_AFTER[] PROGMEM = "expire_after"; +const char HA_CURRENT_TEMPERATURE_TOPIC[] PROGMEM = "current_temperature_topic"; +const char HA_CURRENT_TEMPERATURE_TEMPLATE[] PROGMEM = "current_temperature_template"; +const char HA_TEMPERATURE_COMMAND_TOPIC[] PROGMEM = "temperature_command_topic"; +const char HA_TEMPERATURE_COMMAND_TEMPLATE[] PROGMEM = "temperature_command_template"; +const char HA_TEMPERATURE_STATE_TOPIC[] PROGMEM = "temperature_state_topic"; +const char HA_TEMPERATURE_STATE_TEMPLATE[] PROGMEM = "temperature_state_template"; +const char HA_MODE_COMMAND_TOPIC[] PROGMEM = "mode_command_topic"; +const char HA_MODE_COMMAND_TEMPLATE[] PROGMEM = "mode_command_template"; +const char HA_MODE_STATE_TOPIC[] PROGMEM = "mode_state_topic"; +const char HA_MODE_STATE_TEMPLATE[] PROGMEM = "mode_state_template"; +const char HA_MODES[] PROGMEM = "modes"; +const char HA_ACTION_TOPIC[] PROGMEM = "action_topic"; +const char HA_ACTION_TEMPLATE[] PROGMEM = "action_template"; +const char HA_MIN_TEMP[] PROGMEM = "min_temp"; +const char HA_MAX_TEMP[] PROGMEM = "max_temp"; +const char HA_TEMP_STEP[] PROGMEM = "temp_step"; +const char HA_PRESET_MODE_COMMAND_TOPIC[] PROGMEM = "preset_mode_command_topic"; +const char HA_PRESET_MODE_COMMAND_TEMPLATE[] PROGMEM = "preset_mode_command_template"; +const char HA_PRESET_MODE_STATE_TOPIC[] PROGMEM = "preset_mode_state_topic"; +const char HA_PRESET_MODE_VALUE_TEMPLATE[] PROGMEM = "preset_mode_value_template"; +const char HA_PRESET_MODES[] PROGMEM = "preset_modes"; diff --git a/src/HaHelper.h b/src/HaHelper.h index 1fe8181..cdffcd6 100644 --- a/src/HaHelper.h +++ b/src/HaHelper.h @@ -949,6 +949,7 @@ public: doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw_flow_rate"); doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw_flow_rate"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); + doc[FPSTR(HA_DEVICE_CLASS)] = F("volume"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("L/min"); doc[FPSTR(HA_NAME)] = F("DHW flow rate"); @@ -1086,37 +1087,37 @@ public: doc[FPSTR(HA_NAME)] = F("Heating"); doc[FPSTR(HA_ICON)] = F("mdi:radiator"); - doc[F("current_temperature_topic")] = devicePrefix + F("/state"); - doc[F("current_temperature_template")] = F("{% if value_json.temperatures.indoor|float(0) != 0 %}{{ value_json.temperatures.indoor|float(0)|round(2) }}" + doc[FPSTR(HA_CURRENT_TEMPERATURE_TOPIC)] = devicePrefix + F("/state"); + doc[FPSTR(HA_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[F("temperature_command_topic")] = devicePrefix + F("/settings/set"); - doc[F("temperature_command_template")] = F("{\"heating\": {\"target\" : {{ value }}}}"); + doc[FPSTR(HA_TEMPERATURE_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); + doc[FPSTR(HA_TEMPERATURE_COMMAND_TEMPLATE)] = F("{\"heating\": {\"target\" : {{ value }}}}"); - doc[F("temperature_state_topic")] = devicePrefix + F("/settings"); - doc[F("temperature_state_template")] = F("{{ value_json.heating.target|float(0)|round(1) }}"); + doc[FPSTR(HA_TEMPERATURE_STATE_TOPIC)] = devicePrefix + F("/settings"); + doc[FPSTR(HA_TEMPERATURE_STATE_TEMPLATE)] = F("{{ value_json.heating.target|float(0)|round(1) }}"); - doc[F("mode_command_topic")] = devicePrefix + F("/settings/set"); - doc[F("mode_command_template")] = F("{% if value == 'heat' %}{\"heating\": {\"enable\" : true}}" + doc[FPSTR(HA_MODE_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); + doc[FPSTR(HA_MODE_COMMAND_TEMPLATE)] = F("{% if value == 'heat' %}{\"heating\": {\"enable\" : true}}" "{% elif value == 'off' %}{\"heating\": {\"enable\" : false}}{% endif %}"); - doc[F("mode_state_topic")] = devicePrefix + 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"); + doc[FPSTR(HA_MODE_STATE_TOPIC)] = devicePrefix + F("/settings"); + doc[FPSTR(HA_MODE_STATE_TEMPLATE)] = F("{{ iif(value_json.heating.enable, 'heat', 'off') }}"); + doc[FPSTR(HA_MODES)][0] = F("off"); + doc[FPSTR(HA_MODES)][1] = F("heat"); - doc[F("action_topic")] = devicePrefix + F("/state"); - doc[F("action_template")] = F("{{ iif(value_json.states.heating, 'heating', 'idle') }}"); + doc[FPSTR(HA_ACTION_TOPIC)] = devicePrefix + F("/state"); + doc[FPSTR(HA_ACTION_TEMPLATE)] = F("{{ iif(value_json.states.heating, 'heating', 'idle') }}"); - doc[F("preset_mode_command_topic")] = devicePrefix + F("/settings/set"); - doc[F("preset_mode_command_template")] = F("{% if value == 'boost' %}{\"heating\": {\"turbo\" : true}}" + doc[FPSTR(HA_PRESET_MODE_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); + doc[FPSTR(HA_PRESET_MODE_COMMAND_TEMPLATE)] = F("{% if value == 'boost' %}{\"heating\": {\"turbo\" : true}}" "{% elif value == 'none' %}{\"heating\": {\"turbo\" : false}}{% endif %}"); - doc[F("preset_mode_state_topic")] = devicePrefix + F("/settings"); - doc[F("preset_mode_value_template")] = F("{{ iif(value_json.heating.turbo, 'boost', 'none') }}"); - doc[F("preset_modes")][0] = F("boost"); + doc[FPSTR(HA_PRESET_MODE_STATE_TOPIC)] = devicePrefix + F("/settings"); + doc[FPSTR(HA_PRESET_MODE_VALUE_TEMPLATE)] = F("{{ iif(value_json.heating.turbo, 'boost', 'none') }}"); + doc[FPSTR(HA_PRESET_MODES)][0] = F("boost"); - doc[F("min_temp")] = minTemp; - doc[F("max_temp")] = maxTemp; - doc[F("temp_step")] = 0.5; + doc[FPSTR(HA_MIN_TEMP)] = minTemp; + doc[FPSTR(HA_MAX_TEMP)] = maxTemp; + doc[FPSTR(HA_TEMP_STEP)] = 0.5; return publish(getTopic("climate", "heating", "_").c_str(), doc); } @@ -1131,28 +1132,28 @@ public: doc[FPSTR(HA_NAME)] = F("DHW"); doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); - doc[F("current_temperature_topic")] = devicePrefix + F("/state"); - doc[F("current_temperature_template")] = F("{{ value_json.temperatures.dhw|float(0)|round(1) }}"); + doc[FPSTR(HA_CURRENT_TEMPERATURE_TOPIC)] = devicePrefix + F("/state"); + doc[FPSTR(HA_CURRENT_TEMPERATURE_TEMPLATE)] = F("{{ value_json.temperatures.dhw|float(0)|round(1) }}"); - doc[F("temperature_command_topic")] = devicePrefix + F("/settings/set"); - doc[F("temperature_command_template")] = F("{\"dhw\": {\"target\" : {{ value|int(0) }}}}"); + doc[FPSTR(HA_TEMPERATURE_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); + doc[FPSTR(HA_TEMPERATURE_COMMAND_TEMPLATE)] = F("{\"dhw\": {\"target\" : {{ value|int(0) }}}}"); - doc[F("temperature_state_topic")] = devicePrefix + F("/settings"); - doc[F("temperature_state_template")] = F("{{ value_json.dhw.target|int(0) }}"); + doc[FPSTR(HA_TEMPERATURE_STATE_TOPIC)] = devicePrefix + F("/settings"); + doc[FPSTR(HA_TEMPERATURE_STATE_TEMPLATE)] = F("{{ value_json.dhw.target|int(0) }}"); - doc[F("mode_command_topic")] = devicePrefix + F("/settings/set"); - doc[F("mode_command_template")] = F("{% if value == 'heat' %}{\"dhw\": {\"enable\" : true}}" + doc[FPSTR(HA_MODE_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); + doc[FPSTR(HA_MODE_COMMAND_TEMPLATE)] = F("{% if value == 'heat' %}{\"dhw\": {\"enable\" : true}}" "{% elif value == 'off' %}{\"dhw\": {\"enable\" : false}}{% endif %}"); - doc[F("mode_state_topic")] = devicePrefix + 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"); + doc[FPSTR(HA_MODE_STATE_TOPIC)] = devicePrefix + F("/settings"); + doc[FPSTR(HA_MODE_STATE_TEMPLATE)] = F("{{ iif(value_json.dhw.enable, 'heat', 'off') }}"); + doc[FPSTR(HA_MODES)][0] = F("off"); + doc[FPSTR(HA_MODES)][1] = F("heat"); - doc[F("action_topic")] = devicePrefix + F("/state"); - doc[F("action_template")] = F("{{ iif(value_json.states.dhw, 'heating', 'idle') }}"); + doc[FPSTR(HA_ACTION_TOPIC)] = devicePrefix + F("/state"); + doc[FPSTR(HA_ACTION_TEMPLATE)] = F("{{ iif(value_json.states.dhw, 'heating', 'idle') }}"); - doc[F("min_temp")] = minTemp; - doc[F("max_temp")] = maxTemp; + doc[FPSTR(HA_MIN_TEMP)] = minTemp; + doc[FPSTR(HA_MAX_TEMP)] = maxTemp; return publish(getTopic("climate", "dhw", "_").c_str(), doc); } diff --git a/src/MqttTask.h b/src/MqttTask.h index 417b152..8f4c96b 100644 --- a/src/MqttTask.h +++ b/src/MqttTask.h @@ -425,13 +425,13 @@ protected: haHelper.publishBinSensorFlame(); haHelper.publishBinSensorFault(); haHelper.publishBinSensorDiagnostic(); - haHelper.publishSensorFaultCode(); - haHelper.publishSensorRssi(false); - haHelper.publishSensorUptime(false); // sensors haHelper.publishSensorModulation(false); haHelper.publishSensorPressure(false); + haHelper.publishSensorFaultCode(); + haHelper.publishSensorRssi(false); + haHelper.publishSensorUptime(false); // temperatures haHelper.publishNumberIndoorTemp(); diff --git a/src/main.cpp b/src/main.cpp index da7e5fc..dc14293 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6,7 +6,7 @@ #include #include "Settings.h" -EEManager eeSettings(settings, 30000); +EEManager eeSettings(settings, 60000); #if defined(ESP32) #include