From 9930171d58d56ec18d9dc4650fd0e90da2ffdf6c Mon Sep 17 00:00:00 2001 From: Nicu Hodos Date: Mon, 28 Oct 2024 12:37:15 +0100 Subject: [PATCH] simplify: move building of configTopic and uniqueId inside component --- src/ha.h | 51 ++++++++++++++++++++++----------------------------- 1 file changed, 22 insertions(+), 29 deletions(-) diff --git a/src/ha.h b/src/ha.h index ef4c2d7..111ebc1 100644 --- a/src/ha.h +++ b/src/ha.h @@ -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 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;