From de4ae718647afbc722a502ec51d6b409f43ad39e Mon Sep 17 00:00:00 2001 From: Rick Auch <48502913+mekaneck@users.noreply.github.com> Date: Mon, 29 Dec 2025 14:49:41 -0600 Subject: [PATCH] Add `default_entity_id` to MQTT HA autodiscovery payload (#3970) * HA MQTT autodiscovery topic update Add `default_entity_id` to the HA autodiscovery payload to address a deprecation (warning starting with HA 2025.11 and causing an error starting with HA 2026.4). If desired, the `object_id` (line 107) can be removed after April 2026. * Fix whitespace * Whitespace again * Whitespace final --- code/components/jomjol_mqtt/server_mqtt.cpp | 28 ++++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/code/components/jomjol_mqtt/server_mqtt.cpp b/code/components/jomjol_mqtt/server_mqtt.cpp index 0b91ff95..bace88e4 100644 --- a/code/components/jomjol_mqtt/server_mqtt.cpp +++ b/code/components/jomjol_mqtt/server_mqtt.cpp @@ -72,13 +72,24 @@ bool sendHomeAssistantDiscoveryTopic(std::string group, std::string field, std::string topicFull; std::string configTopic; std::string payload; + std::string component; configTopic = field; if (group != "" && (*NUMBERS).size() > 1) { // There is more than one meter, prepend the group so we can differentiate them configTopic = group + "_" + field; name = group + " " + name; - } + } + + if (field == "problem") { // Special case: Binary sensor which is based on error topic + component = "binary_sensor"; + } + else if (field == "flowstart") { // Special case: Button + component = "button"; + } + else { + component = "sensor"; + } /** * homeassistant needs the MQTT discovery topic according to the following structure: @@ -87,21 +98,14 @@ bool sendHomeAssistantDiscoveryTopic(std::string group, std::string field, * This means a maintopic "home/test/watermeter" is transformed to the discovery topic "homeassistant/sensor/watermeter/..." */ std::string node_id = createNodeId(maintopic); - if (field == "problem") { // Special case: Binary sensor which is based on error topic - topicFull = "homeassistant/binary_sensor/" + node_id + "/" + configTopic + "/config"; - } - else if (field == "flowstart") { // Special case: Button - topicFull = "homeassistant/button/" + node_id + "/" + configTopic + "/config"; - } - else { - topicFull = "homeassistant/sensor/" + node_id + "/" + configTopic + "/config"; - } - + topicFull = "homeassistant/" + component + "/" + node_id + "/" + configTopic + "/config"; + /* See https://www.home-assistant.io/docs/mqtt/discovery/ */ payload = string("{") + "\"~\": \"" + maintopic + "\"," + "\"unique_id\": \"" + maintopic + "-" + configTopic + "\"," + - "\"object_id\": \"" + maintopic + "_" + configTopic + "\"," + // This used to generate the Entity ID + "\"object_id\": \"" + maintopic + "_" + configTopic + "\"," + // Default entity ID; required for HA <= 2025.10 + "\"default_entity_id\": \"" + component + "." + maintopic + "_" + configTopic + "\"," + // Default entity ID; required in HA >=2026.4 "\"name\": \"" + name + "\"," + "\"icon\": \"mdi:" + icon + "\",";