simplify: move building of configTopic and uniqueId inside component

This commit is contained in:
Nicu Hodos 2024-10-28 12:37:15 +01:00
parent 0eec971560
commit 9930171d58

View File

@ -77,7 +77,6 @@ namespace Ha {
const char* name = nullptr;
const char* entityCategory = nullptr;
const char* deviceClass = nullptr;
char configTopic[TOPIC_SIZE];
DeviceConfig* mainDevice = nullptr;
static List<Component> components;
bool multiValueComponent = false;
@ -101,24 +100,35 @@ namespace Ha {
}
protected:
char uniqueId[50];
virtual void buildUniqueId() {
snprintf(uniqueId, sizeof(uniqueId), "%s_%s", MAIN_DEVICE_ID, id);
}
virtual void buildConfigTopic() {
snprintf(configTopic, sizeof(configTopic), BASE_TOPIC"/config", type, MAIN_DEVICE_ID, id);
}
void buildConfig(JsonDocument& jsonDoc) override {
if (mainDevice) mainDevice->buildConfig(jsonDoc);
if (entityCategory) jsonDoc["entity_category"] = entityCategory;
if (deviceClass) jsonDoc["device_class"] = deviceClass;
jsonDoc["name"] = name;
buildUniqueId();
jsonDoc["unique_id"] = (const char*)uniqueId;
buildUniqueId(jsonDoc);
buildConfigTopic();
}
private:
char configTopic[TOPIC_SIZE];
void buildUniqueId(JsonDocument& jsonDoc) {
char uniqueId[50];
if (multiValueComponent && deviceClass) {
snprintf(uniqueId, sizeof(uniqueId), "%s_%s_%s", MAIN_DEVICE_ID, deviceClass, id);
} else {
snprintf(uniqueId, sizeof(uniqueId), "%s_%s", MAIN_DEVICE_ID, id);
}
jsonDoc["unique_id"] = uniqueId;
}
void buildConfigTopic() {
if (multiValueComponent && deviceClass) {
snprintf(configTopic, sizeof(configTopic), BASE_TOPIC"_%s""/config", type, MAIN_DEVICE_ID, deviceClass, id);
} else {
snprintf(configTopic, sizeof(configTopic), BASE_TOPIC"/config", type, MAIN_DEVICE_ID, id);
}
}
};
struct AbstractBuilder {
@ -368,23 +378,6 @@ namespace Ha {
if (isNumericSensor()) jsonDoc["suggested_display_precision"] = precision;
}
protected:
void buildUniqueId() override {
if (multiValueComponent && deviceClass) {
snprintf(uniqueId, sizeof(uniqueId), "%s_%s_%s", MAIN_DEVICE_ID, deviceClass, id);
} else {
Component::buildUniqueId();
}
}
void buildConfigTopic() override {
if (multiValueComponent && deviceClass) {
snprintf(configTopic, sizeof(configTopic), BASE_TOPIC"_%s""/config", type, MAIN_DEVICE_ID, deviceClass, id);
} else {
Component::buildConfigTopic();
}
}
private:
bool isNumericSensor() {
return deviceClass || unitMeasure;