23#if USE_WEBSERVER_VERSION >= 2
24extern const uint8_t ESPHOME_WEBSERVER_INDEX_HTML[]
PROGMEM;
28#ifdef USE_WEBSERVER_CSS_INCLUDE
29extern const uint8_t ESPHOME_WEBSERVER_CSS_INCLUDE[]
PROGMEM;
33#ifdef USE_WEBSERVER_JS_INCLUDE
34extern const uint8_t ESPHOME_WEBSERVER_JS_INCLUDE[]
PROGMEM;
52#define DEFER_ACTION(capture, action) this->defer([capture]() mutable { action; })
71 bool domain_equals(
const char *str)
const {
return this->domain == str; }
72 bool method_equals(
const char *str)
const {
return this->method == str; }
76 bool domain_equals(
const __FlashStringHelper *str)
const {
return this->domain == str; }
77 bool method_equals(
const __FlashStringHelper *str)
const {
return this->method == str; }
85#ifdef USE_WEBSERVER_SORTING
107#if !defined(USE_ESP32) && defined(USE_ARDUINO)
122 struct DeferredEvent {
131 : source_(source), message_generator_(message_generator) {}
132 bool operator==(
const DeferredEvent &test)
const {
133 return (source_ == test.source_ && message_generator_ == test.message_generator_);
137 "DeferredEvent should have no padding");
141 using AsyncEventSource::handleRequest;
142 using AsyncEventSource::send;
195#if !defined(USE_ESP32) && defined(USE_ARDUINO)
202#if USE_WEBSERVER_VERSION == 1
218#ifdef USE_WEBSERVER_CSS_INCLUDE
226#ifdef USE_WEBSERVER_JS_INCLUDE
246#ifdef USE_WEBSERVER_ALLOWED_ORIGINS
265 void setup()
override;
266 void loop()
override;
271 void on_log(uint8_t level,
const char *tag,
const char *
message,
size_t message_len);
283#ifdef USE_WEBSERVER_CSS_INCLUDE
288#ifdef USE_WEBSERVER_JS_INCLUDE
293#ifdef USE_WEBSERVER_PRIVATE_NETWORK_ACCESS
325#ifdef USE_BINARY_SENSOR
355#ifdef USE_TEXT_SENSOR
384#ifdef USE_DATETIME_DATE
393#ifdef USE_DATETIME_TIME
402#ifdef USE_DATETIME_DATETIME
458#ifdef USE_ALARM_CONTROL_PANEL
468#ifdef USE_WATER_HEATER
484#ifdef USE_RADIO_FREQUENCY
491#ifdef USE_MEDIA_PLAYER
517 bool canHandle(AsyncWebServerRequest *request)
const override;
523#ifdef USE_WEBSERVER_SORTING
525 void add_sorting_group(uint64_t group_id,
const std::string &group_name,
float weight);
541 template<
typename T,
typename Ret>
543 float scale = 1.0f) {
545 if (value.has_value()) {
546 (
call.*setter)(*value / scale);
551 template<
typename T,
typename Ret>
555 if (value.has_value()) {
556 (
call.*setter)(*value * scale);
562 template<
typename NumT,
typename T,
typename Ret>
565 if (value.has_value()) {
566 (
call.*setter)(*value);
571 template<
typename T,
typename Ret>
573 Ret (T::*setter)(
const char *,
size_t)) {
574 if (request->hasArg(param_name)) {
575 const auto &value = request->arg(param_name);
576 (
call.*setter)(value.c_str(), value.length());
584 template<
typename T,
typename Ret>
586 const auto ¶m_value = request->arg(param_name);
588 if (param_value.length() > 0) {
595 (
call.*setter)(
true);
597 (
call.*setter)(
false);
610#if USE_WEBSERVER_VERSION == 1
614#ifdef USE_WEBSERVER_CSS_INCLUDE
617#ifdef USE_WEBSERVER_JS_INCLUDE
620#ifdef USE_WEBSERVER_ALLOWED_ORIGINS
641#ifdef USE_BINARY_SENSOR
651#ifdef USE_TEXT_SENSOR
661#ifdef USE_DATETIME_DATE
664#ifdef USE_DATETIME_TIME
667#ifdef USE_DATETIME_DATETIME
685#ifdef USE_ALARM_CONTROL_PANEL
693#ifdef USE_WATER_HEATER
699#ifdef USE_RADIO_FREQUENCY
StringRef is a reference to a string owned by something else.
static constexpr StringRef from_lit(const CharT(&s)[N])
Base class for all binary_sensor-type classes.
ClimateDevice - This is the base class for all climate integrations.
Base class for all cover devices.
Infrared - Base class for infrared remote control implementations.
Builder class for creating JSON documents without lambdas.
Buffer for JSON serialization that uses stack allocation for small payloads.
This class represents the communication layer between the front-end MQTT layer and the hardware outpu...
Base class for all locks.
Base-class for all numbers.
RadioFrequency - Base class for radio frequency implementations.
Base-class for all selects.
Base-class for all sensors.
Base class for all switches.
Base-class for all text inputs.
Base class for all valve devices.
void process_deferred_queue_()
DeferredUpdateEventSource(WebServer *ws, const String &url)
static constexpr uint16_t MAX_CONSECUTIVE_SEND_FAILURES
uint16_t consecutive_send_failures_
void deq_push_back_with_dedup_(void *source, message_generator_t *message_generator)
void try_send_nodefer(const char *message, size_t message_len, const char *event=nullptr, uint32_t id=0, uint32_t reconnect=0)
void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator)
ListEntitiesIterator entities_iterator_
std::vector< DeferredEvent > deferred_queue_
void on_client_connect_(DeferredUpdateEventSource *source)
void try_send_nodefer(const char *message, size_t message_len, const char *event=nullptr, uint32_t id=0, uint32_t reconnect=0)
void add_new_client(WebServer *ws, AsyncWebServerRequest *request)
void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator)
void on_client_disconnect_(DeferredUpdateEventSource *source)
bool loop()
Returns true if there are event sources remaining (including pending cleanup).
This class allows users to create a web server with their ESP nodes.
static void alarm_control_panel_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void setup() override
Setup the internal web server and register handlers.
void set_expose_log(bool expose_log)
Set whether or not the webserver should expose the Log.
static void text_sensor_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
json::SerializationBuffer get_config_json()
Return the webserver configuration as JSON.
std::map< EntityBase *, SortingComponents > sorting_entitys_
static void light_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void on_light_update(light::LightState *obj)
void set_allowed_origins(const char *const *origins)
Set the origins that browsers are allowed to make cross-origin requests from.
static void date_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void on_text_sensor_update(text_sensor::TextSensor *obj)
void on_lock_update(lock::Lock *obj)
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>'.
void on_date_update(datetime::DateEntity *obj)
static void event_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void on_log(uint8_t level, const char *tag, const char *message, size_t message_len)
static void cover_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void handle_water_heater_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a water_heater request under '/water_heater/<id>/<mode/set>'.
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>'.
static void datetime_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void parse_light_param_uint_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(uint32_t), uint32_t scale=1)
static void sensor_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void dump_config() override
DeferredUpdateEventSourceList events_
static void infrared_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void switch_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void handle_button_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a button request under '/button/<id>/press'.
void on_update(update::UpdateEntity *obj)
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.
void handle_radio_frequency_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a radio frequency request under '/radio_frequency/<id>/transmit'.
static void update_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void parse_light_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(float), float scale=1.0f)
void handle_css_request(AsyncWebServerRequest *request)
Handle included css request under '/0.css'.
static void binary_sensor_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void water_heater_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void datetime_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void date_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void select_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void time_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void on_binary_sensor_update(binary_sensor::BinarySensor *obj)
void on_cover_update(cover::Cover *obj)
static void number_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void on_fan_update(fan::Fan *obj)
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 void update_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void handle_text_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a text input request under '/text/<id>'.
void on_climate_update(climate::Climate *obj)
void handle_cover_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a cover request under '/cover/<id>/<open/close/stop/set>'.
void on_time_update(datetime::TimeEntity *obj)
static void event_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void switch_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void text_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void valve_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
web_server_base::WebServerBase * base_
void on_event(event::Event *obj)
void handle_lock_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a lock request under '/lock/<id>/</lock/unlock/open>'.
void on_water_heater_update(water_heater::WaterHeater *obj)
void on_number_update(number::Number *obj)
static void fan_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void handle_text_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a text sensor request under '/text_sensor/<id>'.
static void select_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void parse_bool_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(bool))
bool is_request_origin_allowed_(AsyncWebServerRequest *request, const std::string &origin)
Check whether the given request Origin is permitted.
void handle_date_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a date request under '/date/<id>'.
void set_js_url(const char *js_url)
Set the URL to the script that's embedded in the index page.
void handle_infrared_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle an infrared request under '/infrared/<id>/transmit'.
void handle_sensor_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a sensor request under '/sensor/<id>'.
void handle_number_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a number request under '/number/<id>'.
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 on_select_update(select::Select *obj)
void on_sensor_update(sensor::Sensor *obj)
void set_js_include(const char *js_include)
Set local path to the script that's embedded in the index page.
static void text_sensor_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void radio_frequency_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void time_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void handleRequest(AsyncWebServerRequest *request) override
Override the web handler's handleRequest method.
void handle_fan_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a fan request under '/fan/<id>/</turn_on/turn_off/toggle>'.
static void button_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void parse_cstr_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(const char *, size_t))
static void alarm_control_panel_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void number_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void on_switch_update(switch_::Switch *obj)
static void light_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
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 void lock_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void handle_time_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a time request under '/time/<id>'.
std::map< uint64_t, SortingGroup > sorting_groups_
void set_css_include(const char *css_include)
Set local path to the script that's embedded in the index page.
static void fan_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
bool canHandle(AsyncWebServerRequest *request) const override
Override the web handler's canHandle method.
void on_valve_update(valve::Valve *obj)
static void water_heater_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void on_datetime_update(datetime::DateTimeEntity *obj)
void handle_pna_cors_request(AsyncWebServerRequest *request)
void on_alarm_control_panel_update(alarm_control_panel::AlarmControlPanel *obj)
void handle_datetime_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a datetime request under '/datetime/<id>'.
void on_text_update(text::Text *obj)
void handle_alarm_control_panel_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a alarm_control_panel request under '/alarm_control_panel/<id>'.
const char *const * allowed_origins_
float get_setup_priority() const override
MQTT setup priority.
static void text_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void sensor_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void parse_num_param_(AsyncWebServerRequest *request, ParamNameType param_name, T &call, Ret(T::*setter)(NumT))
static void climate_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void handle_update_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a update request under '/update/<id>'.
void on_media_player_update(media_player::MediaPlayer *)
static void lock_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void add_sorting_group(uint64_t group_id, const std::string &group_name, float weight)
static void valve_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void cover_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
static void binary_sensor_all_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
const char * css_include_
static void climate_state_json_generator(WebServer *web_server, void *source, json::JsonBuilder &builder)
void handle_climate_request(AsyncWebServerRequest *request, const UrlMatch &match)
Handle a climate request under '/climate/<id>'.
const LogString * message
LockState
Enum for all states a lock can be in.
constexpr size_t LOG_EVENT_MAX_LEN
void(WebServer *, void *, json::JsonBuilder &) message_generator_t
ParseOnOffState parse_on_off(const char *str, const char *on, const char *off)
Parse a string that contains either on, off or toggle.
optional< T > parse_number(const char *str)
Parse an unsigned decimal number from a null-terminated string.
const __FlashStringHelper * ProgmemStr
Result of matching a URL against an entity.
bool matched
True if entity matched the URL.
bool action_is_empty
True if no action/method segment in URL.
Internal helper struct that is used to parse incoming URLs.
StringRef device_name
Device name within URL, empty for main device.
bool valid
Whether this match is valid.
bool domain_equals(const __FlashStringHelper *str) const
EntityMatchResult match_entity(EntityBase *entity) const
Match entity by name Returns EntityMatchResult with match status and whether action segment is empty.
StringRef method
Method within URL, for example "turn_on".
bool domain_equals(const char *str) const
bool method_equals(const __FlashStringHelper *str) const
bool method_equals(const char *str) const
StringRef domain
Domain within URL, for example "sensor".
StringRef id
Entity name/id within URL, for example "Temperature".
const uint8_t ESPHOME_WEBSERVER_INDEX_HTML[] PROGMEM
const size_t ESPHOME_WEBSERVER_INDEX_HTML_SIZE
const size_t ESPHOME_WEBSERVER_CSS_INCLUDE_SIZE
const size_t ESPHOME_WEBSERVER_JS_INCLUDE_SIZE