Split discovery topic logic into smaller functions

This commit is contained in:
2024-02-13 11:48:59 +11:00
parent 42713c1bb1
commit 01f2e267a9

View File

@@ -347,37 +347,48 @@ void publishBattery(const String& shadeName, const uint8_t battery) {
client.publish("hotdog/" + shadeName + "/battery", String(battery), true); client.publish("hotdog/" + shadeName + "/battery", String(battery), true);
} }
void publishDiscoveryTopics() { char jsonBuffer[1024];
char buffer[1024];
void addDeviceObject(JsonDocument &doc, const Shade& shade) {
String deviceID = "hotdog-" + String(shade.ID, HEX);
JsonObject device = doc["device"].to<JsonObject>();
device["name"] = shade.friendlyName;
JsonArray identifiers = device["identifiers"].to<JsonArray>();
identifiers.add(deviceID);
device["manufacturer"] = "Hunter Douglas";
// TODO: Add fields like sw_version and model
}
void publishCoverDiscoveryTopic(const Shade& shade) {
String objectID = String(shade.ID, HEX);
String entityID = "cover-" + objectID;
JsonDocument doc;
doc["name"] = nullptr;
doc["unique_id"] = entityID;
doc["availability_topic"] = "hotdog/availability";
doc["state_topic"] = "hotdog/" + shade.name + "/state";
doc["command_topic"] = "hotdog/" + shade.name + "/set";
doc["position_topic"] = "hotdog/" + shade.name + "/position";
doc["set_position_topic"] = "hotdog/" + shade.name + "/set_position";
doc["position_open"] = 100;
doc["position_closed"] = 0;
doc["optimistic"] = false;
addDeviceObject(doc, shade);
serializeJson(doc, jsonBuffer);
client.publish("homeassistant/cover/" + objectID + "/config", jsonBuffer);
}
void publishDiscoveryTopics() {
for (size_t i = 0; i < shades.size(); i++) { for (size_t i = 0; i < shades.size(); i++) {
Shade shade = shades[i]; Shade shade = shades[i];
String objectID = String(shade.ID, HEX); String objectID = String(shade.ID, HEX);
String entityID = "cover-" + objectID;
String deviceId = "hotdog-" + objectID;
JsonDocument doc; publishCoverDiscoveryTopic(shade);
doc["name"] = nullptr;
doc["unique_id"] = entityID;
doc["availability_topic"] = "hotdog/availability";
doc["state_topic"] = "hotdog/" + shade.name + "/state";
doc["command_topic"] = "hotdog/" + shade.name + "/set";
doc["position_topic"] = "hotdog/" + shade.name + "/position";
doc["set_position_topic"] = "hotdog/" + shade.name + "/set_position";
doc["position_open"] = 100;
doc["position_closed"] = 0;
doc["optimistic"] = false;
JsonObject device = doc["device"].to<JsonObject>();
device["name"] = shade.friendlyName;
JsonArray identifiers = device["identifiers"].to<JsonArray>();
identifiers.add(deviceId);
device["manufacturer"] = "Hunter Douglas";
// TODO: Add fields like sw_version and model
serializeJson(doc, buffer);
client.publish("homeassistant/cover/" + objectID + "/config", buffer);
} }
} }