From 1e58c400ea1d22df35d88ea3f8d3f39233a8bae8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 5 Nov 2025 23:47:28 -0600 Subject: [PATCH] Revert "free" This reverts commit fbc3413ed9cabb9325e0b401e4e8ac6a5d935f55. --- .../binary_sensor/binary_sensor.cpp | 2 +- esphome/components/button/button.cpp | 2 +- esphome/components/cover/cover.h | 2 +- esphome/components/datetime/date_entity.h | 2 +- esphome/components/datetime/datetime_entity.h | 2 +- esphome/components/datetime/time_entity.h | 2 +- esphome/components/event/event.h | 4 +-- esphome/components/lock/lock.h | 2 +- esphome/components/number/number.cpp | 4 +-- esphome/components/select/select.h | 2 +- esphome/components/sensor/sensor.cpp | 4 +-- esphome/components/switch/switch.cpp | 4 +-- esphome/components/text/text.h | 2 +- .../components/text_sensor/text_sensor.cpp | 4 +-- esphome/components/valve/valve.h | 2 +- esphome/core/entity_base.cpp | 29 +++++++++---------- esphome/core/entity_base.h | 14 ++++----- 17 files changed, 40 insertions(+), 43 deletions(-) diff --git a/esphome/components/binary_sensor/binary_sensor.cpp b/esphome/components/binary_sensor/binary_sensor.cpp index 4659984418..2fc8d9d01f 100644 --- a/esphome/components/binary_sensor/binary_sensor.cpp +++ b/esphome/components/binary_sensor/binary_sensor.cpp @@ -11,7 +11,7 @@ static const char *const TAG = "binary_sensor"; void log_binary_sensor(const char *tag, const char *prefix, const char *type, BinarySensor *obj) { if (obj != nullptr) { ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); - log_entity_device_class(tag, prefix, obj); + obj->log_device_class(tag, prefix); } } diff --git a/esphome/components/button/button.cpp b/esphome/components/button/button.cpp index 4d8a0749e4..3a2624a6bf 100644 --- a/esphome/components/button/button.cpp +++ b/esphome/components/button/button.cpp @@ -10,7 +10,7 @@ static const char *const TAG = "button"; void log_button(const char *tag, const char *prefix, const char *type, Button *obj) { if (obj != nullptr) { ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); - log_entity_icon(tag, prefix, obj); + obj->log_icon(tag, prefix); } } diff --git a/esphome/components/cover/cover.h b/esphome/components/cover/cover.h index f412734789..3308255f9a 100644 --- a/esphome/components/cover/cover.h +++ b/esphome/components/cover/cover.h @@ -20,7 +20,7 @@ const extern float COVER_CLOSED; if (traits_.get_is_assumed_state()) { \ ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \ } \ - log_entity_device_class(TAG, prefix, (obj)); \ + (obj)->log_device_class(TAG, prefix); \ } class Cover; diff --git a/esphome/components/datetime/date_entity.h b/esphome/components/datetime/date_entity.h index 6459ec6950..ba2a64062d 100644 --- a/esphome/components/datetime/date_entity.h +++ b/esphome/components/datetime/date_entity.h @@ -16,7 +16,7 @@ namespace datetime { #define LOG_DATETIME_DATE(prefix, type, obj) \ if ((obj) != nullptr) { \ ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ - log_entity_icon(TAG, prefix, (obj)); \ + (obj)->log_icon(TAG, prefix); \ } class DateCall; diff --git a/esphome/components/datetime/datetime_entity.h b/esphome/components/datetime/datetime_entity.h index 27d9807efe..9955686d8d 100644 --- a/esphome/components/datetime/datetime_entity.h +++ b/esphome/components/datetime/datetime_entity.h @@ -16,7 +16,7 @@ namespace datetime { #define LOG_DATETIME_DATETIME(prefix, type, obj) \ if ((obj) != nullptr) { \ ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ - log_entity_icon(TAG, prefix, (obj)); \ + (obj)->log_icon(TAG, prefix); \ } class DateTimeCall; diff --git a/esphome/components/datetime/time_entity.h b/esphome/components/datetime/time_entity.h index 887fd87df2..30f73f3be2 100644 --- a/esphome/components/datetime/time_entity.h +++ b/esphome/components/datetime/time_entity.h @@ -16,7 +16,7 @@ namespace datetime { #define LOG_DATETIME_TIME(prefix, type, obj) \ if ((obj) != nullptr) { \ ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ - log_entity_icon(TAG, prefix, (obj)); \ + (obj)->log_icon(TAG, prefix); \ } class TimeCall; diff --git a/esphome/components/event/event.h b/esphome/components/event/event.h index bab46dd7c3..f2a619eb38 100644 --- a/esphome/components/event/event.h +++ b/esphome/components/event/event.h @@ -12,8 +12,8 @@ namespace event { #define LOG_EVENT(prefix, type, obj) \ if ((obj) != nullptr) { \ ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ - log_entity_icon(TAG, prefix, (obj)); \ - log_entity_device_class(TAG, prefix, (obj)); \ + (obj)->log_icon(TAG, prefix); \ + (obj)->log_device_class(TAG, prefix); \ } class Event : public EntityBase, public EntityBase_DeviceClass { diff --git a/esphome/components/lock/lock.h b/esphome/components/lock/lock.h index c3e7ae9f6c..842c4e732b 100644 --- a/esphome/components/lock/lock.h +++ b/esphome/components/lock/lock.h @@ -15,7 +15,7 @@ class Lock; #define LOG_LOCK(prefix, type, obj) \ if ((obj) != nullptr) { \ ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ - log_entity_icon(TAG, prefix, (obj)); \ + (obj)->log_icon(TAG, prefix); \ if ((obj)->traits.get_assumed_state()) { \ ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \ } \ diff --git a/esphome/components/number/number.cpp b/esphome/components/number/number.cpp index 38a83cab8e..85e0d41b9c 100644 --- a/esphome/components/number/number.cpp +++ b/esphome/components/number/number.cpp @@ -10,13 +10,13 @@ static const char *const TAG = "number"; void log_number(const char *tag, const char *prefix, const char *type, Number *obj) { if (obj != nullptr) { ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); - log_entity_icon(tag, prefix, obj); + obj->log_icon(tag, prefix); if (!obj->traits.get_unit_of_measurement_ref().empty()) { ESP_LOGCONFIG(tag, "%s Unit of Measurement: '%s'", prefix, obj->traits.get_unit_of_measurement_ref().c_str()); } - log_entity_device_class(tag, prefix, &obj->traits); + obj->traits.log_device_class(tag, prefix); } } diff --git a/esphome/components/select/select.h b/esphome/components/select/select.h index 190f96c9d1..f1e0db6c29 100644 --- a/esphome/components/select/select.h +++ b/esphome/components/select/select.h @@ -12,7 +12,7 @@ namespace select { #define LOG_SELECT(prefix, type, obj) \ if ((obj) != nullptr) { \ ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ - log_entity_icon(TAG, prefix, (obj)); \ + (obj)->log_icon(TAG, prefix); \ } #define SUB_SELECT(name) \ diff --git a/esphome/components/sensor/sensor.cpp b/esphome/components/sensor/sensor.cpp index aaedb9ac0a..a472f9bec6 100644 --- a/esphome/components/sensor/sensor.cpp +++ b/esphome/components/sensor/sensor.cpp @@ -18,8 +18,8 @@ void log_sensor(const char *tag, const char *prefix, const char *type, Sensor *o LOG_STR_ARG(state_class_to_string(obj->get_state_class())), prefix, obj->get_unit_of_measurement_ref().c_str(), prefix, obj->get_accuracy_decimals()); - log_entity_device_class(tag, prefix, obj); - log_entity_icon(tag, prefix, obj); + obj->log_device_class(tag, prefix); + obj->log_icon(tag, prefix); if (obj->get_force_update()) { ESP_LOGV(tag, "%s Force Update: YES", prefix); diff --git a/esphome/components/switch/switch.cpp b/esphome/components/switch/switch.cpp index e6d4076671..659d15d883 100644 --- a/esphome/components/switch/switch.cpp +++ b/esphome/components/switch/switch.cpp @@ -91,14 +91,14 @@ void log_switch(const char *tag, const char *prefix, const char *type, Switch *o LOG_STR_ARG(onoff)); // Add optional fields separately - log_entity_icon(tag, prefix, obj); + obj->log_icon(tag, prefix); if (obj->assumed_state()) { ESP_LOGCONFIG(tag, "%s Assumed State: YES", prefix); } if (obj->is_inverted()) { ESP_LOGCONFIG(tag, "%s Inverted: YES", prefix); } - log_entity_device_class(tag, prefix, obj); + obj->log_device_class(tag, prefix); } } diff --git a/esphome/components/text/text.h b/esphome/components/text/text.h index 45c938c379..18d5ba3f50 100644 --- a/esphome/components/text/text.h +++ b/esphome/components/text/text.h @@ -12,7 +12,7 @@ namespace text { #define LOG_TEXT(prefix, type, obj) \ if ((obj) != nullptr) { \ ESP_LOGCONFIG(TAG, "%s%s '%s'", prefix, LOG_STR_LITERAL(type), (obj)->get_name().c_str()); \ - log_entity_icon(TAG, prefix, (obj)); \ + (obj)->log_icon(TAG, prefix); \ } /** Base-class for all text inputs. diff --git a/esphome/components/text_sensor/text_sensor.cpp b/esphome/components/text_sensor/text_sensor.cpp index e19ab4ae10..e5eea3c7af 100644 --- a/esphome/components/text_sensor/text_sensor.cpp +++ b/esphome/components/text_sensor/text_sensor.cpp @@ -9,8 +9,8 @@ static const char *const TAG = "text_sensor"; void log_text_sensor(const char *tag, const char *prefix, const char *type, TextSensor *obj) { if (obj != nullptr) { ESP_LOGCONFIG(tag, "%s%s '%s'", prefix, type, obj->get_name().c_str()); - log_entity_device_class(tag, prefix, obj); - log_entity_icon(tag, prefix, obj); + obj->log_device_class(tag, prefix); + obj->log_icon(tag, prefix); } } diff --git a/esphome/components/valve/valve.h b/esphome/components/valve/valve.h index 48900bab21..cd41c6d34a 100644 --- a/esphome/components/valve/valve.h +++ b/esphome/components/valve/valve.h @@ -19,7 +19,7 @@ const extern float VALVE_CLOSED; if (traits_.get_is_assumed_state()) { \ ESP_LOGCONFIG(TAG, "%s Assumed State: YES", prefix); \ } \ - log_entity_device_class(TAG, prefix, (obj)); \ + (obj)->log_device_class(TAG, prefix); \ } class Valve; diff --git a/esphome/core/entity_base.cpp b/esphome/core/entity_base.cpp index a4da2fce0c..404297cbfd 100644 --- a/esphome/core/entity_base.cpp +++ b/esphome/core/entity_base.cpp @@ -45,6 +45,14 @@ void EntityBase::set_icon(const char *icon) { #endif } +void EntityBase::log_icon(const char *tag, const char *prefix) const { +#ifdef USE_ENTITY_ICON + if (!this->get_icon_ref().empty()) { + ESP_LOGCONFIG(tag, "%s Icon: '%s'", prefix, this->get_icon_ref().c_str()); + } +#endif +} + // Check if the object_id is dynamic (changes with MAC suffix) bool EntityBase::is_object_id_dynamic_() const { return !this->flags_.has_own_name && App.is_name_add_mac_suffix_enabled(); @@ -91,6 +99,12 @@ std::string EntityBase_DeviceClass::get_device_class() { void EntityBase_DeviceClass::set_device_class(const char *device_class) { this->device_class_ = device_class; } +void EntityBase_DeviceClass::log_device_class(const char *tag, const char *prefix) const { + if (!this->get_device_class_ref().empty()) { + ESP_LOGCONFIG(tag, "%s Device Class: '%s'", prefix, this->get_device_class_ref().c_str()); + } +} + std::string EntityBase_UnitOfMeasurement::get_unit_of_measurement() { if (this->unit_of_measurement_ == nullptr) return ""; @@ -100,19 +114,4 @@ void EntityBase_UnitOfMeasurement::set_unit_of_measurement(const char *unit_of_m this->unit_of_measurement_ = unit_of_measurement; } -// Helper functions for logging entity attributes -void log_entity_icon(const char *tag, const char *prefix, const EntityBase *obj) { -#ifdef USE_ENTITY_ICON - if (!obj->get_icon_ref().empty()) { - ESP_LOGCONFIG(tag, "%s Icon: '%s'", prefix, obj->get_icon_ref().c_str()); - } -#endif -} - -void log_entity_device_class(const char *tag, const char *prefix, const EntityBase_DeviceClass *obj) { - if (!obj->get_device_class_ref().empty()) { - ESP_LOGCONFIG(tag, "%s Device Class: '%s'", prefix, obj->get_device_class_ref().c_str()); - } -} - } // namespace esphome diff --git a/esphome/core/entity_base.h b/esphome/core/entity_base.h index d026f9b01b..94436c0d47 100644 --- a/esphome/core/entity_base.h +++ b/esphome/core/entity_base.h @@ -74,6 +74,9 @@ class EntityBase { #endif } + /// Log entity icon if present (guarded by USE_ENTITY_ICON) + void log_icon(const char *tag, const char *prefix) const; + #ifdef USE_DEVICES // Get/set this entity's device id uint32_t get_device_id() const { @@ -171,6 +174,9 @@ class EntityBase_DeviceClass { // NOLINT(readability-identifier-naming) return this->device_class_ == nullptr ? EMPTY_STRING : StringRef(this->device_class_); } + /// Log entity device class if present + void log_device_class(const char *tag, const char *prefix) const; + protected: const char *device_class_{nullptr}; ///< Device class override }; @@ -248,12 +254,4 @@ template class StatefulEntityBase : public EntityBase { CallbackManager *state_callbacks_{}; }; -// Helper functions for logging entity attributes - -/// Log entity icon if present (guarded by USE_ENTITY_ICON) -void log_entity_icon(const char *tag, const char *prefix, const EntityBase *obj); - -/// Log entity device class if present -void log_entity_device_class(const char *tag, const char *prefix, const EntityBase_DeviceClass *obj); - } // namespace esphome