|
ESPHome 2026.11.0-dev
|
Base class for entities that track a typed state value with change-detection and callbacks. More...
#include <entity_base.h>
Public Member Functions | |
| virtual const T & | get_state () const =0 |
| Return the current state value. Only valid when has_state() is true. | |
| T | get_state_default (T default_value) const |
| Return the current state if available, otherwise return the provided default. | |
| void | invalidate_state () |
| Clear the state — sets has_state() to false and fires callbacks with nullopt. | |
| template<typename F > | |
| void | add_full_state_callback (F &&callback) |
| template<typename F > | |
| void | add_on_state_callback (F &&callback) |
Public Member Functions inherited from esphome::EntityBase | |
| ESPDEPRECATED ("Use get_name_to() or get_log_name() instead. Will be removed in ESPHome 2027.5.0", "2026.11.0") const StringRef &get_name() const | |
| The name is in flash here; the first call makes a RAM copy that is kept for the life of the device. | |
| StringRef | get_name_to (std::span< char, ENTITY_NAME_BUF_SIZE > buffer) const |
| Get the name of this Entity, copied out of flash into buffer. | |
| ESPDEPRECATED ("Use get_name_to() or get_log_name() instead. Will be removed in ESPHome 2027.5.0", "2026.11.0") const StringRef &get_name() const | |
| const StringRef & | get_name_to (std::span< char, ENTITY_NAME_BUF_SIZE >) const |
| bool | name_equals (const StringRef &other) const |
| const ProgmemStringRef & | get_name_progmem () const |
| The name as stored, for consumers that read flash themselves (e.g. API progmem fields). | |
| size_t | write_name_to (char *buf, size_t buf_size) const |
| Copy the name into buf (null terminated), returns its length. | |
| const LogString * | get_log_name () const |
| Get the name for a "%s" log argument (LOG_STR_ARG). | |
| bool | has_own_name () const |
| uint32_t | get_object_id_hash () const |
| StringRef | get_object_id_to (std::span< char, OBJECT_ID_MAX_LEN > buf) const |
| Get object_id with zero heap allocation For static case: returns StringRef to internal storage (buffer unused) For dynamic case: formats into buffer and returns StringRef to buffer. | |
| size_t | write_object_id_to (char *buf, size_t buf_size) const |
| Write object_id directly to buffer, returns length written (excluding null) Useful for building compound strings without intermediate buffer. | |
| bool | is_internal () const |
| void | set_internal (bool internal) |
| bool | is_disabled_by_default () const |
| EntityCategory | get_entity_category () const |
| const char * | get_device_class_to (std::span< char, MAX_DEVICE_CLASS_LENGTH > buffer) const |
| ProgmemStringRef | get_device_class_progmem () const |
| The device class as stored (in flash on ESP8266), for consumers that read flash themselves. | |
| StringRef | get_unit_of_measurement_ref () const |
| const char * | get_icon_to (std::span< char, MAX_ICON_LENGTH > buffer) const |
| ProgmemStringRef | get_icon_progmem () const |
| The icon as stored (in flash on ESP8266), for consumers that read flash themselves. | |
| uint32_t | get_device_id () const |
| Device * | get_device () const |
| bool | has_state () const |
| void | set_has_state (bool state) |
| ESPDEPRECATED ("Use make_entity_preference<T>() instead, or preferences won't be migrated. " "See https://github.com/esphome/backlog/issues/85. Will be removed in 2027.1.0.", "2026.7.0") uint32_t get_preference_hash() | |
| Get a unique hash for storing preferences/settings for this entity. | |
| template<typename T > | |
| ESPPreferenceObject | make_entity_preference (uint32_t version=0) |
| Create a preference object for storing this entity's state/settings. | |
| template<typename T > | |
| ESPPreferenceObject | make_entity_preference (uint32_t version, bool in_flash) |
| As make_entity_preference(), stored in flash or RTC memory where the backend supports the choice. | |
Protected Member Functions | |
| virtual bool | get_trigger_on_initial_state () const =0 |
| Subclasses return whether callbacks should fire on the very first state. | |
| virtual bool | set_new_state (const optional< T > &new_state) |
| Apply a new state, de-duplicating and firing callbacks as needed. | |
| virtual void | set_state_value (const T &value)=0 |
| Subclasses implement this to store the actual value into their own storage. | |
Protected Member Functions inherited from esphome::EntityBase | |
| friend | void::setup () |
| friend | void::original_setup () |
| void | configure_entity_ (const char *name, uint32_t object_id_hash, uint32_t entity_fields) |
| Combined entity setup from codegen: set name, object_id hash, entity string indices, and flags. | |
| void | set_device_ (Device *device) |
| ESPPreferenceObject | make_entity_preference_ (size_t size, uint32_t version) |
| Non-template helpers for make_entity_preference() to avoid code bloat. | |
| ESPPreferenceObject | make_entity_preference_ (size_t size, uint32_t version, bool in_flash) |
| uint32_t | entity_preference_key_ (uint32_t version) |
| Key for both helpers; preference hash migration goes here. | |
Protected Attributes | |
| LazyCallbackManager< void(optional< T > previous, optional< T > current)> | full_state_callbacks_ |
| LazyCallbackManager< void(T)> | state_callbacks_ |
Protected Attributes inherited from esphome::EntityBase | |
| ProgmemStringRef | name_ |
| uint32_t | object_id_hash_ {} |
| Device * | device_ {} |
| struct esphome::EntityBase::EntityFlags | flags_ |
| uint8_t | device_class_idx_ {} |
| uint8_t | uom_idx_ {} |
| uint8_t | icon_idx_ {} |
Base class for entities that track a typed state value with change-detection and callbacks.
This class does not store the state value — subclasses own their storage. Whether a state has been set is tracked by EntityBase::has_state().
Subclasses must implement:
Subclasses may override set_new_state() to add behavior (logging, notifications) after calling the base implementation. Since set_new_state() is virtual, callers like invalidate_state() dispatch through the vtable to the subclass override in the .cpp, avoiding template code bloat at inline call sites. Subclasses may also add a fast-path dedup check before calling set_new_state() to skip virtual dispatch entirely when the state hasn't changed.
Callback behavior:
| T | The type of the state value |
Definition at line 322 of file entity_base.h.
|
inline |
Definition at line 331 of file entity_base.h.
|
inline |
Definition at line 334 of file entity_base.h.
|
pure virtual |
Return the current state value. Only valid when has_state() is true.
Implemented in esphome::binary_sensor::BinarySensor.
|
inline |
Return the current state if available, otherwise return the provided default.
Definition at line 327 of file entity_base.h.
|
protectedpure virtual |
Subclasses return whether callbacks should fire on the very first state.
Implemented in esphome::binary_sensor::BinarySensor.
|
inline |
Clear the state — sets has_state() to false and fires callbacks with nullopt.
Definition at line 329 of file entity_base.h.
|
inlineprotectedvirtual |
Apply a new state, de-duplicating and firing callbacks as needed.
Pass nullopt to invalidate (clear) the state. Pass a value to set it. Returns true if the state actually changed, false if it was the same. Subclasses may override to add logging/notifications after calling the base.
Reimplemented in esphome::binary_sensor::BinarySensor.
Definition at line 348 of file entity_base.h.
|
protectedpure virtual |
Subclasses implement this to store the actual value into their own storage.
Implemented in esphome::binary_sensor::BinarySensor.
|
protected |
Definition at line 378 of file entity_base.h.
|
protected |
Definition at line 379 of file entity_base.h.