From 38889bb59de32d197b063146932be5b1832a9ff3 Mon Sep 17 00:00:00 2001 From: Yurii Date: Thu, 14 Dec 2023 05:43:12 +0300 Subject: [PATCH] Fix issue #18 --- src/HaHelper.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/src/HaHelper.h b/src/HaHelper.h index e5cc220..5c5a7b6 100644 --- a/src/HaHelper.h +++ b/src/HaHelper.h @@ -20,6 +20,7 @@ public: doc[FPSTR(HA_OPTIONS)][0] = F("Boiler"); doc[FPSTR(HA_OPTIONS)][1] = F("Manual"); doc[FPSTR(HA_OPTIONS)][2] = F("External"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("select", "outdoor_sensor_type").c_str(), doc); } @@ -48,6 +49,7 @@ public: #if USE_BLE doc[FPSTR(HA_OPTIONS)][2] = F("Bluetooth"); #endif + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("select", "indoor_sensor_type").c_str(), doc); } @@ -72,6 +74,7 @@ public: doc[FPSTR(HA_MAX)] = 10; doc[FPSTR(HA_STEP)] = 0.1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "outdoor_sensor_offset").c_str(), doc); } @@ -96,6 +99,7 @@ public: doc[FPSTR(HA_MAX)] = 10; doc[FPSTR(HA_STEP)] = 0.1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "indoor_sensor_offset").c_str(), doc); } @@ -116,6 +120,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"debug\": true}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"debug\": false}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "debug").c_str(), doc); } @@ -136,6 +141,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"emergency\": {\"enable\" : true}}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"emergency\": {\"enable\" : false}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "emergency").c_str(), doc); } @@ -158,6 +164,7 @@ public: doc[FPSTR(HA_MAX)] = 50; doc[FPSTR(HA_STEP)] = 0.5; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "emergency_target").c_str(), doc); } @@ -179,6 +186,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"emergency\": {\"useEquitherm\" : true}}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"emergency\": {\"useEquitherm\" : false}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "emergency_use_equitherm").c_str(), doc); } @@ -200,6 +208,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"heating\": {\"enable\" : true}}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"heating\": {\"enable\" : false}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "heating").c_str(), doc); } @@ -220,6 +229,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"heating\": {\"turbo\" : true}}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"heating\": {\"turbo\" : false}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "heating_turbo").c_str(), doc); } @@ -243,6 +253,7 @@ public: doc[FPSTR(HA_MAX)] = maxTemp; doc[FPSTR(HA_STEP)] = 0.5; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "heating_target").c_str(), doc); } @@ -265,6 +276,7 @@ public: doc[FPSTR(HA_MAX)] = 5; doc[FPSTR(HA_STEP)] = 0.1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "heating_hysteresis").c_str(), doc); } @@ -283,6 +295,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:coolant-temperature"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.heatingSetpoint|int(0) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "heating_setpoint").c_str(), doc); } @@ -301,6 +314,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-down"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.heatingMinTemp|int(0) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "current_heating_min_temp").c_str(), doc); } @@ -319,6 +333,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-up"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.heatingMaxTemp|int(0) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "current_heating_max_temp").c_str(), doc); } @@ -341,6 +356,7 @@ public: doc[FPSTR(HA_MAX)] = 99; doc[FPSTR(HA_STEP)] = 1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "heating_min_temp").c_str(), doc); } @@ -363,6 +379,7 @@ public: doc[FPSTR(HA_MAX)] = 100; doc[FPSTR(HA_STEP)] = 1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "heating_max_temp").c_str(), doc); } @@ -385,6 +402,7 @@ public: doc[FPSTR(HA_MAX)] = 100; doc[FPSTR(HA_STEP)] = 1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "heating_max_modulation").c_str(), doc); } @@ -406,6 +424,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"dhw\": {\"enable\" : true}}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"dhw\": {\"enable\" : false}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "dhw").c_str(), doc); } @@ -429,6 +448,7 @@ public: doc[FPSTR(HA_MAX)] = maxTemp <= minTemp ? maxTemp : maxTemp; doc[FPSTR(HA_STEP)] = 1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "dhw_target").c_str(), doc); } @@ -447,6 +467,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-down"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.dhwMinTemp|int(0) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "current_dhw_min_temp").c_str(), doc); } @@ -465,6 +486,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-up"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.dhwMaxTemp|int(0) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "current_dhw_max_temp").c_str(), doc); } @@ -487,6 +509,7 @@ public: doc[FPSTR(HA_MAX)] = 99; doc[FPSTR(HA_STEP)] = 1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "dhw_min_temp").c_str(), doc); } @@ -509,6 +532,7 @@ public: doc[FPSTR(HA_MAX)] = 100; doc[FPSTR(HA_STEP)] = 1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "dhw_max_temp").c_str(), doc); } @@ -529,6 +553,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"pid\": {\"enable\" : true}}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"pid\": {\"enable\" : false}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "pid").c_str(), doc); } @@ -548,6 +573,7 @@ public: doc[FPSTR(HA_MAX)] = 10; doc[FPSTR(HA_STEP)] = 0.001; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "pid_p_factor").c_str(), doc); } @@ -567,6 +593,7 @@ public: doc[FPSTR(HA_MAX)] = 10; doc[FPSTR(HA_STEP)] = 0.001; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "pid_i_factor").c_str(), doc); } @@ -586,6 +613,7 @@ public: doc[FPSTR(HA_MAX)] = 10; doc[FPSTR(HA_STEP)] = 0.001; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "pid_d_factor").c_str(), doc); } @@ -608,6 +636,7 @@ public: doc[FPSTR(HA_MAX)] = 99; doc[FPSTR(HA_STEP)] = 1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "pid_min_temp").c_str(), doc); } @@ -630,6 +659,7 @@ public: doc[FPSTR(HA_MAX)] = 100; doc[FPSTR(HA_STEP)] = 1; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "pid_max_temp").c_str(), doc); } @@ -650,6 +680,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"equitherm\": {\"enable\" : true}}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"equitherm\": {\"enable\" : false}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "equitherm").c_str(), doc); } @@ -669,6 +700,7 @@ public: doc[FPSTR(HA_MAX)] = 10; doc[FPSTR(HA_STEP)] = 0.001; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "equitherm_n_factor").c_str(), doc); } @@ -688,6 +720,7 @@ public: doc[FPSTR(HA_MAX)] = 10; doc[FPSTR(HA_STEP)] = 0.01; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "equitherm_k_factor").c_str(), doc); } @@ -709,6 +742,7 @@ public: doc[FPSTR(HA_MAX)] = 10; doc[FPSTR(HA_STEP)] = 0.01; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "equitherm_t_factor").c_str(), doc); } @@ -729,6 +763,7 @@ public: doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); doc[FPSTR(HA_PAYLOAD_ON)] = F("{\"tuning\": {\"enable\" : true}}"); doc[FPSTR(HA_PAYLOAD_OFF)] = F("{\"tuning\": {\"enable\" : false}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("switch", "tuning").c_str(), doc); } @@ -748,6 +783,7 @@ public: doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{% if value_json.tuning.regulator == 0 %}Equitherm{% elif value_json.tuning.regulator == 1 %}PID{% endif %}"); doc[FPSTR(HA_OPTIONS)][0] = F("Equitherm"); doc[FPSTR(HA_OPTIONS)][1] = F("PID"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("select", "tuning_regulator").c_str(), doc); } @@ -780,6 +816,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:list-status"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.otStatus, 'OFF', 'ON') }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("binary_sensor", "ot_status").c_str(), doc); } @@ -796,6 +833,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:radiator"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.heating, 'ON', 'OFF') }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("binary_sensor", "heating").c_str(), doc); } @@ -812,6 +850,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.dhw, 'ON', 'OFF') }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("binary_sensor", "dhw").c_str(), doc); } @@ -828,6 +867,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:fire"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.flame, 'ON', 'OFF') }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("binary_sensor", "flame").c_str(), doc); } @@ -845,6 +885,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:water-boiler-alert"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.fault, 'ON', 'OFF') }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("binary_sensor", "fault").c_str(), doc); } @@ -861,6 +902,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:account-wrench"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.diagnostic, 'ON', 'OFF') }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("binary_sensor", "diagnostic").c_str(), doc); } @@ -877,6 +919,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:chat-alert-outline"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ \"E%02d\"|format(value_json.sensors.faultCode) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "fault_code").c_str(), doc); } @@ -895,6 +938,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:signal"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.rssi|float(0)|round(1) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "rssi").c_str(), doc); } @@ -913,6 +957,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:clock-start"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.uptime|int(0) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "uptime").c_str(), doc); } @@ -932,6 +977,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:fire-circle"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.modulation|float(0)|round(0) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "modulation").c_str(), doc); } @@ -950,6 +996,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:gauge"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.pressure|float(0)|round(2) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "pressure").c_str(), doc); } @@ -968,6 +1015,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.dhwFlowRate|float(0)|round(2) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "dhw_flow_rate").c_str(), doc); } @@ -990,6 +1038,7 @@ public: doc[FPSTR(HA_MAX)] = 99; doc[FPSTR(HA_STEP)] = 0.01; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "indoor_temp").c_str(), doc); } @@ -1009,6 +1058,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:home-thermometer"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.temperatures.indoor|float(0)|round(1) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "indoor_temp").c_str(), doc); } @@ -1030,6 +1080,7 @@ public: doc[FPSTR(HA_MAX)] = 99; doc[FPSTR(HA_STEP)] = 0.01; doc[FPSTR(HA_MODE)] = "box"; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("number", "outdoor_temp").c_str(), doc); } @@ -1049,6 +1100,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:home-thermometer-outline"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.temperatures.outdoor|float(0)|round(1) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "outdoor_temp").c_str(), doc); } @@ -1067,6 +1119,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:radiator"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.temperatures.heating|float(0)|round(2) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "heating_temp").c_str(), doc); } @@ -1085,6 +1138,7 @@ public: doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.temperatures.dhw|float(0)|round(2) }}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("sensor", "dhw_temp").c_str(), doc); } @@ -1137,6 +1191,7 @@ public: doc[FPSTR(HA_MIN_TEMP)] = minTemp; doc[FPSTR(HA_MAX_TEMP)] = maxTemp; doc[FPSTR(HA_TEMP_STEP)] = 0.5; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("climate", "heating", "_").c_str(), doc); } @@ -1173,6 +1228,7 @@ public: doc[FPSTR(HA_MIN_TEMP)] = minTemp; doc[FPSTR(HA_MAX_TEMP)] = maxTemp; + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("climate", "dhw", "_").c_str(), doc); } @@ -1188,6 +1244,7 @@ public: doc[FPSTR(HA_NAME)] = F("Restart"); doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"actions\": {\"restart\": true}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("button", "restart").c_str(), doc); } @@ -1204,6 +1261,7 @@ public: doc[FPSTR(HA_NAME)] = F("Reset fault"); doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"actions\": {\"resetFault\": true}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("button", "reset_fault").c_str(), doc); } @@ -1220,6 +1278,7 @@ public: doc[FPSTR(HA_NAME)] = F("Reset diagnostic"); doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"actions\": {\"resetDiagnostic\": true}}"); + doc[FPSTR(HA_EXPIRE_AFTER)] = 120; return publish(getTopic("button", "reset_diagnostic").c_str(), doc); }