Split discovery topic logic into smaller functions
This commit is contained in:
65
src/main.cpp
65
src/main.cpp
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user