ESPHome 2026.1.1
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
38// Type for parameter names that can be stored in flash on ESP8266
39#ifdef USE_ESP8266
40using ParamNameType = const __FlashStringHelper *;
41#else
42using ParamNameType = const char *;
43#endif
44
50
52struct UrlMatch {
56#ifdef USE_DEVICES
58#endif
59 bool valid{false};
60
61 // Helper methods for string comparisons
62 bool domain_equals(const char *str) const { return this->domain == str; }
63 bool method_equals(const char *str) const { return this->method == str; }
64
65#ifdef USE_ESP8266
66 // Overloads for flash strings on ESP8266
67 bool domain_equals(const __FlashStringHelper *str) const { return this->domain == str; }
68 bool method_equals(const __FlashStringHelper *str) const { return this->method == str; }
69#endif
70
74};
75
76#ifdef USE_WEBSERVER_SORTING
78 float weight;
79 uint64_t group_id;
80};
81
83 std::string name;
84 float weight;
85};
86#endif
87
89
90/*
91 In order to defer updates in arduino mode, we need to create one AsyncEventSource per incoming request to /events.
92 This is because only minimal changes were made to the ESPAsyncWebServer lib_dep, it was undesirable to put deferred
93 update logic into that library. We need one deferred queue per connection so instead of one AsyncEventSource with
94 multiple clients, we have multiple event sources with one client each. This is slightly awkward which is why it's
95 implemented in a more straightforward way for ESP-IDF. Arduino platform will eventually go away and this workaround
96 can be forgotten.
97*/
98#if !defined(USE_ESP32) && defined(USE_ARDUINO)
99using message_generator_t = std::string(WebServer *, void *);
100
102class DeferredUpdateEventSource : public AsyncEventSource {
104
105 /*
106 This class holds a pointer to the source component that wants to publish a state event, and a pointer to a function
107 that will lazily generate that event. The two pointers allow dedup in the deferred queue if multiple publishes for
108 the same component are backed up, and take up only 8 bytes of memory. The entry in the deferred queue (a
109 std::vector) is the DeferredEvent instance itself (not a pointer to one elsewhere in heap) so still only 8 bytes per
110 entry (and no heap fragmentation). Even 100 backed up events (you'd have to have at least 100 sensors publishing
111 because of dedup) would take up only 0.8 kB.
112 */
113 struct DeferredEvent {
114 friend class DeferredUpdateEventSource;
115
116 protected:
117 void *source_;
119
120 public:
121 DeferredEvent(void *source, message_generator_t *message_generator)
122 : source_(source), message_generator_(message_generator) {}
123 bool operator==(const DeferredEvent &test) const {
124 return (source_ == test.source_ && message_generator_ == test.message_generator_);
125 }
126 } __attribute__((packed));
127
128 protected:
129 // surface a couple methods from the base class
130 using AsyncEventSource::handleRequest;
131 using AsyncEventSource::send;
132
134 // vector is used very specifically for its zero memory overhead even though items are popped from the front (memory
135 // footprint is more important than speed here)
136 std::vector<DeferredEvent> deferred_queue_;
139 static constexpr uint16_t MAX_CONSECUTIVE_SEND_FAILURES = 2500; // ~20 seconds at 125Hz loop rate
140
141 // helper for allowing only unique entries in the queue
142 void deq_push_back_with_dedup_(void *source, message_generator_t *message_generator);
143
145
146 public:
147 DeferredUpdateEventSource(WebServer *ws, const String &url)
148 : AsyncEventSource(url), entities_iterator_(ListEntitiesIterator(ws, this)), web_server_(ws) {}
149
150 void loop();
151
152 void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator);
153 void try_send_nodefer(const char *message, const char *event = nullptr, uint32_t id = 0, uint32_t reconnect = 0);
154};
155
156class DeferredUpdateEventSourceList : public std::list<DeferredUpdateEventSource *> {
157 protected:
160
161 public:
162 void loop();
163
164 void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator);
165 void try_send_nodefer(const char *message, const char *event = nullptr, uint32_t id = 0, uint32_t reconnect = 0);
166
167 void add_new_client(WebServer *ws, AsyncWebServerRequest *request);
168};
169#endif
170
180class WebServer : public Controller,
181 public Component,
182 public AsyncWebHandler
183#ifdef USE_LOGGER
184 ,
186#endif
187{
188#if !defined(USE_ESP32) && defined(USE_ARDUINO)
190#endif
191
192 public:
194
195#if USE_WEBSERVER_VERSION == 1
201 void set_css_url(const char *css_url);
202
208 void set_js_url(const char *js_url);
209#endif
210
211#ifdef USE_WEBSERVER_CSS_INCLUDE
216 void set_css_include(const char *css_include);
217#endif
218
219#ifdef USE_WEBSERVER_JS_INCLUDE
224 void set_js_include(const char *js_include);
225#endif
226
232 void set_include_internal(bool include_internal) { include_internal_ = include_internal; }
237 void set_expose_log(bool expose_log) { this->expose_log_ = expose_log; }
238
239 // ========== INTERNAL METHODS ==========
240 // (In most use cases you won't need these)
242 void setup() override;
243 void loop() override;
244
245 void dump_config() override;
246
247#ifdef USE_LOGGER
248 void on_log(uint8_t level, const char *tag, const char *message, size_t message_len) override;
249#endif
250
252 float get_setup_priority() const override;
253
255 void handle_index_request(AsyncWebServerRequest *request);
256
258 std::string get_config_json();
259
260#ifdef USE_WEBSERVER_CSS_INCLUDE
262 void handle_css_request(AsyncWebServerRequest *request);
263#endif
264
265#ifdef USE_WEBSERVER_JS_INCLUDE
267 void handle_js_request(AsyncWebServerRequest *request);
268#endif
269
270#ifdef USE_WEBSERVER_PRIVATE_NETWORK_ACCESS
271 // Handle Private Network Access CORS OPTIONS request
272 void handle_pna_cors_request(AsyncWebServerRequest *request);
273#endif
274
275#ifdef USE_SENSOR
276 void on_sensor_update(sensor::Sensor *obj) override;
278 void handle_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match);
279
280 static std::string sensor_state_json_generator(WebServer *web_server, void *source);
281 static std::string sensor_all_json_generator(WebServer *web_server, void *source);
282#endif
283
284#ifdef USE_SWITCH
285 void on_switch_update(switch_::Switch *obj) override;
286
288 void handle_switch_request(AsyncWebServerRequest *request, const UrlMatch &match);
289
290 static std::string switch_state_json_generator(WebServer *web_server, void *source);
291 static std::string switch_all_json_generator(WebServer *web_server, void *source);
292#endif
293
294#ifdef USE_BUTTON
296 void handle_button_request(AsyncWebServerRequest *request, const UrlMatch &match);
297
298 static std::string button_state_json_generator(WebServer *web_server, void *source);
299 static std::string button_all_json_generator(WebServer *web_server, void *source);
300#endif
301
302#ifdef USE_BINARY_SENSOR
304
306 void handle_binary_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match);
307
308 static std::string binary_sensor_state_json_generator(WebServer *web_server, void *source);
309 static std::string binary_sensor_all_json_generator(WebServer *web_server, void *source);
310#endif
311
312#ifdef USE_FAN
313 void on_fan_update(fan::Fan *obj) override;
314
316 void handle_fan_request(AsyncWebServerRequest *request, const UrlMatch &match);
317
318 static std::string fan_state_json_generator(WebServer *web_server, void *source);
319 static std::string fan_all_json_generator(WebServer *web_server, void *source);
320#endif
321
322#ifdef USE_LIGHT
323 void on_light_update(light::LightState *obj) override;
324
326 void handle_light_request(AsyncWebServerRequest *request, const UrlMatch &match);
327
328 static std::string light_state_json_generator(WebServer *web_server, void *source);
329 static std::string light_all_json_generator(WebServer *web_server, void *source);
330#endif
331
332#ifdef USE_TEXT_SENSOR
334
336 void handle_text_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match);
337
338 static std::string text_sensor_state_json_generator(WebServer *web_server, void *source);
339 static std::string text_sensor_all_json_generator(WebServer *web_server, void *source);
340#endif
341
342#ifdef USE_COVER
343 void on_cover_update(cover::Cover *obj) override;
344
346 void handle_cover_request(AsyncWebServerRequest *request, const UrlMatch &match);
347
348 static std::string cover_state_json_generator(WebServer *web_server, void *source);
349 static std::string cover_all_json_generator(WebServer *web_server, void *source);
350#endif
351
352#ifdef USE_NUMBER
353 void on_number_update(number::Number *obj) override;
355 void handle_number_request(AsyncWebServerRequest *request, const UrlMatch &match);
356
357 static std::string number_state_json_generator(WebServer *web_server, void *source);
358 static std::string number_all_json_generator(WebServer *web_server, void *source);
359#endif
360
361#ifdef USE_DATETIME_DATE
362 void on_date_update(datetime::DateEntity *obj) override;
364 void handle_date_request(AsyncWebServerRequest *request, const UrlMatch &match);
365
366 static std::string date_state_json_generator(WebServer *web_server, void *source);
367 static std::string date_all_json_generator(WebServer *web_server, void *source);
368#endif
369
370#ifdef USE_DATETIME_TIME
371 void on_time_update(datetime::TimeEntity *obj) override;
373 void handle_time_request(AsyncWebServerRequest *request, const UrlMatch &match);
374
375 static std::string time_state_json_generator(WebServer *web_server, void *source);
376 static std::string time_all_json_generator(WebServer *web_server, void *source);
377#endif
378
379#ifdef USE_DATETIME_DATETIME
382 void handle_datetime_request(AsyncWebServerRequest *request, const UrlMatch &match);
383
384 static std::string datetime_state_json_generator(WebServer *web_server, void *source);
385 static std::string datetime_all_json_generator(WebServer *web_server, void *source);
386#endif
387
388#ifdef USE_TEXT
389 void on_text_update(text::Text *obj) override;
391 void handle_text_request(AsyncWebServerRequest *request, const UrlMatch &match);
392
393 static std::string text_state_json_generator(WebServer *web_server, void *source);
394 static std::string text_all_json_generator(WebServer *web_server, void *source);
395#endif
396
397#ifdef USE_SELECT
398 void on_select_update(select::Select *obj) override;
400 void handle_select_request(AsyncWebServerRequest *request, const UrlMatch &match);
401
402 static std::string select_state_json_generator(WebServer *web_server, void *source);
403 static std::string select_all_json_generator(WebServer *web_server, void *source);
404#endif
405
406#ifdef USE_CLIMATE
407 void on_climate_update(climate::Climate *obj) override;
409 void handle_climate_request(AsyncWebServerRequest *request, const UrlMatch &match);
410
411 static std::string climate_state_json_generator(WebServer *web_server, void *source);
412 static std::string climate_all_json_generator(WebServer *web_server, void *source);
413#endif
414
415#ifdef USE_LOCK
416 void on_lock_update(lock::Lock *obj) override;
417
419 void handle_lock_request(AsyncWebServerRequest *request, const UrlMatch &match);
420
421 static std::string lock_state_json_generator(WebServer *web_server, void *source);
422 static std::string lock_all_json_generator(WebServer *web_server, void *source);
423#endif
424
425#ifdef USE_VALVE
426 void on_valve_update(valve::Valve *obj) override;
427
429 void handle_valve_request(AsyncWebServerRequest *request, const UrlMatch &match);
430
431 static std::string valve_state_json_generator(WebServer *web_server, void *source);
432 static std::string valve_all_json_generator(WebServer *web_server, void *source);
433#endif
434
435#ifdef USE_ALARM_CONTROL_PANEL
437
439 void handle_alarm_control_panel_request(AsyncWebServerRequest *request, const UrlMatch &match);
440
441 static std::string alarm_control_panel_state_json_generator(WebServer *web_server, void *source);
442 static std::string alarm_control_panel_all_json_generator(WebServer *web_server, void *source);
443#endif
444
445#ifdef USE_WATER_HEATER
447
449 void handle_water_heater_request(AsyncWebServerRequest *request, const UrlMatch &match);
450
451 static std::string water_heater_state_json_generator(WebServer *web_server, void *source);
452 static std::string water_heater_all_json_generator(WebServer *web_server, void *source);
453#endif
454
455#ifdef USE_EVENT
456 void on_event(event::Event *obj) override;
457
458 static std::string event_state_json_generator(WebServer *web_server, void *source);
459 static std::string event_all_json_generator(WebServer *web_server, void *source);
460
462 void handle_event_request(AsyncWebServerRequest *request, const UrlMatch &match);
463#endif
464
465#ifdef USE_UPDATE
466 void on_update(update::UpdateEntity *obj) override;
467
469 void handle_update_request(AsyncWebServerRequest *request, const UrlMatch &match);
470
471 static std::string update_state_json_generator(WebServer *web_server, void *source);
472 static std::string update_all_json_generator(WebServer *web_server, void *source);
473#endif
474
476 bool canHandle(AsyncWebServerRequest *request) const override;
478 void handleRequest(AsyncWebServerRequest *request) override;
480 bool isRequestHandlerTrivial() const override; // NOLINT(readability-identifier-naming)
481
482#ifdef USE_WEBSERVER_SORTING
483 void add_entity_config(EntityBase *entity, float weight, uint64_t group);
484 void add_sorting_group(uint64_t group_id, const std::string &group_name, float weight);
485
486 std::map<EntityBase *, SortingComponents> sorting_entitys_;
487 std::map<uint64_t, SortingGroup> sorting_groups_;
488#endif
489
490 bool include_internal_{false};
491
492 protected:
493 void add_sorting_info_(JsonObject &root, EntityBase *entity);
494
495#ifdef USE_LIGHT
496 // Helper to parse and apply a float parameter with optional scaling
497 template<typename T, typename Ret>
498 void parse_light_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret (T::*setter)(float),
499 float scale = 1.0f) {
500 if (request->hasParam(param_name)) {
501 auto value = parse_number<float>(request->getParam(param_name)->value().c_str());
502 if (value.has_value()) {
503 (call.*setter)(*value / scale);
504 }
505 }
506 }
507
508 // Helper to parse and apply a uint32_t parameter with optional scaling
509 template<typename T, typename Ret>
510 void parse_light_param_uint_(AsyncWebServerRequest *request, ParamNameType param_name, T &call,
511 Ret (T::*setter)(uint32_t), uint32_t scale = 1) {
512 if (request->hasParam(param_name)) {
513 auto value = parse_number<uint32_t>(request->getParam(param_name)->value().c_str());
514 if (value.has_value()) {
515 (call.*setter)(*value * scale);
516 }
517 }
518 }
519#endif
520
521 // Generic helper to parse and apply a float parameter
522 template<typename T, typename Ret>
523 void parse_float_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret (T::*setter)(float)) {
524 if (request->hasParam(param_name)) {
525 auto value = parse_number<float>(request->getParam(param_name)->value().c_str());
526 if (value.has_value()) {
527 (call.*setter)(*value);
528 }
529 }
530 }
531
532 // Generic helper to parse and apply an int parameter
533 template<typename T, typename Ret>
534 void parse_int_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret (T::*setter)(int)) {
535 if (request->hasParam(param_name)) {
536 auto value = parse_number<int>(request->getParam(param_name)->value().c_str());
537 if (value.has_value()) {
538 (call.*setter)(*value);
539 }
540 }
541 }
542
543 // Generic helper to parse and apply a string parameter
544 template<typename T, typename Ret>
545 void parse_string_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call,
546 Ret (T::*setter)(const std::string &)) {
547 if (request->hasParam(param_name)) {
548 // .c_str() is required for Arduino framework where value() returns Arduino String instead of std::string
549 std::string value = request->getParam(param_name)->value().c_str(); // NOLINT(readability-redundant-string-cstr)
550 (call.*setter)(value);
551 }
552 }
553
554 // Generic helper to parse and apply a bool parameter
555 // Accepts: "on", "true", "1" (case-insensitive) as true
556 // Accepts: "off", "false", "0" (case-insensitive) as false
557 // Invalid values are ignored (setter not called)
558 template<typename T, typename Ret>
559 void parse_bool_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret (T::*setter)(bool)) {
560 if (request->hasParam(param_name)) {
561 auto param_value = request->getParam(param_name)->value();
562 // First check on/off (default), then true/false (custom)
563 auto val = parse_on_off(param_value.c_str());
564 if (val == PARSE_NONE) {
565 val = parse_on_off(param_value.c_str(), "true", "false");
566 }
567 if (val == PARSE_ON || param_value == "1") {
568 (call.*setter)(true);
569 } else if (val == PARSE_OFF || param_value == "0") {
570 (call.*setter)(false);
571 }
572 // PARSE_NONE/PARSE_TOGGLE: ignore invalid values
573 }
574 }
575
577#ifdef USE_ESP32
578 AsyncEventSource events_{"/events", this};
579#elif USE_ARDUINO
581#endif
582
583#if USE_WEBSERVER_VERSION == 1
584 const char *css_url_{nullptr};
585 const char *js_url_{nullptr};
586#endif
587#ifdef USE_WEBSERVER_CSS_INCLUDE
588 const char *css_include_{nullptr};
589#endif
590#ifdef USE_WEBSERVER_JS_INCLUDE
591 const char *js_include_{nullptr};
592#endif
593 bool expose_log_{true};
594
595 private:
596#ifdef USE_SENSOR
597 std::string sensor_json_(sensor::Sensor *obj, float value, JsonDetail start_config);
598#endif
599#ifdef USE_SWITCH
600 std::string switch_json_(switch_::Switch *obj, bool value, JsonDetail start_config);
601#endif
602#ifdef USE_BUTTON
603 std::string button_json_(button::Button *obj, JsonDetail start_config);
604#endif
605#ifdef USE_BINARY_SENSOR
606 std::string binary_sensor_json_(binary_sensor::BinarySensor *obj, bool value, JsonDetail start_config);
607#endif
608#ifdef USE_FAN
609 std::string fan_json_(fan::Fan *obj, JsonDetail start_config);
610#endif
611#ifdef USE_LIGHT
612 std::string light_json_(light::LightState *obj, JsonDetail start_config);
613#endif
614#ifdef USE_TEXT_SENSOR
615 std::string text_sensor_json_(text_sensor::TextSensor *obj, const std::string &value, JsonDetail start_config);
616#endif
617#ifdef USE_COVER
618 std::string cover_json_(cover::Cover *obj, JsonDetail start_config);
619#endif
620#ifdef USE_NUMBER
621 std::string number_json_(number::Number *obj, float value, JsonDetail start_config);
622#endif
623#ifdef USE_DATETIME_DATE
624 std::string date_json_(datetime::DateEntity *obj, JsonDetail start_config);
625#endif
626#ifdef USE_DATETIME_TIME
627 std::string time_json_(datetime::TimeEntity *obj, JsonDetail start_config);
628#endif
629#ifdef USE_DATETIME_DATETIME
630 std::string datetime_json_(datetime::DateTimeEntity *obj, JsonDetail start_config);
631#endif
632#ifdef USE_TEXT
633 std::string text_json_(text::Text *obj, const std::string &value, JsonDetail start_config);
634#endif
635#ifdef USE_SELECT
636 std::string select_json_(select::Select *obj, StringRef value, JsonDetail start_config);
637#endif
638#ifdef USE_CLIMATE
639 std::string climate_json_(climate::Climate *obj, JsonDetail start_config);
640#endif
641#ifdef USE_LOCK
642 std::string lock_json_(lock::Lock *obj, lock::LockState value, JsonDetail start_config);
643#endif
644#ifdef USE_VALVE
645 std::string valve_json_(valve::Valve *obj, JsonDetail start_config);
646#endif
647#ifdef USE_ALARM_CONTROL_PANEL
648 std::string alarm_control_panel_json_(alarm_control_panel::AlarmControlPanel *obj,
650#endif
651#ifdef USE_EVENT
652 std::string event_json_(event::Event *obj, StringRef event_type, JsonDetail start_config);
653#endif
654#ifdef USE_WATER_HEATER
655 std::string water_heater_json_(water_heater::WaterHeater *obj, JsonDetail start_config);
656#endif
657#ifdef USE_UPDATE
658 std::string update_json_(update::UpdateEntity *obj, JsonDetail start_config);
659#endif
660};
661
662} // namespace esphome::web_server
663#endif
StringRef is a reference to a string owned by something else.
Definition string_ref.h:26
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:182
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:62
Base-class for all numbers.
Definition number.h:29
Base-class for all selects.
Definition select.h:31
Base-class for all sensors.
Definition sensor.h:42
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:147
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:139
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:136
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:187
static std::string water_heater_state_json_generator(WebServer *web_server, void *source)
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 on_water_heater_update(water_heater::WaterHeater *obj) override
void set_expose_log(bool expose_log)
Set whether or not the webserver should expose the Log.
Definition web_server.h:237
static std::string water_heater_all_json_generator(WebServer *web_server, void *source)
std::string get_config_json()
Return the webserver configuration as JSON.
std::map< EntityBase *, SortingComponents > sorting_entitys_
Definition web_server.h:486
static std::string binary_sensor_state_json_generator(WebServer *web_server, void *source)
void parse_string_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(const std::string &))
Definition web_server.h:545
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 parse_float_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(float))
Definition web_server.h:523
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)
void handle_water_heater_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a water_heater request under '/water_heater/<id>/<mode/set>'.
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 on_log(uint8_t level, const char *tag, const char *message, size_t message_len) override
void parse_light_param_uint_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(uint32_t), uint32_t scale=1)
Definition web_server.h:510
DeferredUpdateEventSourceList events_
Definition web_server.h:580
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:232
void parse_light_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(float), float scale=1.0f)
Definition web_server.h:498
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 parse_int_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(int))
Definition web_server.h:534
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:576
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 parse_bool_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(bool))
Definition web_server.h:559
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:487
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 handle_datetime_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a datetime request under '/datetime/<id>'.
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 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
mopeka_std_values val[4]
LockState
Enum for all states a lock can be in.
Definition lock.h:25
const __FlashStringHelper * ParamNameType
Definition web_server.h:40
std::string(WebServer *, void *) message_generator_t
Definition web_server.h:99
ParseOnOffState parse_on_off(const char *str, const char *on, const char *off)
Parse a string that contains either on, off or toggle.
Definition helpers.cpp:419
optional< T > parse_number(const char *str)
Parse an unsigned decimal number from a null-terminated string.
Definition helpers.h:640
@ PARSE_ON
Definition helpers.h:1088
@ PARSE_OFF
Definition helpers.h:1089
@ PARSE_NONE
Definition helpers.h:1087
Result of matching a URL against an entity.
Definition web_server.h:46
bool matched
True if entity matched the URL.
Definition web_server.h:47
bool action_is_empty
True if no action/method segment in URL.
Definition web_server.h:48
Internal helper struct that is used to parse incoming URLs.
Definition web_server.h:52
StringRef device_name
Device name within URL, empty for main device.
Definition web_server.h:57
bool valid
Whether this match is valid.
Definition web_server.h:59
bool domain_equals(const __FlashStringHelper *str) const
Definition web_server.h:67
EntityMatchResult match_entity(EntityBase *entity) const
Match entity by name first, then fall back to object_id with deprecation warning Returns EntityMatchR...
StringRef method
Method within URL, for example "turn_on".
Definition web_server.h:55
bool domain_equals(const char *str) const
Definition web_server.h:62
bool method_equals(const __FlashStringHelper *str) const
Definition web_server.h:68
bool method_equals(const char *str) const
Definition web_server.h:63
StringRef domain
Domain within URL, for example "sensor".
Definition web_server.h:53
StringRef id
Entity name/id within URL, for example "Temperature".
Definition web_server.h:54
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