diff --git a/code/components/jomjol_mqtt/server_mqtt.cpp b/code/components/jomjol_mqtt/server_mqtt.cpp index 0b91ff956..bace88e4a 100644 --- a/code/components/jomjol_mqtt/server_mqtt.cpp +++ b/code/components/jomjol_mqtt/server_mqtt.cpp @@ -72,36 +72,40 @@ 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; - } + } - /** - * homeassistant needs the MQTT discovery topic according to the following structure: - * //[/]/config - * if the main topic is embedded in a nested structure, we just use the last part as node_id - * 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"; + component = "binary_sensor"; } else if (field == "flowstart") { // Special case: Button - topicFull = "homeassistant/button/" + node_id + "/" + configTopic + "/config"; + component = "button"; } else { - topicFull = "homeassistant/sensor/" + node_id + "/" + configTopic + "/config"; + component = "sensor"; } + /** + * homeassistant needs the MQTT discovery topic according to the following structure: + * //[/]/config + * if the main topic is embedded in a nested structure, we just use the last part as node_id + * This means a maintopic "home/test/watermeter" is transformed to the discovery topic "homeassistant/sensor/watermeter/..." + */ + std::string node_id = createNodeId(maintopic); + 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 + "\",";