diff --git a/src/main.cpp b/src/main.cpp index b228079..4aa3118 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -347,37 +347,48 @@ void publishBattery(const String& shadeName, const uint8_t battery) { client.publish("hotdog/" + shadeName + "/battery", String(battery), true); } -void publishDiscoveryTopics() { - char buffer[1024]; +char jsonBuffer[1024]; +void addDeviceObject(JsonDocument &doc, const Shade& shade) { + String deviceID = "hotdog-" + String(shade.ID, HEX); + + JsonObject device = doc["device"].to(); + device["name"] = shade.friendlyName; + JsonArray identifiers = device["identifiers"].to(); + 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++) { Shade shade = shades[i]; String objectID = String(shade.ID, HEX); - String entityID = "cover-" + objectID; - String deviceId = "hotdog-" + 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; - - JsonObject device = doc["device"].to(); - device["name"] = shade.friendlyName; - JsonArray identifiers = device["identifiers"].to(); - 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); + publishCoverDiscoveryTopic(shade); } } \ No newline at end of file