24#if USE_WEBSERVER_VERSION >= 2
25extern const uint8_t ESPHOME_WEBSERVER_INDEX_HTML[]
PROGMEM;
29#ifdef USE_WEBSERVER_CSS_INCLUDE
30extern const uint8_t ESPHOME_WEBSERVER_CSS_INCLUDE[]
PROGMEM;
34#ifdef USE_WEBSERVER_JS_INCLUDE
35extern const uint8_t ESPHOME_WEBSERVER_JS_INCLUDE[]
PROGMEM;
53#define DEFER_ACTION(capture, action) this->defer([capture]() mutable { action; })
73 bool domain_equals(
const char *str)
const {
return this->domain == str; }
74 bool method_equals(
const char *str)
const {
return this->method == str; }
78 bool domain_equals(
const __FlashStringHelper *str)
const {
return this->domain == str; }
79 bool method_equals(
const __FlashStringHelper *str)
const {
return this->method == str; }
87#ifdef USE_WEBSERVER_SORTING
109#if !defined(USE_ESP32) && defined(USE_ARDUINO)
124 struct DeferredEvent {
133 : source_(source), message_generator_(message_generator) {}
134 bool operator==(
const DeferredEvent &test)
const {
135 return (source_ == test.source_ && message_generator_ == test.message_generator_);
139 "DeferredEvent should have no padding");
143 using AsyncEventSource::handleRequest;
144 using AsyncEventSource::send;
202#if !defined(USE_ESP32) && defined(USE_ARDUINO)
209#if USE_WEBSERVER_VERSION == 1
225#ifdef USE_WEBSERVER_CSS_INCLUDE
233#ifdef USE_WEBSERVER_JS_INCLUDE
253#ifdef USE_WEBSERVER_ALLOWED_ORIGINS
272 void setup()
override;
273 void loop()
override;
278 void on_log(uint8_t level,
const char *tag,
const char *
message,
size_t message_len);
287#ifdef USE_WEBSERVER_CAPTIVE
298#ifdef USE_WEBSERVER_CSS_INCLUDE
303#ifdef USE_WEBSERVER_JS_INCLUDE
308#ifdef USE_WEBSERVER_PRIVATE_NETWORK_ACCESS
340#ifdef USE_BINARY_SENSOR
370#ifdef USE_TEXT_SENSOR
399#ifdef USE_DATETIME_DATE
408#ifdef USE_DATETIME_TIME
417#ifdef USE_DATETIME_DATETIME
473#ifdef USE_ALARM_CONTROL_PANEL
483#ifdef USE_WATER_HEATER
499#ifdef USE_RADIO_FREQUENCY
506#ifdef USE_MEDIA_PLAYER
532 bool canHandle(AsyncWebServerRequest *request)
const override;
538#ifdef USE_WEBSERVER_SORTING
540 void add_sorting_group(uint64_t group_id,
const std::string &group_name,
float weight);
563 template<
typename T,
typename Ret>
565 float scale = 1.0f) {
567 if (value.has_value()) {
568 (
call.*setter)(*value / scale);
573 template<
typename T,
typename Ret>
577 if (value.has_value()) {
578 (
call.*setter)(*value * scale);
584 template<
typename NumT,
typename T,
typename Ret>
587 if (value.has_value()) {
588 (
call.*setter)(*value);
593 template<
typename T,
typename Ret>
595 Ret (T::*setter)(
const char *,
size_t)) {
596 if (request->hasArg(param_name)) {
597 const auto &value = request->arg(param_name);
598 (
call.*setter)(value.c_str(), value.length());
606 template<
typename T,
typename Ret>
608 const auto ¶m_value = request->arg(param_name);
610 if (param_value.length() > 0) {
617 (
call.*setter)(
true);
619 (
call.*setter)(
false);
631#ifdef USE_WEBSERVER_CAPTIVE
636#if USE_WEBSERVER_VERSION == 1
640#ifdef USE_WEBSERVER_CSS_INCLUDE
643#ifdef USE_WEBSERVER_JS_INCLUDE
646#ifdef USE_WEBSERVER_ALLOWED_ORIGINS
667#ifdef USE_BINARY_SENSOR
677#ifdef USE_TEXT_SENSOR
687#ifdef USE_DATETIME_DATE
690#ifdef USE_DATETIME_TIME
693#ifdef USE_DATETIME_DATETIME
711#ifdef USE_ALARM_CONTROL_PANEL
719#ifdef USE_WATER_HEATER
725#ifdef USE_RADIO_FREQUENCY
733#ifdef USE_WEBSERVER_CAPTIVE
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 deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator)=delete
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, bool detail_all, 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, bool detail_all, message_generator_t *message_generator)
void on_client_disconnect_(DeferredUpdateEventSource *source)
void deferrable_send_state(void *source, const char *event_type, message_generator_t *message_generator)=delete
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 start_captive()
AP mode: DNS answers every name with the AP address and unknown URLs redirect to the interface.
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)
web_server_base::CaptiveDNS dns_
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 send_state_event_(T *obj, message_generator_t *generator)
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.
void handle_not_found_(AsyncWebServerRequest *request)
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.
WebServer * global_web_server
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; internal entities match only if include_internal is set Returns EntityMatchResu...
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".
bool include_internal
Whether internal entities may match, the web server's include_internal.
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