diff --git a/lib/HomeAssistantHelper/HomeAssistantHelper.h b/lib/HomeAssistantHelper/HomeAssistantHelper.h index e301353..5c20219 100644 --- a/lib/HomeAssistantHelper/HomeAssistantHelper.h +++ b/lib/HomeAssistantHelper/HomeAssistantHelper.h @@ -8,38 +8,48 @@ public: { } - void setPrefix(String value) { - _prefix = value; + void setDevicePrefix(String value) { + devicePrefix = value; } void setDeviceVersion(String value) { - _deviceVersion = value; + deviceVersion = value; } void setDeviceManufacturer(String value) { - _deviceManufacturer = value; + deviceManufacturer = value; } void setDeviceModel(String value) { - _deviceModel = value; + deviceModel = value; } void setDeviceName(String value) { - _deviceName = value; + deviceName = value; } void setDeviceConfigUrl(String value) { - _deviceConfigUrl = value; + deviceConfigUrl = value; } bool publish(const char* topic, JsonDocument& doc) { - doc[FPSTR(HA_DEVICE)][FPSTR(HA_IDENTIFIERS)][0] = _prefix; - doc[FPSTR(HA_DEVICE)][FPSTR(HA_SW_VERSION)] = _deviceVersion; - doc[FPSTR(HA_DEVICE)][FPSTR(HA_MANUFACTURER)] = _deviceManufacturer; - doc[FPSTR(HA_DEVICE)][FPSTR(HA_MODEL)] = _deviceModel; - doc[FPSTR(HA_DEVICE)][FPSTR(HA_NAME)] = _deviceName; - if (_deviceConfigUrl) { - doc[FPSTR(HA_DEVICE)][FPSTR(HA_CONF_URL)] = _deviceConfigUrl; + doc[FPSTR(HA_DEVICE)][FPSTR(HA_IDENTIFIERS)][0] = devicePrefix; + doc[FPSTR(HA_DEVICE)][FPSTR(HA_SW_VERSION)] = deviceVersion; + + if (deviceManufacturer) { + doc[FPSTR(HA_DEVICE)][FPSTR(HA_MANUFACTURER)] = deviceManufacturer; + } + + if (deviceModel) { + doc[FPSTR(HA_DEVICE)][FPSTR(HA_MODEL)] = deviceModel; + } + + if (deviceName) { + doc[FPSTR(HA_DEVICE)][FPSTR(HA_NAME)] = deviceName; + } + + if (deviceConfigUrl) { + doc[FPSTR(HA_DEVICE)][FPSTR(HA_CONF_URL)] = deviceConfigUrl; } client->beginPublish(topic, measureJson(doc), true); @@ -52,10 +62,12 @@ public: } String getTopic(const char* category, const char* name, const char* nameSeparator = "/") { - String topic = "homeassistant/"; + String topic = ""; + topic.concat(prefix); + topic.concat("/"); topic.concat(category); topic.concat("/"); - topic.concat(_prefix); + topic.concat(devicePrefix); topic.concat(nameSeparator); topic.concat(name); topic.concat("/config"); @@ -64,10 +76,11 @@ public: protected: PubSubClient* client; - String _prefix = ""; - String _deviceVersion = "1.0"; - String _deviceManufacturer = "Community"; - String _deviceModel = ""; - String _deviceName = ""; - String _deviceConfigUrl = ""; + String prefix = "homeassistant"; + String devicePrefix = ""; + String deviceVersion = "1.0"; + String deviceManufacturer = "Community"; + String deviceModel = ""; + String deviceName = ""; + String deviceConfigUrl = ""; }; diff --git a/src/HaHelper.h b/src/HaHelper.h index 782eefd..713f96b 100644 --- a/src/HaHelper.h +++ b/src/HaHelper.h @@ -7,14 +7,14 @@ public: bool publishSelectOutdoorSensorType(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"sensors\": {\"outdoor\": {\"type\": {% if value == 'Boiler' %}0{% elif value == 'Manual' %}1{% elif value == 'External' %}2{% endif %}}}}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_outdoor_sensor_type"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_outdoor_sensor_type"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_outdoor_sensor_type"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_outdoor_sensor_type"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Outdoor temperature source"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{% if value_json.sensors.outdoor.type == 0 %}Boiler{% elif value_json.sensors.outdoor.type == 1 %}Manual{% elif value_json.sensors.outdoor.type == 2 %}External{% endif %}"); doc[FPSTR(HA_OPTIONS)][0] = F("Boiler"); doc[FPSTR(HA_OPTIONS)][1] = F("Manual"); @@ -25,14 +25,14 @@ public: bool publishSelectIndoorSensorType(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"sensors\": {\"indoor\": {\"type\": {% if value == 'Manual' %}1{% elif value == 'External' %}2{% endif %}}}}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_indoor_sensor_type"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_indoor_sensor_type"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_indoor_sensor_type"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_indoor_sensor_type"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Indoor temperature source"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{% if value_json.sensors.indoor.type == 1 %}Manual{% elif value_json.sensors.indoor.type == 2 %}External{% endif %}"); doc[FPSTR(HA_OPTIONS)][0] = F("Manual"); doc[FPSTR(HA_OPTIONS)][1] = F("External"); @@ -42,19 +42,19 @@ public: bool publishNumberOutdoorSensorOffset(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/settings"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/settings"); doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.sensors.outdoor.type != 1, 'online', 'offline') }}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_outdoor_sensor_offset"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_outdoor_sensor_offset"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_outdoor_sensor_offset"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_outdoor_sensor_offset"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Outdoor sensor offset"); doc[FPSTR(HA_ICON)] = F("mdi:altimeter"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.outdoor.offset|float(0)|round(2) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"sensors\": {\"outdoor\" : {\"offset\" : {{ value }}}}}"); doc[FPSTR(HA_MIN)] = -10; doc[FPSTR(HA_MAX)] = 10; @@ -66,19 +66,19 @@ public: bool publishNumberIndoorSensorOffset(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/settings"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/settings"); doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.sensors.indoor.type != 1, 'online', 'offline') }}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_indoor_sensor_offset"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_indoor_sensor_offset"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_indoor_sensor_offset"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_indoor_sensor_offset"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Indoor sensor offset"); doc[FPSTR(HA_ICON)] = F("mdi:altimeter"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.indoor.offset|float(0)|round(2) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"sensors\": {\"indoor\" : {\"offset\" : {{ value }}}}}"); doc[FPSTR(HA_MIN)] = -10; doc[FPSTR(HA_MAX)] = 10; @@ -92,16 +92,16 @@ public: bool publishSwitchDebug(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_debug"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_debug"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_debug"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_debug"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Debug"); doc[FPSTR(HA_ICON)] = F("mdi:code-braces"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.debug }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + 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}"); @@ -112,16 +112,16 @@ public: bool publishSwitchEmergency(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_emergency"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_emergency"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_emergency"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_emergency"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Use emergency"); doc[FPSTR(HA_ICON)] = F("mdi:sun-snowflake-variant"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.emergency.enable }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + 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}}"); @@ -131,16 +131,16 @@ public: bool publishNumberEmergencyTarget(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_emergency_target"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_emergency_target"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_emergency_target"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_emergency_target"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Emergency target temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-alert"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.emergency.target|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"emergency\": {\"target\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 5; doc[FPSTR(HA_MAX)] = 50; @@ -152,19 +152,19 @@ public: bool publishSwitchEmergencyUseEquitherm(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/settings"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/settings"); doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.sensors.outdoor.type != 1, 'online', 'offline') }}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_emergency_use_equitherm"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_emergency_use_equitherm"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_emergency_use_equitherm"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_emergency_use_equitherm"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Use equitherm in emergency"); doc[FPSTR(HA_ICON)] = F("mdi:snowflake-alert"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.emergency.useEquitherm }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + 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}}"); @@ -174,18 +174,18 @@ public: bool publishSwitchHeating(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Heating"); doc[FPSTR(HA_ICON)] = F("mdi:radiator"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.heating.enable }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + 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}}"); @@ -194,18 +194,18 @@ public: bool publishSwitchHeatingTurbo(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating_turbo"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating_turbo"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating_turbo"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating_turbo"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Turbo heating"); doc[FPSTR(HA_ICON)] = F("mdi:rocket-launch-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.heating.turbo }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + 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}}"); @@ -214,18 +214,18 @@ public: bool publishNumberHeatingTarget(byte minTemp = 20, byte maxTemp = 90, bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating_target"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating_target"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating_target"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating_target"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Heating target"); doc[FPSTR(HA_ICON)] = F("mdi:radiator"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.heating.target|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"heating\": {\"target\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = minTemp; doc[FPSTR(HA_MAX)] = maxTemp; @@ -238,16 +238,16 @@ public: bool publishNumberHeatingHysteresis(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating_hysteresis"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating_hysteresis"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating_hysteresis"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating_hysteresis"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Heating hysteresis"); doc[FPSTR(HA_ICON)] = F("mdi:altimeter"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.heating.hysteresis|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"heating\": {\"hysteresis\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0; doc[FPSTR(HA_MAX)] = 5; @@ -259,17 +259,17 @@ public: bool publishSensorHeatingSetpoint(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating_setpoint"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating_setpoint"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating_setpoint"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating_setpoint"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Heating setpoint"); doc[FPSTR(HA_ICON)] = F("mdi:coolant-temperature"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.heatingSetpoint|int(0) }}"); return publish(getTopic("sensor", "heating_setpoint").c_str(), doc); @@ -277,17 +277,17 @@ public: bool publishSensorCurrentHeatingMinTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_current_heating_min_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_current_heating_min_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_current_heating_min_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_current_heating_min_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Current heating min temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-down"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.heatingMinTemp|int(0) }}"); return publish(getTopic("sensor", "current_heating_min_temp").c_str(), doc); @@ -295,17 +295,17 @@ public: bool publishSensorCurrentHeatingMaxTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_current_heating_max_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_current_heating_max_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_current_heating_max_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_current_heating_max_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Current heating max temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-up"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.heatingMaxTemp|int(0) }}"); return publish(getTopic("sensor", "current_heating_max_temp").c_str(), doc); @@ -314,16 +314,16 @@ public: bool publishNumberHeatingMinTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating_min_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating_min_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating_min_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating_min_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Heating min temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-down"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.heating.minTemp|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"heating\": {\"minTemp\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0; doc[FPSTR(HA_MAX)] = 99; @@ -336,16 +336,16 @@ public: bool publishNumberHeatingMaxTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating_max_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating_max_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating_max_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating_max_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Heating max temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-up"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.heating.maxTemp|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"heating\": {\"maxTemp\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 1; doc[FPSTR(HA_MAX)] = 100; @@ -358,18 +358,18 @@ public: bool publishSwitchDHW(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_dhw"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_dhw"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("DHW"); doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.dhw.enable }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + 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}}"); @@ -378,18 +378,18 @@ public: bool publishNumberDHWTarget(byte minTemp = 40, byte maxTemp = 60, bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_dhw_target"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_dhw_target"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw_target"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw_target"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("DHW target"); doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.dhw.target|int(0) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"dhw\": {\"target\" : {{ value|int(0) }}}}"); doc[FPSTR(HA_MIN)] = minTemp; doc[FPSTR(HA_MAX)] = maxTemp <= minTemp ? maxTemp : maxTemp; @@ -401,17 +401,17 @@ public: bool publishSensorCurrentDHWMinTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_current_dhw_min_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_current_dhw_min_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_current_dhw_min_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_current_dhw_min_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Current DHW min temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-down"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.dhwMinTemp|int(0) }}"); return publish(getTopic("sensor", "current_dhw_min_temp").c_str(), doc); @@ -419,17 +419,17 @@ public: bool publishSensorCurrentDHWMaxTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_current_dhw_max_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_current_dhw_max_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_current_dhw_max_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_current_dhw_max_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Current DHW max temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-up"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.parameters.dhwMaxTemp|int(0) }}"); return publish(getTopic("sensor", "current_dhw_max_temp").c_str(), doc); @@ -438,16 +438,16 @@ public: bool publishNumberDHWMinTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_dhw_min_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_dhw_min_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw_min_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw_min_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("DHW min temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-down"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.dhw.minTemp|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"dhw\": {\"minTemp\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0; doc[FPSTR(HA_MAX)] = 99; @@ -460,16 +460,16 @@ public: bool publishNumberDHWMaxTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_dhw_max_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_dhw_max_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw_max_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw_max_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("DHW max temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-up"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.dhw.maxTemp|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"dhw\": {\"maxTemp\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 1; doc[FPSTR(HA_MAX)] = 100; @@ -483,16 +483,16 @@ public: bool publishSwitchPID(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_pid"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_pid"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_pid"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_pid"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("PID"); doc[FPSTR(HA_ICON)] = F("mdi:chart-bar-stacked"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.pid.enable }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + 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}}"); @@ -501,14 +501,14 @@ public: bool publishNumberPIDFactorP(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_pid_p"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_pid_p"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_pid_p"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_pid_p"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("PID factor P"); doc[FPSTR(HA_ICON)] = F("mdi:alpha-p-circle-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.pid.p_factor|float(0)|round(3) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"pid\": {\"p_factor\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0.001; doc[FPSTR(HA_MAX)] = 10; @@ -520,14 +520,14 @@ public: bool publishNumberPIDFactorI(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_pid_i"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_pid_i"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_pid_i"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_pid_i"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("PID factor I"); doc[FPSTR(HA_ICON)] = F("mdi:alpha-i-circle-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.pid.i_factor|float(0)|round(3) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"pid\": {\"i_factor\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0; doc[FPSTR(HA_MAX)] = 10; @@ -539,14 +539,14 @@ public: bool publishNumberPIDFactorD(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_pid_d"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_pid_d"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_pid_d"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_pid_d"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("PID factor D"); doc[FPSTR(HA_ICON)] = F("mdi:alpha-d-circle-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.pid.d_factor|float(0)|round(3) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"pid\": {\"d_factor\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0; doc[FPSTR(HA_MAX)] = 10; @@ -559,16 +559,16 @@ public: bool publishNumberPIDMinTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_pid_min_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_pid_min_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_pid_min_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_pid_min_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("PID min temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-down"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.pid.minTemp|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"pid\": {\"minTemp\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0; doc[FPSTR(HA_MAX)] = 99; @@ -581,16 +581,16 @@ public: bool publishNumberPIDMaxTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_pid_max_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_pid_max_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_pid_max_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_pid_max_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("PID max temp"); doc[FPSTR(HA_ICON)] = F("mdi:thermometer-chevron-up"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.pid.maxTemp|float(0)|round(1) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"pid\": {\"maxTemp\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 1; doc[FPSTR(HA_MAX)] = 100; @@ -604,16 +604,16 @@ public: bool publishSwitchEquitherm(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_equitherm"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_equitherm"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_equitherm"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_equitherm"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Equitherm"); doc[FPSTR(HA_ICON)] = F("mdi:sun-snowflake-variant"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.equitherm.enable }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + 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}}"); @@ -622,14 +622,14 @@ public: bool publishNumberEquithermFactorN(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_equitherm_n"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_equitherm_n"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_equitherm_n"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_equitherm_n"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Equitherm factor N"); doc[FPSTR(HA_ICON)] = F("mdi:alpha-n-circle-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.equitherm.n_factor|float(0)|round(3) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"equitherm\": {\"n_factor\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0.001; doc[FPSTR(HA_MAX)] = 10; @@ -641,14 +641,14 @@ public: bool publishNumberEquithermFactorK(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_equitherm_k"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_equitherm_k"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_equitherm_k"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_equitherm_k"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Equitherm factor K"); doc[FPSTR(HA_ICON)] = F("mdi:alpha-k-circle-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.equitherm.k_factor|float(0)|round(2) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"equitherm\": {\"k_factor\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0; doc[FPSTR(HA_MAX)] = 10; @@ -660,16 +660,16 @@ public: bool publishNumberEquithermFactorT(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/settings"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/settings"); doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.pid.enable, 'offline', 'online') }}"); - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_equitherm_t"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_equitherm_t"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_equitherm_t"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_equitherm_t"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Equitherm factor T"); doc[FPSTR(HA_ICON)] = F("mdi:alpha-t-circle-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/settings"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/settings"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.equitherm.t_factor|float(0)|round(2) }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/settings/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/settings/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"equitherm\": {\"t_factor\" : {{ value }}}}"); doc[FPSTR(HA_MIN)] = 0; doc[FPSTR(HA_MAX)] = 10; @@ -683,16 +683,16 @@ public: bool publishSwitchTuning(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_tuning"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_tuning"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_tuning"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_tuning"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Tuning"); doc[FPSTR(HA_ICON)] = F("mdi:tune-vertical"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_STATE_ON)] = true; doc[FPSTR(HA_STATE_OFF)] = false; doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.tuning.enable }}"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/state/set"); + 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}}"); @@ -701,16 +701,16 @@ public: bool publishSelectTuningRegulator(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_AVAILABILITY_MODE)] = F("all"); - doc[FPSTR(HA_COMMAND_TOPIC)] = _prefix + F("/state/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"tuning\": {\"regulator\": {% if value == 'Equitherm' %}0{% elif value == 'PID' %}1{% endif %}}}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_tuning_regulator"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_tuning_regulator"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_tuning_regulator"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_tuning_regulator"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_NAME)] = F("Tuning regulator"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); 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"); @@ -722,13 +722,13 @@ public: bool publishBinSensorStatus(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_status"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_status"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_status"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_status"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("problem"); doc[FPSTR(HA_NAME)] = F("Status"); doc[FPSTR(HA_ICON)] = F("mdi:list-status"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/status"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/status"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value == 'online', 'OFF', 'ON') }}"); doc[FPSTR(HA_EXPIRE_AFTER)] = 60; @@ -738,13 +738,13 @@ public: bool publishBinSensorOtStatus(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_ot_status"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_ot_status"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_ot_status"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_ot_status"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("problem"); doc[FPSTR(HA_NAME)] = F("Opentherm status"); doc[FPSTR(HA_ICON)] = F("mdi:list-status"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.otStatus, 'OFF', 'ON') }}"); return publish(getTopic("binary_sensor", "ot_status").c_str(), doc); @@ -752,15 +752,15 @@ public: bool publishBinSensorHeating(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("running"); doc[FPSTR(HA_NAME)] = F("Heating"); doc[FPSTR(HA_ICON)] = F("mdi:radiator"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.heating, 'ON', 'OFF') }}"); return publish(getTopic("binary_sensor", "heating").c_str(), doc); @@ -768,15 +768,15 @@ public: bool publishBinSensorDHW(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_dhw"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_dhw"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("running"); doc[FPSTR(HA_NAME)] = F("DHW"); doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.dhw, 'ON', 'OFF') }}"); return publish(getTopic("binary_sensor", "dhw").c_str(), doc); @@ -784,15 +784,15 @@ public: bool publishBinSensorFlame(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_flame"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_flame"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_flame"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_flame"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("running"); doc[FPSTR(HA_NAME)] = F("Flame"); doc[FPSTR(HA_ICON)] = F("mdi:fire"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.flame, 'ON', 'OFF') }}"); return publish(getTopic("binary_sensor", "flame").c_str(), doc); @@ -800,16 +800,16 @@ public: bool publishBinSensorFault(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/state"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/state"); doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.otStatus, 'online', 'offline') }}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_fault"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_fault"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_fault"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_fault"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("problem"); doc[FPSTR(HA_NAME)] = F("Fault"); doc[FPSTR(HA_ICON)] = F("mdi:water-boiler-alert"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.fault, 'ON', 'OFF') }}"); return publish(getTopic("binary_sensor", "fault").c_str(), doc); @@ -817,15 +817,15 @@ public: bool publishBinSensorDiagnostic(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_diagnostic"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_diagnostic"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_diagnostic"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_diagnostic"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("problem"); doc[FPSTR(HA_NAME)] = F("Diagnostic"); doc[FPSTR(HA_ICON)] = F("mdi:account-wrench"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.diagnostic, 'ON', 'OFF') }}"); return publish(getTopic("binary_sensor", "diagnostic").c_str(), doc); @@ -833,15 +833,15 @@ public: bool publishSensorFaultCode(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/state"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/state"); doc[FPSTR(HA_AVAILABILITY)][FPSTR(HA_VALUE_TEMPLATE)] = F("{{ iif(value_json.states.fault, 'online', 'offline') }}"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_fault_code"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_fault_code"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_fault_code"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_fault_code"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_NAME)] = F("Fault code"); doc[FPSTR(HA_ICON)] = F("mdi:chat-alert-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ \"E%02d\"|format(value_json.states.faultCode) }}"); return publish(getTopic("sensor", "fault_code").c_str(), doc); @@ -850,15 +850,15 @@ public: bool publishSensorRssi(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_rssi"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_rssi"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_rssi"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_rssi"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("signal_strength"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("dBm"); doc[FPSTR(HA_NAME)] = F("RSSI"); doc[FPSTR(HA_ICON)] = F("mdi:signal"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.states.rssi|float(0)|round(1) }}"); return publish(getTopic("sensor", "rssi").c_str(), doc); @@ -867,17 +867,17 @@ public: bool publishSensorModulation(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_modulation_level"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_modulation_level"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_modulation_level"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_modulation_level"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("power_factor"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("%"); doc[FPSTR(HA_NAME)] = F("Modulation level"); doc[FPSTR(HA_ICON)] = F("mdi:fire-circle"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.modulation|float(0)|round(0) }}"); return publish(getTopic("sensor", "modulation").c_str(), doc); @@ -885,17 +885,17 @@ public: bool publishSensorPressure(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_pressure"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_pressure"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_pressure"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_pressure"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("pressure"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("bar"); doc[FPSTR(HA_NAME)] = F("Pressure"); doc[FPSTR(HA_ICON)] = F("mdi:gauge"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.sensors.pressure|float(0)|round(2) }}"); return publish(getTopic("sensor", "pressure").c_str(), doc); @@ -905,15 +905,15 @@ public: bool publishNumberIndoorTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_indoor_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_indoor_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_indoor_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_indoor_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Indoor temperature"); doc[FPSTR(HA_ICON)] = F("mdi:home-thermometer"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + 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_COMMAND_TOPIC)] = _prefix + F("/state/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"temperatures\": {\"indoor\":{{ value }}}}"); doc[FPSTR(HA_MIN)] = -99; doc[FPSTR(HA_MAX)] = 99; @@ -925,18 +925,18 @@ public: bool publishSensorIndoorTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][0][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][0][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_AVAILABILITY_MODE)] = F("any"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_indoor_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_indoor_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_indoor_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_indoor_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Indoor temperature"); doc[FPSTR(HA_ICON)] = F("mdi:home-thermometer"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.temperatures.indoor|float(0)|round(1) }}"); return publish(getTopic("sensor", "indoor_temp").c_str(), doc); @@ -945,15 +945,15 @@ public: bool publishNumberOutdoorTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_outdoor_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_outdoor_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_outdoor_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_outdoor_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("config"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Outdoor temperature"); doc[FPSTR(HA_ICON)] = F("mdi:home-thermometer-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + 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_COMMAND_TOPIC)] = _prefix + F("/state/set"); + doc[FPSTR(HA_COMMAND_TOPIC)] = devicePrefix + F("/state/set"); doc[FPSTR(HA_COMMAND_TEMPLATE)] = F("{\"temperatures\": {\"outdoor\":{{ value }}}}"); doc[FPSTR(HA_MIN)] = -99; doc[FPSTR(HA_MAX)] = 99; @@ -965,18 +965,18 @@ public: bool publishSensorOutdoorTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][0][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][0][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_AVAILABILITY_MODE)] = F("any"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_outdoor_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_outdoor_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_outdoor_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_outdoor_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Outdoor temperature"); doc[FPSTR(HA_ICON)] = F("mdi:home-thermometer-outline"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.temperatures.outdoor|float(0)|round(1) }}"); return publish(getTopic("sensor", "outdoor_temp").c_str(), doc); @@ -984,17 +984,17 @@ public: bool publishSensorHeatingTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("Heating temperature"); doc[FPSTR(HA_ICON)] = F("mdi:radiator"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.temperatures.heating|float(0)|round(2) }}"); return publish(getTopic("sensor", "heating_temp").c_str(), doc); @@ -1002,17 +1002,17 @@ public: bool publishSensorDHWTemp(bool enabledByDefault = true) { StaticJsonDocument<1536> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_dhw_temp"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_dhw_temp"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw_temp"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw_temp"); doc[FPSTR(HA_ENTITY_CATEGORY)] = F("diagnostic"); doc[FPSTR(HA_DEVICE_CLASS)] = F("temperature"); doc[FPSTR(HA_STATE_CLASS)] = F("measurement"); doc[FPSTR(HA_UNIT_OF_MEASUREMENT)] = F("°C"); doc[FPSTR(HA_NAME)] = F("DHW temperature"); doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); - doc[FPSTR(HA_STATE_TOPIC)] = _prefix + F("/state"); + doc[FPSTR(HA_STATE_TOPIC)] = devicePrefix + F("/state"); doc[FPSTR(HA_VALUE_TEMPLATE)] = F("{{ value_json.temperatures.dhw|float(0)|round(2) }}"); return publish(getTopic("sensor", "dhw_temp").c_str(), doc); @@ -1021,38 +1021,38 @@ public: bool publishClimateHeating(byte minTemp = 20, byte maxTemp = 90, bool enabledByDefault = true) { StaticJsonDocument<2560> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_heating"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_heating"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_heating"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_heating"); doc[FPSTR(HA_NAME)] = F("Heating"); doc[FPSTR(HA_ICON)] = F("mdi:radiator"); - doc[F("current_temperature_topic")] = _prefix + F("/state"); + 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) }}" "{% else %}{{ value_json.temperatures.heating|float(0)|round(2) }}{% endif %}"); - doc[F("temperature_command_topic")] = _prefix + F("/settings/set"); + doc[F("temperature_command_topic")] = devicePrefix + F("/settings/set"); doc[F("temperature_command_template")] = F("{\"heating\": {\"target\" : {{ value }}}}"); - doc[F("temperature_state_topic")] = _prefix + F("/settings"); + doc[F("temperature_state_topic")] = devicePrefix + F("/settings"); doc[F("temperature_state_template")] = F("{{ value_json.heating.target|float(0)|round(1) }}"); - doc[F("mode_command_topic")] = _prefix + F("/settings/set"); + doc[F("mode_command_topic")] = devicePrefix + F("/settings/set"); doc[F("mode_command_template")] = F("{% if value == 'heat' %}{\"heating\": {\"enable\" : true}}" "{% elif value == 'off' %}{\"heating\": {\"enable\" : false}}{% endif %}"); - doc[F("mode_state_topic")] = _prefix + F("/settings"); + 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[F("action_topic")] = _prefix + F("/state"); + doc[F("action_topic")] = devicePrefix + 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_topic")] = devicePrefix + 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_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"); @@ -1065,32 +1065,32 @@ public: bool publishClimateDHW(byte minTemp = 40, byte maxTemp = 60, bool enabledByDefault = true) { StaticJsonDocument<2560> doc; - doc[FPSTR(HA_AVAILABILITY)][F("topic")] = _prefix + F("/status"); + doc[FPSTR(HA_AVAILABILITY)][F("topic")] = devicePrefix + F("/status"); doc[FPSTR(HA_ENABLED_BY_DEFAULT)] = enabledByDefault; - doc[FPSTR(HA_UNIQUE_ID)] = _prefix + F("_dhw"); - doc[FPSTR(HA_OBJECT_ID)] = _prefix + F("_dhw"); + doc[FPSTR(HA_UNIQUE_ID)] = devicePrefix + F("_dhw"); + doc[FPSTR(HA_OBJECT_ID)] = devicePrefix + F("_dhw"); doc[FPSTR(HA_NAME)] = F("DHW"); doc[FPSTR(HA_ICON)] = F("mdi:water-pump"); - doc[F("current_temperature_topic")] = _prefix + F("/state"); + doc[F("current_temperature_topic")] = devicePrefix + F("/state"); doc[F("current_temperature_template")] = F("{{ value_json.temperatures.dhw|float(0)|round(1) }}"); - doc[F("temperature_command_topic")] = _prefix + F("/settings/set"); + doc[F("temperature_command_topic")] = devicePrefix + F("/settings/set"); doc[F("temperature_command_template")] = F("{\"dhw\": {\"target\" : {{ value|int(0) }}}}"); - doc[F("temperature_state_topic")] = _prefix + F("/settings"); + doc[F("temperature_state_topic")] = devicePrefix + F("/settings"); doc[F("temperature_state_template")] = F("{{ value_json.dhw.target|int(0) }}"); - doc[F("mode_command_topic")] = _prefix + F("/settings/set"); + doc[F("mode_command_topic")] = devicePrefix + F("/settings/set"); doc[F("mode_command_template")] = F("{% if value == 'heat' %}{\"dhw\": {\"enable\" : true}}" "{% elif value == 'off' %}{\"dhw\": {\"enable\" : false}}{% endif %}"); - doc[F("mode_state_topic")] = _prefix + F("/settings"); + 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[F("action_topic")] = _prefix + F("/state"); + doc[F("action_topic")] = devicePrefix + F("/state"); doc[F("action_template")] = F("{{ iif(value_json.states.dhw, 'heating', 'idle') }}"); doc[F("min_temp")] = minTemp;