ESPHome 2025.8.0b1
Loading...
Searching...
No Matches
component_iterator.h
Go to the documentation of this file.
1#pragma once
2
6
7#ifdef USE_CAMERA
9#endif
10
11namespace esphome {
12
13#ifdef USE_API_SERVICES
14namespace api {
15class UserServiceDescriptor;
16} // namespace api
17#endif
18
20 public:
21 void begin(bool include_internal = false);
22 void advance();
23 virtual bool on_begin();
24#ifdef USE_BINARY_SENSOR
25 virtual bool on_binary_sensor(binary_sensor::BinarySensor *binary_sensor) = 0;
26#endif
27#ifdef USE_COVER
28 virtual bool on_cover(cover::Cover *cover) = 0;
29#endif
30#ifdef USE_FAN
31 virtual bool on_fan(fan::Fan *fan) = 0;
32#endif
33#ifdef USE_LIGHT
34 virtual bool on_light(light::LightState *light) = 0;
35#endif
36#ifdef USE_SENSOR
37 virtual bool on_sensor(sensor::Sensor *sensor) = 0;
38#endif
39#ifdef USE_SWITCH
40 virtual bool on_switch(switch_::Switch *a_switch) = 0;
41#endif
42#ifdef USE_BUTTON
43 virtual bool on_button(button::Button *button) = 0;
44#endif
45#ifdef USE_TEXT_SENSOR
46 virtual bool on_text_sensor(text_sensor::TextSensor *text_sensor) = 0;
47#endif
48#ifdef USE_API_SERVICES
49 virtual bool on_service(api::UserServiceDescriptor *service);
50#endif
51#ifdef USE_CAMERA
52 virtual bool on_camera(camera::Camera *camera);
53#endif
54#ifdef USE_CLIMATE
55 virtual bool on_climate(climate::Climate *climate) = 0;
56#endif
57#ifdef USE_NUMBER
58 virtual bool on_number(number::Number *number) = 0;
59#endif
60#ifdef USE_DATETIME_DATE
61 virtual bool on_date(datetime::DateEntity *date) = 0;
62#endif
63#ifdef USE_DATETIME_TIME
64 virtual bool on_time(datetime::TimeEntity *time) = 0;
65#endif
66#ifdef USE_DATETIME_DATETIME
67 virtual bool on_datetime(datetime::DateTimeEntity *datetime) = 0;
68#endif
69#ifdef USE_TEXT
70 virtual bool on_text(text::Text *text) = 0;
71#endif
72#ifdef USE_SELECT
73 virtual bool on_select(select::Select *select) = 0;
74#endif
75#ifdef USE_LOCK
76 virtual bool on_lock(lock::Lock *a_lock) = 0;
77#endif
78#ifdef USE_VALVE
79 virtual bool on_valve(valve::Valve *valve) = 0;
80#endif
81#ifdef USE_MEDIA_PLAYER
82 virtual bool on_media_player(media_player::MediaPlayer *media_player);
83#endif
84#ifdef USE_ALARM_CONTROL_PANEL
85 virtual bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel) = 0;
86#endif
87#ifdef USE_EVENT
88 virtual bool on_event(event::Event *event) = 0;
89#endif
90#ifdef USE_UPDATE
91 virtual bool on_update(update::UpdateEntity *update) = 0;
92#endif
93 virtual bool on_end();
94
95 protected:
96 // Iterates over all ESPHome entities (sensors, switches, lights, etc.)
97 // Supports up to 256 entity types and up to 65,535 entities of each type
98 enum class IteratorState : uint8_t {
99 NONE = 0,
100 BEGIN,
101#ifdef USE_BINARY_SENSOR
103#endif
104#ifdef USE_COVER
105 COVER,
106#endif
107#ifdef USE_FAN
108 FAN,
109#endif
110#ifdef USE_LIGHT
111 LIGHT,
112#endif
113#ifdef USE_SENSOR
114 SENSOR,
115#endif
116#ifdef USE_SWITCH
117 SWITCH,
118#endif
119#ifdef USE_BUTTON
120 BUTTON,
121#endif
122#ifdef USE_TEXT_SENSOR
124#endif
125#ifdef USE_API_SERVICES
126 SERVICE,
127#endif
128#ifdef USE_CAMERA
129 CAMERA,
130#endif
131#ifdef USE_CLIMATE
132 CLIMATE,
133#endif
134#ifdef USE_NUMBER
135 NUMBER,
136#endif
137#ifdef USE_DATETIME_DATE
139#endif
140#ifdef USE_DATETIME_TIME
142#endif
143#ifdef USE_DATETIME_DATETIME
145#endif
146#ifdef USE_TEXT
147 TEXT,
148#endif
149#ifdef USE_SELECT
150 SELECT,
151#endif
152#ifdef USE_LOCK
153 LOCK,
154#endif
155#ifdef USE_VALVE
156 VALVE,
157#endif
158#ifdef USE_MEDIA_PLAYER
160#endif
161#ifdef USE_ALARM_CONTROL_PANEL
163#endif
164#ifdef USE_EVENT
165 EVENT,
166#endif
167#ifdef USE_UPDATE
168 UPDATE,
169#endif
170 MAX,
172 uint16_t at_{0}; // Supports up to 65,535 entities per type
173 bool include_internal_{false};
174
175 template<typename Container>
176 void process_platform_item_(const Container &items,
177 bool (ComponentIterator::*on_item)(typename Container::value_type)) {
178 if (this->at_ >= items.size()) {
179 this->advance_platform_();
180 } else {
181 typename Container::value_type item = items[this->at_];
182 if ((item->is_internal() && !this->include_internal_) || (this->*on_item)(item)) {
183 this->at_++;
184 }
185 }
186 }
187
188 void advance_platform_();
189};
190
191} // namespace esphome
virtual bool on_text(text::Text *text)=0
virtual bool on_media_player(media_player::MediaPlayer *media_player)
void process_platform_item_(const Container &items, bool(ComponentIterator::*on_item)(typename Container::value_type))
virtual bool on_alarm_control_panel(alarm_control_panel::AlarmControlPanel *a_alarm_control_panel)=0
virtual bool on_date(datetime::DateEntity *date)=0
virtual bool on_cover(cover::Cover *cover)=0
virtual bool on_datetime(datetime::DateTimeEntity *datetime)=0
virtual bool on_select(select::Select *select)=0
void begin(bool include_internal=false)
virtual bool on_button(button::Button *button)=0
virtual bool on_sensor(sensor::Sensor *sensor)=0
enum esphome::ComponentIterator::IteratorState NONE
virtual bool on_text_sensor(text_sensor::TextSensor *text_sensor)=0
virtual bool on_valve(valve::Valve *valve)=0
virtual bool on_service(api::UserServiceDescriptor *service)
virtual bool on_fan(fan::Fan *fan)=0
virtual bool on_number(number::Number *number)=0
virtual bool on_switch(switch_::Switch *a_switch)=0
virtual bool on_camera(camera::Camera *camera)
virtual bool on_climate(climate::Climate *climate)=0
virtual bool on_time(datetime::TimeEntity *time)=0
virtual bool on_light(light::LightState *light)=0
virtual bool on_event(event::Event *event)=0
virtual bool on_lock(lock::Lock *a_lock)=0
virtual bool on_update(update::UpdateEntity *update)=0
virtual bool on_binary_sensor(binary_sensor::BinarySensor *binary_sensor)=0
Base class for all binary_sensor-type classes.
Base class for all buttons.
Definition button.h:29
Abstract camera base class.
Definition camera.h:57
ClimateDevice - This is the base class for all climate integrations.
Definition climate.h:168
Base class for all cover devices.
Definition cover.h:111
This class represents the communication layer between the front-end MQTT layer and the hardware outpu...
Definition light_state.h:66
Base class for all locks.
Definition lock.h:103
Base-class for all numbers.
Definition number.h:39
Base-class for all selects.
Definition select.h:31
Base-class for all sensors.
Definition sensor.h:59
Base class for all switches.
Definition switch.h:39
Base-class for all text inputs.
Definition text.h:24
Base class for all valve devices.
Definition valve.h:105
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7