|
ESPHome 2026.3.0-dev
|
#include <application.h>
Public Member Functions | |
| void | pre_setup (const std::string &name, const std::string &friendly_name, bool name_add_mac_suffix) |
| void | register_device (Device *device) |
| void | register_area (Area *area) |
| void | set_current_component (Component *component) |
| Component * | get_current_component () |
| void | register_binary_sensor (binary_sensor::BinarySensor *binary_sensor) |
| void | register_sensor (sensor::Sensor *sensor) |
| void | register_switch (switch_::Switch *a_switch) |
| void | register_button (button::Button *button) |
| void | register_text_sensor (text_sensor::TextSensor *sensor) |
| void | register_fan (fan::Fan *state) |
| void | register_cover (cover::Cover *cover) |
| void | register_climate (climate::Climate *climate) |
| void | register_light (light::LightState *light) |
| void | register_number (number::Number *number) |
| void | register_date (datetime::DateEntity *date) |
| void | register_time (datetime::TimeEntity *time) |
| void | register_datetime (datetime::DateTimeEntity *datetime) |
| void | register_text (text::Text *text) |
| void | register_select (select::Select *select) |
| void | register_lock (lock::Lock *a_lock) |
| void | register_valve (valve::Valve *valve) |
| void | register_media_player (media_player::MediaPlayer *media_player) |
| void | register_alarm_control_panel (alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) |
| void | register_water_heater (water_heater::WaterHeater *water_heater) |
| void | register_infrared (infrared::Infrared *infrared) |
| void | register_event (event::Event *event) |
| void | register_update (update::UpdateEntity *update) |
| void | setup () |
| Reserve space for components to avoid memory fragmentation. | |
| void | loop () |
| Make a loop iteration. Call this in your loop() function. | |
| const std::string & | get_name () const |
| Get the name of this Application set by pre_setup(). | |
| const std::string & | get_friendly_name () const |
| Get the friendly name of this Application set by pre_setup(). | |
| const char * | get_area () const |
| Get the area of this Application set by pre_setup(). | |
| void | get_comment_string (std::span< char, ESPHOME_COMMENT_SIZE_MAX > buffer) |
| Copy the comment string into the provided buffer. | |
| std::string | get_comment () |
| Get the comment of this Application as a string. | |
| bool | is_name_add_mac_suffix_enabled () const |
| uint32_t | get_config_hash () |
| Get the config hash as a 32-bit integer. | |
| uint32_t | get_config_version_hash () |
| Get the config hash extended with ESPHome version. | |
| time_t | get_build_time () |
| Get the build time as a Unix timestamp. | |
| void | get_build_time_string (std::span< char, BUILD_TIME_STR_SIZE > buffer) |
| Copy the build time string into the provided buffer Buffer must be BUILD_TIME_STR_SIZE bytes (compile-time enforced) | |
| ESPDEPRECATED ("Use get_build_time_string() instead. Removed in 2026.7.0", "2026.1.0") std | |
| Get the build time as a string (deprecated, use get_build_time_string() instead) | |
| uint32_t IRAM_ATTR HOT | get_loop_component_start_time () const |
| Get the cached time in milliseconds from when the current component started its loop execution. | |
| void | set_loop_interval (uint32_t loop_interval) |
| Set the target interval with which to run the loop() calls. | |
| uint32_t | get_loop_interval () const |
| void | schedule_dump_config () |
| void | feed_wdt (uint32_t time=0) |
| void | reboot () |
| void | safe_reboot () |
| void | run_safe_shutdown_hooks () |
| void | run_powerdown_hooks () |
| void | teardown_components (uint32_t timeout_ms) |
| Teardown all components with a timeout. | |
| uint8_t | get_app_state () const |
| const auto & | get_devices () |
| const auto & | get_areas () |
| auto & | get_binary_sensors () const |
| GET_ENTITY_METHOD (binary_sensor::BinarySensor, binary_sensor, binary_sensors) auto &get_switches() const | |
| GET_ENTITY_METHOD (switch_::Switch, switch, switches) auto &get_buttons() const | |
| GET_ENTITY_METHOD (button::Button, button, buttons) auto &get_sensors() const | |
| GET_ENTITY_METHOD (sensor::Sensor, sensor, sensors) auto &get_text_sensors() const | |
| GET_ENTITY_METHOD (text_sensor::TextSensor, text_sensor, text_sensors) auto &get_fans() const | |
| GET_ENTITY_METHOD (fan::Fan, fan, fans) auto &get_covers() const | |
| GET_ENTITY_METHOD (cover::Cover, cover, covers) auto &get_lights() const | |
| GET_ENTITY_METHOD (light::LightState, light, lights) auto &get_climates() const | |
| GET_ENTITY_METHOD (climate::Climate, climate, climates) auto &get_numbers() const | |
| GET_ENTITY_METHOD (number::Number, number, numbers) auto &get_dates() const | |
| GET_ENTITY_METHOD (datetime::DateEntity, date, dates) auto &get_times() const | |
| GET_ENTITY_METHOD (datetime::TimeEntity, time, times) auto &get_datetimes() const | |
| GET_ENTITY_METHOD (datetime::DateTimeEntity, datetime, datetimes) auto &get_texts() const | |
| GET_ENTITY_METHOD (text::Text, text, texts) auto &get_selects() const | |
| GET_ENTITY_METHOD (select::Select, select, selects) auto &get_locks() const | |
| GET_ENTITY_METHOD (lock::Lock, lock, locks) auto &get_valves() const | |
| GET_ENTITY_METHOD (valve::Valve, valve, valves) auto &get_media_players() const | |
| GET_ENTITY_METHOD (media_player::MediaPlayer, media_player, media_players) auto &get_alarm_control_panels() const | |
| GET_ENTITY_METHOD (alarm_control_panel::AlarmControlPanel, alarm_control_panel, alarm_control_panels) auto &get_water_heaters() const | |
| GET_ENTITY_METHOD (water_heater::WaterHeater, water_heater, water_heaters) auto &get_infrareds() const | |
| GET_ENTITY_METHOD (infrared::Infrared, infrared, infrareds) auto &get_events() const | |
| GET_ENTITY_METHOD (event::Event, event, events) auto &get_updates() const | |
| GET_ENTITY_METHOD (update::UpdateEntity, update, updates) Scheduler scheduler | |
| bool | register_socket_fd (int fd) |
| Register/unregister a socket file descriptor to be monitored for read events. | |
| void | unregister_socket_fd (int fd) |
| void | wake_loop_threadsafe () |
| Wake the main event loop from another FreeRTOS task. | |
Static Public Member Functions | |
| static void IRAM_ATTR | wake_loop_isrsafe (int *px_higher_priority_task_woken) |
| Wake the main event loop from an ISR. | |
| static void IRAM_ATTR | wake_loop_any_context () |
| Wake the main event loop from any context (ISR, thread, or main loop). | |
| static void IRAM_ATTR | wake_loop_any_context () |
| Wake the main event loop from any context (ISR, thread, or main loop). | |
Static Public Attributes | |
| static constexpr size_t | ESPHOME_COMMENT_SIZE_MAX = 256 |
| Maximum size of the comment buffer (including null terminator) | |
| static constexpr size_t | BUILD_TIME_STR_SIZE = 26 |
| Size of buffer required for build time string (including null terminator) | |
Protected Member Functions | |
| friend | void::setup () |
| friend | void::original_setup () |
| bool | is_socket_ready_ (int fd) const |
| Fast path for Socket::ready() via friendship - skips negative fd check. | |
| bool | is_socket_ready_ (int fd) const |
| template<typename T > | |
| void | register_component_ (T *comp) |
| Register a component, detecting loop() override at compile time. | |
| void | register_component_impl_ (Component *comp, bool has_loop) |
| void | calculate_looping_components_ () |
| void | add_looping_components_by_state_ (bool match_loop_done) |
| void | disable_component_loop_ (Component *component) |
| void | enable_component_loop_ (Component *component) |
| void | enable_pending_loops_ () |
| void | activate_looping_component_ (uint16_t index) |
| void | before_loop_tasks_ (uint32_t loop_start_time) |
| void | after_loop_tasks_ () |
| void | __attribute__ ((noinline)) process_dump_config_() |
| Process dump_config output one component per loop iteration. | |
| void | feed_wdt_arch_ () |
| void | yield_with_select_ (uint32_t delay_ms) |
| Perform a delay while also monitoring socket file descriptors for readiness. | |
| void | setup_wake_loop_threadsafe_ () |
| void | drain_wake_notifications_ () |
Protected Attributes | |
| friend | Component |
| Component * | current_component_ {nullptr} |
| FixedVector< Component * > | looping_components_ {} |
| std::vector< int > | socket_fds_ |
| int | wake_socket_fd_ {-1} |
| std::string | name_ |
| std::string | friendly_name_ |
| uint32_t | last_loop_ {0} |
| uint32_t | loop_component_start_time_ {0} |
| int | max_fd_ {-1} |
| uint16_t | dump_config_at_ {std::numeric_limits<uint16_t>::max()} |
| uint16_t | loop_interval_ {16} |
| uint16_t | looping_components_active_end_ {0} |
| uint16_t | current_loop_index_ {0} |
| uint8_t | app_state_ {0} |
| bool | name_add_mac_suffix_ |
| bool | in_loop_ {false} |
| volatile bool | has_pending_enable_loop_requests_ {false} |
| bool | socket_fds_changed_ {false} |
| fd_set | read_fds_ {} |
| fd_set | base_read_fds_ {} |
| StaticVector< Component *, ESPHOME_COMPONENT_COUNT > | components_ {} |
| StaticVector< Device *, ESPHOME_DEVICE_COUNT > | devices_ {} |
| StaticVector< Area *, ESPHOME_AREA_COUNT > | areas_ {} |
| StaticVector< binary_sensor::BinarySensor *, ESPHOME_ENTITY_BINARY_SENSOR_COUNT > | binary_sensors_ {} |
| StaticVector< switch_::Switch *, ESPHOME_ENTITY_SWITCH_COUNT > | switches_ {} |
| StaticVector< button::Button *, ESPHOME_ENTITY_BUTTON_COUNT > | buttons_ {} |
| StaticVector< event::Event *, ESPHOME_ENTITY_EVENT_COUNT > | events_ {} |
| StaticVector< sensor::Sensor *, ESPHOME_ENTITY_SENSOR_COUNT > | sensors_ {} |
| StaticVector< text_sensor::TextSensor *, ESPHOME_ENTITY_TEXT_SENSOR_COUNT > | text_sensors_ {} |
| StaticVector< fan::Fan *, ESPHOME_ENTITY_FAN_COUNT > | fans_ {} |
| StaticVector< cover::Cover *, ESPHOME_ENTITY_COVER_COUNT > | covers_ {} |
| StaticVector< climate::Climate *, ESPHOME_ENTITY_CLIMATE_COUNT > | climates_ {} |
| StaticVector< light::LightState *, ESPHOME_ENTITY_LIGHT_COUNT > | lights_ {} |
| StaticVector< number::Number *, ESPHOME_ENTITY_NUMBER_COUNT > | numbers_ {} |
| StaticVector< datetime::DateEntity *, ESPHOME_ENTITY_DATE_COUNT > | dates_ {} |
| StaticVector< datetime::TimeEntity *, ESPHOME_ENTITY_TIME_COUNT > | times_ {} |
| StaticVector< datetime::DateTimeEntity *, ESPHOME_ENTITY_DATETIME_COUNT > | datetimes_ {} |
| StaticVector< select::Select *, ESPHOME_ENTITY_SELECT_COUNT > | selects_ {} |
| StaticVector< text::Text *, ESPHOME_ENTITY_TEXT_COUNT > | texts_ {} |
| StaticVector< lock::Lock *, ESPHOME_ENTITY_LOCK_COUNT > | locks_ {} |
| StaticVector< valve::Valve *, ESPHOME_ENTITY_VALVE_COUNT > | valves_ {} |
| StaticVector< media_player::MediaPlayer *, ESPHOME_ENTITY_MEDIA_PLAYER_COUNT > | media_players_ {} |
| StaticVector< alarm_control_panel::AlarmControlPanel *, ESPHOME_ENTITY_ALARM_CONTROL_PANEL_COUNT > | alarm_control_panels_ {} |
| StaticVector< water_heater::WaterHeater *, ESPHOME_ENTITY_WATER_HEATER_COUNT > | water_heaters_ {} |
| StaticVector< infrared::Infrared *, ESPHOME_ENTITY_INFRARED_COUNT > | infrareds_ {} |
| StaticVector< update::UpdateEntity *, ESPHOME_ENTITY_UPDATE_COUNT > | updates_ {} |
Definition at line 139 of file application.h.
|
protected |
Process dump_config output one component per loop iteration.
Extracted from loop() to keep cold startup/reconnect logging out of the hot path. Caller must ensure dump_config_at_ < components_.size().
|
protected |
Definition at line 443 of file application.cpp.
|
protected |
Definition at line 405 of file application.cpp.
|
protected |
Definition at line 550 of file application.cpp.
|
protected |
Definition at line 520 of file application.cpp.
|
protected |
Definition at line 389 of file application.cpp.
|
protected |
Definition at line 414 of file application.cpp.
|
inlineprotected |
Definition at line 756 of file application.h.
|
protected |
Definition at line 451 of file application.cpp.
|
protected |
Definition at line 468 of file application.cpp.
|
inline |
Get the build time as a string (deprecated, use get_build_time_string() instead)
Definition at line 326 of file application.h.
| void HOT esphome::Application::feed_wdt | ( | uint32_t | time = 0 | ) |
Definition at line 251 of file application.cpp.
|
protected |
|
inline |
Definition at line 376 of file application.h.
|
inline |
Get the area of this Application set by pre_setup().
Definition at line 283 of file application.h.
|
inline |
Definition at line 401 of file application.h.
|
inline |
Definition at line 404 of file application.h.
| time_t esphome::Application::get_build_time | ( | ) |
Get the build time as a Unix timestamp.
Definition at line 814 of file application.cpp.
| void esphome::Application::get_build_time_string | ( | std::span< char, BUILD_TIME_STR_SIZE > | buffer | ) |
Copy the build time string into the provided buffer Buffer must be BUILD_TIME_STR_SIZE bytes (compile-time enforced)
Definition at line 800 of file application.cpp.
|
inline |
Get the comment of this Application as a string.
Definition at line 300 of file application.h.
| void esphome::Application::get_comment_string | ( | std::span< char, ESPHOME_COMMENT_SIZE_MAX > | buffer | ) |
Copy the comment string into the provided buffer.
Definition at line 805 of file application.cpp.
| uint32_t esphome::Application::get_config_hash | ( | ) |
Get the config hash as a 32-bit integer.
Definition at line 810 of file application.cpp.
| uint32_t esphome::Application::get_config_version_hash | ( | ) |
Get the config hash extended with ESPHome version.
Definition at line 812 of file application.cpp.
|
inline |
Definition at line 170 of file application.h.
|
inline |
Definition at line 389 of file application.h.
|
inline |
Definition at line 478 of file application.h.
|
inline |
Definition at line 405 of file application.h.
|
inline |
Definition at line 413 of file application.h.
|
inline |
Definition at line 437 of file application.h.
|
inline |
Definition at line 429 of file application.h.
|
inline |
Definition at line 445 of file application.h.
|
inline |
Definition at line 453 of file application.h.
|
inline |
Definition at line 449 of file application.h.
|
inline |
Definition at line 493 of file application.h.
|
inline |
Definition at line 425 of file application.h.
|
inline |
Definition at line 488 of file application.h.
|
inline |
Definition at line 433 of file application.h.
|
inline |
Definition at line 465 of file application.h.
|
inline |
Definition at line 473 of file application.h.
|
inline |
Definition at line 441 of file application.h.
|
inline |
Definition at line 461 of file application.h.
|
inline |
Definition at line 417 of file application.h.
|
inline |
Definition at line 409 of file application.h.
|
inline |
Definition at line 457 of file application.h.
|
inline |
Definition at line 421 of file application.h.
| esphome::Application::GET_ENTITY_METHOD | ( | update::UpdateEntity | , |
| update | , | ||
| updates | ) |
|
inline |
Definition at line 469 of file application.h.
|
inline |
Definition at line 483 of file application.h.
|
inline |
Get the friendly name of this Application set by pre_setup().
Definition at line 280 of file application.h.
|
inline |
Get the cached time in milliseconds from when the current component started its loop execution.
Definition at line 334 of file application.h.
|
inline |
Definition at line 356 of file application.h.
|
inline |
Get the name of this Application set by pre_setup().
Definition at line 277 of file application.h.
|
inline |
Definition at line 306 of file application.h.
|
inlineprotected |
Fast path for Socket::ready() via friendship - skips negative fd check.
Main loop only — with USE_LWIP_FAST_SELECT, reads rcvevent via lwip_socket_dbg_get_socket(), which has no refcount; safe only because the main loop owns socket lifetime (creates, reads, and closes sockets on the same thread).
Definition at line 558 of file application.h.
|
inlineprotected |
Definition at line 560 of file application.h.
| void esphome::Application::loop | ( | ) |
Make a loop iteration. Call this in your loop() function.
Definition at line 158 of file application.cpp.
|
inline |
Definition at line 141 of file application.h.
| void esphome::Application::reboot | ( | ) |
Definition at line 266 of file application.cpp.
|
inline |
Definition at line 247 of file application.h.
|
inline |
Definition at line 166 of file application.h.
|
inline |
Definition at line 173 of file application.h.
|
inline |
Definition at line 187 of file application.h.
|
inline |
Definition at line 203 of file application.h.
|
inlineprotected |
Register a component, detecting loop() override at compile time.
Uses HasLoopOverride<T> which handles ambiguous &T::loop from multiple inheritance.
Definition at line 566 of file application.h.
|
protected |
Definition at line 82 of file application.cpp.
|
inline |
Definition at line 199 of file application.h.
|
inline |
Definition at line 215 of file application.h.
|
inline |
Definition at line 223 of file application.h.
|
inline |
Definition at line 163 of file application.h.
|
inline |
Definition at line 261 of file application.h.
|
inline |
Definition at line 195 of file application.h.
|
inline |
Definition at line 257 of file application.h.
|
inline |
Definition at line 207 of file application.h.
|
inline |
Definition at line 235 of file application.h.
|
inline |
Definition at line 243 of file application.h.
|
inline |
Definition at line 211 of file application.h.
|
inline |
Definition at line 231 of file application.h.
|
inline |
Definition at line 179 of file application.h.
| bool esphome::Application::register_socket_fd | ( | int | fd | ) |
Register/unregister a socket file descriptor to be monitored for read events.
These functions update the fd_set used by select() in the main loop. WARNING: These functions are NOT thread-safe. They must only be called from the main loop. NOTE: File descriptors >= FD_SETSIZE (typically 10 on ESP) will be rejected with an error.
Definition at line 556 of file application.cpp.
|
inline |
Definition at line 183 of file application.h.
|
inline |
Definition at line 227 of file application.h.
|
inline |
Definition at line 191 of file application.h.
|
inline |
Definition at line 219 of file application.h.
|
inline |
Definition at line 265 of file application.h.
|
inline |
Definition at line 239 of file application.h.
|
inline |
Definition at line 253 of file application.h.
| void esphome::Application::run_powerdown_hooks | ( | ) |
Definition at line 290 of file application.cpp.
| void esphome::Application::run_safe_shutdown_hooks | ( | ) |
Definition at line 281 of file application.cpp.
| void esphome::Application::safe_reboot | ( | ) |
Definition at line 273 of file application.cpp.
|
inline |
Definition at line 358 of file application.h.
|
inline |
Definition at line 169 of file application.h.
|
inline |
Set the target interval with which to run the loop() calls.
If the loop() method takes longer than the target interval, ESPHome won't sleep in loop(), but if the time spent in loop() is small than the target, ESPHome will delay at the end of the App.loop() method.
This is done to conserve power: In most use-cases, high-speed loop() calls are not required and degrade power consumption.
Each component can request a high frequency loop execution by using the HighFrequencyLoopRequester helper in helpers.h
Note: This method is not called by ESPHome core code. It is only used by lambda functions in YAML configurations or by external components.
| loop_interval | The interval in milliseconds to run the core loop at. Defaults to 16 milliseconds. |
Definition at line 352 of file application.h.
| void esphome::Application::setup | ( | ) |
Reserve space for components to avoid memory fragmentation.
Set up all the registered components. Call this at the end of your setup() function.
Definition at line 88 of file application.cpp.
|
protected |
Definition at line 730 of file application.cpp.
| void esphome::Application::teardown_components | ( | uint32_t | timeout_ms | ) |
Teardown all components with a timeout.
| timeout_ms | Maximum time to wait for teardown in milliseconds |
Definition at line 296 of file application.cpp.
| void esphome::Application::unregister_socket_fd | ( | int | fd | ) |
Definition at line 587 of file application.cpp.
|
protected |
|
protected |
|
inlinestatic |
Wake the main event loop from any context (ISR, thread, or main loop).
Detects the calling context and uses the appropriate FreeRTOS API.
Definition at line 532 of file application.h.
|
inlinestatic |
Wake the main event loop from any context (ISR, thread, or main loop).
On ESP8266: sets the socket wake flag and calls esp_schedule() to exit esp_delay() early.
Definition at line 540 of file application.h.
|
inlinestatic |
Wake the main event loop from an ISR.
Uses vTaskNotifyGiveFromISR() — <1 us, ISR-safe. Only available on platforms with fast select (ESP32, LibreTiny).
| px_higher_priority_task_woken | Set to pdTRUE if a context switch is needed. |
Definition at line 525 of file application.h.
| void esphome::Application::wake_loop_threadsafe | ( | ) |
Wake the main event loop from another FreeRTOS task.
Thread-safe, but must only be called from task context (NOT ISR-safe). On ESP32: uses xTaskNotifyGive (<1 us) On other platforms: uses UDP loopback socket
Definition at line 724 of file application.cpp.
|
protected |
Perform a delay while also monitoring socket file descriptors for readiness.
Definition at line 621 of file application.cpp.
|
protected |
Definition at line 732 of file application.h.
|
protected |
Definition at line 649 of file application.h.
|
protected |
Definition at line 671 of file application.h.
|
protected |
Definition at line 661 of file application.h.
|
protected |
Definition at line 674 of file application.h.
|
staticconstexpr |
Size of buffer required for build time string (including null terminator)
Definition at line 309 of file application.h.
|
protected |
Definition at line 680 of file application.h.
|
protected |
Definition at line 698 of file application.h.
|
protected |
Definition at line 544 of file application.h.
|
protected |
Definition at line 665 of file application.h.
|
protected |
Definition at line 695 of file application.h.
|
protected |
Definition at line 603 of file application.h.
|
protected |
Definition at line 646 of file application.h.
|
protected |
Definition at line 707 of file application.h.
|
protected |
Definition at line 713 of file application.h.
|
protected |
Definition at line 668 of file application.h.
|
protected |
Definition at line 643 of file application.h.
|
staticconstexpr |
Maximum size of the comment buffer (including null terminator)
Definition at line 294 of file application.h.
|
protected |
Definition at line 683 of file application.h.
|
protected |
Definition at line 692 of file application.h.
|
protected |
Definition at line 632 of file application.h.
|
protected |
Definition at line 652 of file application.h.
|
protected |
Definition at line 651 of file application.h.
|
protected |
Definition at line 738 of file application.h.
|
protected |
Definition at line 635 of file application.h.
|
protected |
Definition at line 701 of file application.h.
|
protected |
Definition at line 722 of file application.h.
|
protected |
Definition at line 636 of file application.h.
|
protected |
Definition at line 644 of file application.h.
|
protected |
Definition at line 622 of file application.h.
|
protected |
Definition at line 645 of file application.h.
|
protected |
Definition at line 639 of file application.h.
|
protected |
Definition at line 728 of file application.h.
|
protected |
Definition at line 631 of file application.h.
|
protected |
Definition at line 650 of file application.h.
|
protected |
Definition at line 704 of file application.h.
|
protected |
Definition at line 660 of file application.h.
|
protected |
Definition at line 716 of file application.h.
|
protected |
Definition at line 686 of file application.h.
|
protected |
Definition at line 624 of file application.h.
|
protected |
Definition at line 655 of file application.h.
|
protected |
Definition at line 677 of file application.h.
|
protected |
Definition at line 689 of file application.h.
|
protected |
Definition at line 719 of file application.h.
|
protected |
Definition at line 710 of file application.h.
|
protected |
Definition at line 741 of file application.h.
|
protected |
Definition at line 725 of file application.h.
|
protected |
Definition at line 626 of file application.h.
|
protected |
Definition at line 735 of file application.h.