ESPHome 2026.1.0-dev
Loading...
Searching...
No Matches
web_server.h
Go to the documentation of this file.
1#pragma once
2
6#ifdef USE_WEBSERVER
10#ifdef USE_LOGGER
12#endif
13
14#include <functional>
15#include <list>
16#include <map>
17#include <string>
18#include <utility>
19#include <vector>
20
21#if USE_WEBSERVER_VERSION >= 2
22extern const uint8_t ESPHOME_WEBSERVER_INDEX_HTML[] PROGMEM;
23extern const size_t ESPHOME_WEBSERVER_INDEX_HTML_SIZE;
24#endif
25
26#ifdef USE_WEBSERVER_CSS_INCLUDE
27extern const uint8_t ESPHOME_WEBSERVER_CSS_INCLUDE[] PROGMEM;
28extern const size_t ESPHOME_WEBSERVER_CSS_INCLUDE_SIZE;
29#endif
30
31#ifdef USE_WEBSERVER_JS_INCLUDE
32extern const uint8_t ESPHOME_WEBSERVER_JS_INCLUDE[] PROGMEM;
33extern const size_t ESPHOME_WEBSERVER_JS_INCLUDE_SIZE;
34#endif
35
36namespace esphome::web_server {
37
39struct UrlMatch {
40 const char *domain;
41 const char *id;
42 const char *method;
43 uint8_t domain_len;
44 uint8_t id_len;
45 uint8_t method_len;
46 bool valid;
47
48 // Helper methods for string comparisons
49 bool domain_equals(const char *str) const {
50 return domain && domain_len == strlen(str) && memcmp(domain, str, domain_len) == 0;
51 }
52
53 bool id_equals_entity(EntityBase *entity) const {
54 // Get object_id with zero heap allocation
55 char object_id_buf[OBJECT_ID_MAX_LEN];
56 StringRef object_id = entity->get_object_id_to(object_id_buf);
57 return id && id_len == object_id.size() && memcmp(id, object_id.c_str(), id_len) == 0;
58 }
59
60 bool method_equals(const char *str) const {
61 return method && method_len == strlen(str) && memcmp(method, str, method_len) == 0;
62 }
63
64 bool method_empty() const { return method_len == 0; }
65};
66
67#ifdef USE_WEBSERVER_SORTING
69 float weight;
70 uint64_t group_id;
71};
72
74 std::string name;
75 float weight;
76};
77#endif
78
80
81/*
82 In order to defer updates in arduino mode, we need to create one AsyncEventSource per incoming request to /events.
83 This is because only minimal changes were made to the ESPAsyncWebServer lib_dep, it was undesirable to put deferred
84 update logic into that library. We need one deferred queue per connection so instead of one AsyncEventSource with
85 multiple clients, we have multiple event sources with one client each. This is slightly awkward which is why it's
86 implemented in a more straightforward way for ESP-IDF. Arduino platform will eventually go away and this workaround
87 can be forgotten.
88*/
89#if !defined(USE_ESP32) && defined(USE_ARDUINO)
90using message_generator_t = std::string(WebServer *, void *);
91
93class DeferredUpdateEventSource : public AsyncEventSource {
95
96 /*
97 This class holds a pointer to the source component that wants to publish a state event, and a pointer to a function
98 that will lazily generate that event. The two pointers allow dedup in the deferred queue if multiple publishes for
99 the same component are backed up, and take up only 8 bytes of memory. The entry in the deferred queue (a
100 std::vector) is the DeferredEvent instance itself (not a pointer to one elsewhere in heap) so still only 8 bytes per
101 entry (and no heap fragmentation). Even 100 backed up events (you'd have to have at least 100 sensors publishing
102 because of dedup) would take up only 0.8 kB.
103 */
104 struct DeferredEvent {
105 friend class DeferredUpdateEventSource;
106
107 protected:
108 void *source_;
110
111 public:
112 DeferredEvent(void *source, message_generator_t *message_generator)
113 : source_(source), message_generator_(message_generator) {}
114 bool operator==(const DeferredEvent &test) const {
115 return (source_ == test.source_ && message_generator_ == test.message_generator_);
116 }
117 } __attribute__((packed));
118
119 protected:
120 // surface a couple methods from the base class
121 using AsyncEventSource::handleRequest;
122 using AsyncEventSource::send;
123
125 // vector is used very specifically for its zero memory overhead even though items are popped from the front (memory
126 // footprint is more important than speed here)
127 std::vector<DeferredEvent> deferred_queue_;
130 static constexpr uint16_t MAX_CONSECUTIVE_SEND_FAILURES = 2500; // ~20 seconds at 125Hz loop rate
131
132 // helper for allowing only unique entries in the queue
133 void deq_push_back_with_dedup_(void *source, message_generator_t *message_generator);
134
136
137 public:
138 DeferredUpdateEventSource(WebServer *ws, const String &url)
139 : AsyncEventSource(url), entities_iterator_(ListEntitiesIterator(ws, this)), web_server_(ws) {}
140
141 void loop();
142
143 void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator);
144 void try_send_nodefer(const char *message, const char *event = nullptr, uint32_t id = 0, uint32_t reconnect = 0);
145};
146
147class DeferredUpdateEventSourceList : public std::list<DeferredUpdateEventSource *> {
148 protected:
151
152 public:
153 void loop();
154
155 void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator);
156 void try_send_nodefer(const char *message, const char *event = nullptr, uint32_t id = 0, uint32_t reconnect = 0);
157
158 void add_new_client(WebServer *ws, AsyncWebServerRequest *request);
159};
160#endif
161
171class WebServer : public Controller,
172 public Component,
173 public AsyncWebHandler
174#ifdef USE_LOGGER
175 ,
177#endif
178{
179#if !defined(USE_ESP32) && defined(USE_ARDUINO)
181#endif
182
183 public:
185
186#if USE_WEBSERVER_VERSION == 1
192 void set_css_url(const char *css_url);
193
199 void set_js_url(const char *js_url);
200#endif
201
202#ifdef USE_WEBSERVER_CSS_INCLUDE
207 void set_css_include(const char *css_include);
208#endif
209
210#ifdef USE_WEBSERVER_JS_INCLUDE
215 void set_js_include(const char *js_include);
216#endif
217
223 void set_include_internal(bool include_internal) { include_internal_ = include_internal; }
228 void set_expose_log(bool expose_log) { this->expose_log_ = expose_log; }
229
230 // ========== INTERNAL METHODS ==========
231 // (In most use cases you won't need these)
233 void setup() override;
234 void loop() override;
235
236 void dump_config() override;
237
238#ifdef USE_LOGGER
239 void on_log(uint8_t level, const char *tag, const char *message, size_t message_len) override;
240#endif
241
243 float get_setup_priority() const override;
244
246 void handle_index_request(AsyncWebServerRequest *request);
247
249 std::string get_config_json();
250
251#ifdef USE_WEBSERVER_CSS_INCLUDE
253 void handle_css_request(AsyncWebServerRequest *request);
254#endif
255
256#ifdef USE_WEBSERVER_JS_INCLUDE
258 void handle_js_request(AsyncWebServerRequest *request);
259#endif
260
261#ifdef USE_WEBSERVER_PRIVATE_NETWORK_ACCESS
262 // Handle Private Network Access CORS OPTIONS request
263 void handle_pna_cors_request(AsyncWebServerRequest *request);
264#endif
265
266#ifdef USE_SENSOR
267 void on_sensor_update(sensor::Sensor *obj) override;
269 void handle_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match);
270
271 static std::string sensor_state_json_generator(WebServer *web_server, void *source);
272 static std::string sensor_all_json_generator(WebServer *web_server, void *source);
273#endif
274
275#ifdef USE_SWITCH
276 void on_switch_update(switch_::Switch *obj) override;
277
279 void handle_switch_request(AsyncWebServerRequest *request, const UrlMatch &match);
280
281 static std::string switch_state_json_generator(WebServer *web_server, void *source);
282 static std::string switch_all_json_generator(WebServer *web_server, void *source);
283#endif
284
285#ifdef USE_BUTTON
287 void handle_button_request(AsyncWebServerRequest *request, const UrlMatch &match);
288
289 static std::string button_state_json_generator(WebServer *web_server, void *source);
290 static std::string button_all_json_generator(WebServer *web_server, void *source);
291#endif
292
293#ifdef USE_BINARY_SENSOR
295
297 void handle_binary_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match);
298
299 static std::string binary_sensor_state_json_generator(WebServer *web_server, void *source);
300 static std::string binary_sensor_all_json_generator(WebServer *web_server, void *source);
301#endif
302
303#ifdef USE_FAN
304 void on_fan_update(fan::Fan *obj) override;
305
307 void handle_fan_request(AsyncWebServerRequest *request, const UrlMatch &match);
308
309 static std::string fan_state_json_generator(WebServer *web_server, void *source);
310 static std::string fan_all_json_generator(WebServer *web_server, void *source);
311#endif
312
313#ifdef USE_LIGHT
314 void on_light_update(light::LightState *obj) override;
315
317 void handle_light_request(AsyncWebServerRequest *request, const UrlMatch &match);
318
319 static std::string light_state_json_generator(WebServer *web_server, void *source);
320 static std::string light_all_json_generator(WebServer *web_server, void *source);
321#endif
322
323#ifdef USE_TEXT_SENSOR
325
327 void handle_text_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match);
328
329 static std::string text_sensor_state_json_generator(WebServer *web_server, void *source);
330 static std::string text_sensor_all_json_generator(WebServer *web_server, void *source);
331#endif
332
333#ifdef USE_COVER
334 void on_cover_update(cover::Cover *obj) override;
335
337 void handle_cover_request(AsyncWebServerRequest *request, const UrlMatch &match);
338
339 static std::string cover_state_json_generator(WebServer *web_server, void *source);
340 static std::string cover_all_json_generator(WebServer *web_server, void *source);
341#endif
342
343#ifdef USE_NUMBER
344 void on_number_update(number::Number *obj) override;
346 void handle_number_request(AsyncWebServerRequest *request, const UrlMatch &match);
347
348 static std::string number_state_json_generator(WebServer *web_server, void *source);
349 static std::string number_all_json_generator(WebServer *web_server, void *source);
350#endif
351
352#ifdef USE_DATETIME_DATE
353 void on_date_update(datetime::DateEntity *obj) override;
355 void handle_date_request(AsyncWebServerRequest *request, const UrlMatch &match);
356
357 static std::string date_state_json_generator(WebServer *web_server, void *source);
358 static std::string date_all_json_generator(WebServer *web_server, void *source);
359#endif
360
361#ifdef USE_DATETIME_TIME
362 void on_time_update(datetime::TimeEntity *obj) override;
364 void handle_time_request(AsyncWebServerRequest *request, const UrlMatch &match);
365
366 static std::string time_state_json_generator(WebServer *web_server, void *source);
367 static std::string time_all_json_generator(WebServer *web_server, void *source);
368#endif
369
370#ifdef USE_DATETIME_DATETIME
373 void handle_datetime_request(AsyncWebServerRequest *request, const UrlMatch &match);
374
375 static std::string datetime_state_json_generator(WebServer *web_server, void *source);
376 static std::string datetime_all_json_generator(WebServer *web_server, void *source);
377#endif
378
379#ifdef USE_TEXT
380 void on_text_update(text::Text *obj) override;
382 void handle_text_request(AsyncWebServerRequest *request, const UrlMatch &match);
383
384 static std::string text_state_json_generator(WebServer *web_server, void *source);
385 static std::string text_all_json_generator(WebServer *web_server, void *source);
386#endif
387
388#ifdef USE_SELECT
389 void on_select_update(select::Select *obj) override;
391 void handle_select_request(AsyncWebServerRequest *request, const UrlMatch &match);
392
393 static std::string select_state_json_generator(WebServer *web_server, void *source);
394 static std::string select_all_json_generator(WebServer *web_server, void *source);
395#endif
396
397#ifdef USE_CLIMATE
398 void on_climate_update(climate::Climate *obj) override;
400 void handle_climate_request(AsyncWebServerRequest *request, const UrlMatch &match);
401
402 static std::string climate_state_json_generator(WebServer *web_server, void *source);
403 static std::string climate_all_json_generator(WebServer *web_server, void *source);
404#endif
405
406#ifdef USE_LOCK
407 void on_lock_update(lock::Lock *obj) override;
408
410 void handle_lock_request(AsyncWebServerRequest *request, const UrlMatch &match);
411
412 static std::string lock_state_json_generator(WebServer *web_server, void *source);
413 static std::string lock_all_json_generator(WebServer *web_server, void *source);
414#endif
415
416#ifdef USE_VALVE
417 void on_valve_update(valve::Valve *obj) override;
418
420 void handle_valve_request(AsyncWebServerRequest *request, const UrlMatch &match);
421
422 static std::string valve_state_json_generator(WebServer *web_server, void *source);
423 static std::string valve_all_json_generator(WebServer *web_server, void *source);
424#endif
425
426#ifdef USE_ALARM_CONTROL_PANEL
428
430 void handle_alarm_control_panel_request(AsyncWebServerRequest *request, const UrlMatch &match);
431
432 static std::string alarm_control_panel_state_json_generator(WebServer *web_server, void *source);
433 static std::string alarm_control_panel_all_json_generator(WebServer *web_server, void *source);
434#endif
435
436#ifdef USE_EVENT
437 void on_event(event::Event *obj) override;
438
439 static std::string event_state_json_generator(WebServer *web_server, void *source);
440 static std::string event_all_json_generator(WebServer *web_server, void *source);
441
443 void handle_event_request(AsyncWebServerRequest *request, const UrlMatch &match);
444#endif
445
446#ifdef USE_UPDATE
447 void on_update(update::UpdateEntity *obj) override;
448
450 void handle_update_request(AsyncWebServerRequest *request, const UrlMatch &match);
451
452 static std::string update_state_json_generator(WebServer *web_server, void *source);
453 static std::string update_all_json_generator(WebServer *web_server, void *source);
454#endif
455
457 bool canHandle(AsyncWebServerRequest *request) const override;
459 void handleRequest(AsyncWebServerRequest *request) override;
461 bool isRequestHandlerTrivial() const override; // NOLINT(readability-identifier-naming)
462
463#ifdef USE_WEBSERVER_SORTING
464 void add_entity_config(EntityBase *entity, float weight, uint64_t group);
465 void add_sorting_group(uint64_t group_id, const std::string &group_name, float weight);
466
467 std::map<EntityBase *, SortingComponents> sorting_entitys_;
468 std::map<uint64_t, SortingGroup> sorting_groups_;
469#endif
470
471 bool include_internal_{false};
472
473 protected:
474 void add_sorting_info_(JsonObject &root, EntityBase *entity);
475
476#ifdef USE_LIGHT
477 // Helper to parse and apply a float parameter with optional scaling
478 template<typename T, typename Ret>
479 void parse_light_param_(AsyncWebServerRequest *request, const char *param_name, T &call, Ret (T::*setter)(float),
480 float scale = 1.0f) {
481 if (request->hasParam(param_name)) {
482 auto value = parse_number<float>(request->getParam(param_name)->value().c_str());
483 if (value.has_value()) {
484 (call.*setter)(*value / scale);
485 }
486 }
487 }
488
489 // Helper to parse and apply a uint32_t parameter with optional scaling
490 template<typename T, typename Ret>
491 void parse_light_param_uint_(AsyncWebServerRequest *request, const char *param_name, T &call,
492 Ret (T::*setter)(uint32_t), uint32_t scale = 1) {
493 if (request->hasParam(param_name)) {
494 auto value = parse_number<uint32_t>(request->getParam(param_name)->value().c_str());
495 if (value.has_value()) {
496 (call.*setter)(*value * scale);
497 }
498 }
499 }
500#endif
501
502 // Generic helper to parse and apply a float parameter
503 template<typename T, typename Ret>
504 void parse_float_param_(AsyncWebServerRequest *request, const char *param_name, T &call, Ret (T::*setter)(float)) {
505 if (request->hasParam(param_name)) {
506 auto value = parse_number<float>(request->getParam(param_name)->value().c_str());
507 if (value.has_value()) {
508 (call.*setter)(*value);
509 }
510 }
511 }
512
513 // Generic helper to parse and apply an int parameter
514 template<typename T, typename Ret>
515 void parse_int_param_(AsyncWebServerRequest *request, const char *param_name, T &call, Ret (T::*setter)(int)) {
516 if (request->hasParam(param_name)) {
517 auto value = parse_number<int>(request->getParam(param_name)->value().c_str());
518 if (value.has_value()) {
519 (call.*setter)(*value);
520 }
521 }
522 }
523
524 // Generic helper to parse and apply a string parameter
525 template<typename T, typename Ret>
526 void parse_string_param_(AsyncWebServerRequest *request, const char *param_name, T &call,
527 Ret (T::*setter)(const std::string &)) {
528 if (request->hasParam(param_name)) {
529 // .c_str() is required for Arduino framework where value() returns Arduino String instead of std::string
530 std::string value = request->getParam(param_name)->value().c_str(); // NOLINT(readability-redundant-string-cstr)
531 (call.*setter)(value);
532 }
533 }
534
536#ifdef USE_ESP32
537 AsyncEventSource events_{"/events", this};
538#elif USE_ARDUINO
540#endif
541
542#if USE_WEBSERVER_VERSION == 1
543 const char *css_url_{nullptr};
544 const char *js_url_{nullptr};
545#endif
546#ifdef USE_WEBSERVER_CSS_INCLUDE
547 const char *css_include_{nullptr};
548#endif
549#ifdef USE_WEBSERVER_JS_INCLUDE
550 const char *js_include_{nullptr};
551#endif
552 bool expose_log_{true};
553
554 private:
555#ifdef USE_SENSOR
556 std::string sensor_json_(sensor::Sensor *obj, float value, JsonDetail start_config);
557#endif
558#ifdef USE_SWITCH
559 std::string switch_json_(switch_::Switch *obj, bool value, JsonDetail start_config);
560#endif
561#ifdef USE_BUTTON
562 std::string button_json_(button::Button *obj, JsonDetail start_config);
563#endif
564#ifdef USE_BINARY_SENSOR
565 std::string binary_sensor_json_(binary_sensor::BinarySensor *obj, bool value, JsonDetail start_config);
566#endif
567#ifdef USE_FAN
568 std::string fan_json_(fan::Fan *obj, JsonDetail start_config);
569#endif
570#ifdef USE_LIGHT
571 std::string light_json_(light::LightState *obj, JsonDetail start_config);
572#endif
573#ifdef USE_TEXT_SENSOR
574 std::string text_sensor_json_(text_sensor::TextSensor *obj, const std::string &value, JsonDetail start_config);
575#endif
576#ifdef USE_COVER
577 std::string cover_json_(cover::Cover *obj, JsonDetail start_config);
578#endif
579#ifdef USE_NUMBER
580 std::string number_json_(number::Number *obj, float value, JsonDetail start_config);
581#endif
582#ifdef USE_DATETIME_DATE
583 std::string date_json_(datetime::DateEntity *obj, JsonDetail start_config);
584#endif
585#ifdef USE_DATETIME_TIME
586 std::string time_json_(datetime::TimeEntity *obj, JsonDetail start_config);
587#endif
588#ifdef USE_DATETIME_DATETIME
589 std::string datetime_json_(datetime::DateTimeEntity *obj, JsonDetail start_config);
590#endif
591#ifdef USE_TEXT
592 std::string text_json_(text::Text *obj, const std::string &value, JsonDetail start_config);
593#endif
594#ifdef USE_SELECT
595 std::string select_json_(select::Select *obj, const char *value, JsonDetail start_config);
596#endif
597#ifdef USE_CLIMATE
598 std::string climate_json_(climate::Climate *obj, JsonDetail start_config);
599#endif
600#ifdef USE_LOCK
601 std::string lock_json_(lock::Lock *obj, lock::LockState value, JsonDetail start_config);
602#endif
603#ifdef USE_VALVE
604 std::string valve_json_(valve::Valve *obj, JsonDetail start_config);
605#endif
606#ifdef USE_ALARM_CONTROL_PANEL
607 std::string alarm_control_panel_json_(alarm_control_panel::AlarmControlPanel *obj,
609#endif
610#ifdef USE_EVENT
611 std::string event_json_(event::Event *obj, const std::string &event_type, JsonDetail start_config);
612#endif
613#ifdef USE_UPDATE
614 std::string update_json_(update::UpdateEntity *obj, JsonDetail start_config);
615#endif
616};
617
618} // namespace esphome::web_server
619#endif
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 (buffe...
StringRef is a reference to a string owned by something else.
Definition string_ref.h:22
constexpr const char * c_str() const
Definition string_ref.h:69
constexpr size_type size() const
Definition string_ref.h:70
Base class for all binary_sensor-type classes.
Base class for all buttons.
Definition button.h:25
ClimateDevice - This is the base class for all climate integrations.
Definition climate.h:181
Base class for all cover devices.
Definition cover.h:112
This class represents the communication layer between the front-end MQTT layer and the hardware outpu...
Definition light_state.h:91
Base class for all locks.
Definition lock.h:111
Interface for receiving log messages without std::function overhead.
Definition logger.h:56
Base-class for all numbers.
Definition number.h:29
Base-class for all selects.
Definition select.h:30
Base-class for all sensors.
Definition sensor.h:43
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:106
DeferredUpdateEventSource(WebServer *ws, const String &url)
Definition web_server.h:138
void try_send_nodefer(const char *message, const char *event=nullptr, uint32_t id=0, uint32_t reconnect=0)
static constexpr uint16_t MAX_CONSECUTIVE_SEND_FAILURES
Definition web_server.h:130
void deq_push_back_with_dedup_(void *source, message_generator_t *message_generator)
void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator)
std::vector< DeferredEvent > deferred_queue_
Definition web_server.h:127
void on_client_connect_(DeferredUpdateEventSource *source)
void add_new_client(WebServer *ws, AsyncWebServerRequest *request)
void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator)
void try_send_nodefer(const char *message, const char *event=nullptr, uint32_t id=0, uint32_t reconnect=0)
void on_client_disconnect_(DeferredUpdateEventSource *source)
This class allows users to create a web server with their ESP nodes.
Definition web_server.h:178
void setup() override
Setup the internal web server and register handlers.
void on_update(update::UpdateEntity *obj) override
static std::string text_sensor_all_json_generator(WebServer *web_server, void *source)
void set_expose_log(bool expose_log)
Set whether or not the webserver should expose the Log.
Definition web_server.h:228
std::string get_config_json()
Return the webserver configuration as JSON.
std::map< EntityBase *, SortingComponents > sorting_entitys_
Definition web_server.h:467
static std::string binary_sensor_state_json_generator(WebServer *web_server, void *source)
void on_text_update(text::Text *obj) override
static std::string button_state_json_generator(WebServer *web_server, void *source)
static std::string lock_all_json_generator(WebServer *web_server, void *source)
void on_light_update(light::LightState *obj) override
static std::string date_all_json_generator(WebServer *web_server, void *source)
void on_cover_update(cover::Cover *obj) override
static std::string text_state_json_generator(WebServer *web_server, void *source)
void set_css_url(const char *css_url)
Set the URL to the CSS <link> that's sent to each client.
void handle_select_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a select request under '/select/<id>'.
static std::string event_state_json_generator(WebServer *web_server, void *source)
static std::string datetime_all_json_generator(WebServer *web_server, void *source)
static std::string sensor_all_json_generator(WebServer *web_server, void *source)
bool isRequestHandlerTrivial() const override
This web handle is not trivial.
WebServer(web_server_base::WebServerBase *base)
void handle_switch_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a switch request under '/switch/<id>/</turn_on/turn_off/toggle>'.
void handle_event_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a event request under '/event<id>'.
void parse_light_param_uint_(AsyncWebServerRequest *request, const char *param_name, T &call, Ret(T::*setter)(uint32_t), uint32_t scale=1)
Definition web_server.h:491
void on_log(uint8_t level, const char *tag, const char *message, size_t message_len) override
DeferredUpdateEventSourceList events_
Definition web_server.h:539
void handle_button_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a button request under '/button/<id>/press'.
void on_date_update(datetime::DateEntity *obj) override
void on_number_update(number::Number *obj) override
void add_entity_config(EntityBase *entity, float weight, uint64_t group)
void set_include_internal(bool include_internal)
Determine whether internal components should be displayed on the web server.
Definition web_server.h:223
void handle_css_request(AsyncWebServerRequest *request)
Handle included css request under '/0.css'.
static std::string sensor_state_json_generator(WebServer *web_server, void *source)
void on_valve_update(valve::Valve *obj) override
void on_climate_update(climate::Climate *obj) override
static std::string switch_state_json_generator(WebServer *web_server, void *source)
void add_sorting_info_(JsonObject &root, EntityBase *entity)
void handle_light_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a light request under '/light/<id>/</turn_on/turn_off/toggle>'.
static std::string event_all_json_generator(WebServer *web_server, void *source)
static std::string climate_state_json_generator(WebServer *web_server, void *source)
void on_binary_sensor_update(binary_sensor::BinarySensor *obj) override
static std::string number_all_json_generator(WebServer *web_server, void *source)
void handle_text_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a text input request under '/text/<id>'.
void handle_cover_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a cover request under '/cover/<id>/<open/close/stop/set>'.
static std::string date_state_json_generator(WebServer *web_server, void *source)
static std::string valve_all_json_generator(WebServer *web_server, void *source)
static std::string text_all_json_generator(WebServer *web_server, void *source)
void on_switch_update(switch_::Switch *obj) override
web_server_base::WebServerBase * base_
Definition web_server.h:535
static std::string binary_sensor_all_json_generator(WebServer *web_server, void *source)
static std::string light_state_json_generator(WebServer *web_server, void *source)
void handle_lock_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a lock request under '/lock/<id>/</lock/unlock/open>'.
void on_alarm_control_panel_update(alarm_control_panel::AlarmControlPanel *obj) override
static std::string light_all_json_generator(WebServer *web_server, void *source)
void handle_text_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a text sensor request under '/text_sensor/<id>'.
void handle_date_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a date request under '/date/<id>'.
static std::string cover_all_json_generator(WebServer *web_server, void *source)
void set_js_url(const char *js_url)
Set the URL to the script that's embedded in the index page.
void handle_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a sensor request under '/sensor/<id>'.
static std::string text_sensor_state_json_generator(WebServer *web_server, void *source)
void handle_number_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a number request under '/number/<id>'.
static std::string alarm_control_panel_state_json_generator(WebServer *web_server, void *source)
void handle_index_request(AsyncWebServerRequest *request)
Handle an index request under '/'.
void handle_js_request(AsyncWebServerRequest *request)
Handle included js request under '/0.js'.
void set_js_include(const char *js_include)
Set local path to the script that's embedded in the index page.
static std::string fan_state_json_generator(WebServer *web_server, void *source)
static std::string update_state_json_generator(WebServer *web_server, void *source)
void handleRequest(AsyncWebServerRequest *request) override
Override the web handler's handleRequest method.
static std::string climate_all_json_generator(WebServer *web_server, void *source)
void on_datetime_update(datetime::DateTimeEntity *obj) override
void handle_fan_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a fan request under '/fan/<id>/</turn_on/turn_off/toggle>'.
static std::string cover_state_json_generator(WebServer *web_server, void *source)
static std::string lock_state_json_generator(WebServer *web_server, void *source)
void handle_valve_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a valve request under '/valve/<id>/<open/close/stop/set>'.
void handle_binary_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a binary sensor request under '/binary_sensor/<id>'.
static std::string alarm_control_panel_all_json_generator(WebServer *web_server, void *source)
static std::string number_state_json_generator(WebServer *web_server, void *source)
void handle_time_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a time request under '/time/<id>'.
void on_sensor_update(sensor::Sensor *obj) override
std::map< uint64_t, SortingGroup > sorting_groups_
Definition web_server.h:468
void set_css_include(const char *css_include)
Set local path to the script that's embedded in the index page.
static std::string valve_state_json_generator(WebServer *web_server, void *source)
bool canHandle(AsyncWebServerRequest *request) const override
Override the web handler's canHandle method.
void on_event(event::Event *obj) override
void handle_pna_cors_request(AsyncWebServerRequest *request)
void on_fan_update(fan::Fan *obj) override
void parse_light_param_(AsyncWebServerRequest *request, const char *param_name, T &call, Ret(T::*setter)(float), float scale=1.0f)
Definition web_server.h:479
void handle_datetime_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a datetime request under '/datetime/<id>'.
void parse_string_param_(AsyncWebServerRequest *request, const char *param_name, T &call, Ret(T::*setter)(const std::string &))
Definition web_server.h:526
void parse_float_param_(AsyncWebServerRequest *request, const char *param_name, T &call, Ret(T::*setter)(float))
Definition web_server.h:504
void handle_alarm_control_panel_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a alarm_control_panel request under '/alarm_control_panel/<id>'.
static std::string time_state_json_generator(WebServer *web_server, void *source)
void on_lock_update(lock::Lock *obj) override
static std::string button_all_json_generator(WebServer *web_server, void *source)
static std::string select_state_json_generator(WebServer *web_server, void *source)
float get_setup_priority() const override
MQTT setup priority.
void parse_int_param_(AsyncWebServerRequest *request, const char *param_name, T &call, Ret(T::*setter)(int))
Definition web_server.h:515
void on_select_update(select::Select *obj) override
void on_time_update(datetime::TimeEntity *obj) override
static std::string update_all_json_generator(WebServer *web_server, void *source)
void handle_update_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a update request under '/update/<id>'.
static std::string fan_all_json_generator(WebServer *web_server, void *source)
static std::string switch_all_json_generator(WebServer *web_server, void *source)
static std::string time_all_json_generator(WebServer *web_server, void *source)
void add_sorting_group(uint64_t group_id, const std::string &group_name, float weight)
static std::string select_all_json_generator(WebServer *web_server, void *source)
static std::string datetime_state_json_generator(WebServer *web_server, void *source)
void handle_climate_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a climate request under '/climate/<id>'.
void on_text_sensor_update(text_sensor::TextSensor *obj) override
struct @65::@66 __attribute__
const char * message
Definition component.cpp:38
LockState
Enum for all states a lock can be in.
Definition lock.h:25
std::string(WebServer *, void *) message_generator_t
Definition web_server.h:90
optional< T > parse_number(const char *str)
Parse an unsigned decimal number from a null-terminated string.
Definition helpers.h:578
Internal helper struct that is used to parse incoming URLs.
Definition web_server.h:39
const char * domain
Pointer to domain within URL, for example "sensor".
Definition web_server.h:40
const char * id
Pointer to id within URL, for example "living_room_fan".
Definition web_server.h:41
bool valid
Whether this match is valid.
Definition web_server.h:46
bool id_equals_entity(EntityBase *entity) const
Definition web_server.h:53
uint8_t domain_len
Length of domain string.
Definition web_server.h:43
uint8_t method_len
Length of method string.
Definition web_server.h:45
const char * method
Pointer to method within URL, for example "turn_on".
Definition web_server.h:42
bool domain_equals(const char *str) const
Definition web_server.h:49
uint8_t id_len
Length of id string.
Definition web_server.h:44
bool method_equals(const char *str) const
Definition web_server.h:60
const uint8_t ESPHOME_WEBSERVER_INDEX_HTML[] PROGMEM
Definition web_server.h:27
const size_t ESPHOME_WEBSERVER_INDEX_HTML_SIZE
message_generator_t * message_generator_
Definition web_server.h:4
bool operator==(const DeferredEvent &test) const
Definition web_server.h:9
const size_t ESPHOME_WEBSERVER_CSS_INCLUDE_SIZE
const size_t ESPHOME_WEBSERVER_JS_INCLUDE_SIZE
void * source_
Definition web_server.h:3
DeferredEvent(void *source, message_generator_t *message_generator)
Definition web_server.h:7