|
|
@@ -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:
|
|
|
- * <discovery_prefix>/<component>/[<node_id>/]<object_id>/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:
|
|
|
+ * <discovery_prefix>/<component>/[<node_id>/]<object_id>/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 + "\",";
|
|
|
|