mirror of
https://github.com/esphome/esphome.git
synced 2025-10-07 20:33:47 +01:00
always use idf webserver on esp32
This commit is contained in:
@@ -9,13 +9,12 @@
|
|||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace web_server {
|
namespace web_server {
|
||||||
|
|
||||||
#ifdef USE_ARDUINO
|
#ifdef USE_ESP32
|
||||||
|
ListEntitiesIterator::ListEntitiesIterator(const WebServer *ws, AsyncEventSource *es) : web_server_(ws), events_(es) {}
|
||||||
|
#elif USE_ARDUINO
|
||||||
ListEntitiesIterator::ListEntitiesIterator(const WebServer *ws, DeferredUpdateEventSource *es)
|
ListEntitiesIterator::ListEntitiesIterator(const WebServer *ws, DeferredUpdateEventSource *es)
|
||||||
: web_server_(ws), events_(es) {}
|
: web_server_(ws), events_(es) {}
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_ESP_IDF
|
|
||||||
ListEntitiesIterator::ListEntitiesIterator(const WebServer *ws, AsyncEventSource *es) : web_server_(ws), events_(es) {}
|
|
||||||
#endif
|
|
||||||
ListEntitiesIterator::~ListEntitiesIterator() {}
|
ListEntitiesIterator::~ListEntitiesIterator() {}
|
||||||
|
|
||||||
#ifdef USE_BINARY_SENSOR
|
#ifdef USE_BINARY_SENSOR
|
||||||
|
@@ -5,25 +5,24 @@
|
|||||||
#include "esphome/core/component.h"
|
#include "esphome/core/component.h"
|
||||||
#include "esphome/core/component_iterator.h"
|
#include "esphome/core/component_iterator.h"
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
#ifdef USE_ESP_IDF
|
#ifdef USE_ESP32
|
||||||
namespace web_server_idf {
|
namespace web_server_idf {
|
||||||
class AsyncEventSource;
|
class AsyncEventSource;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
namespace web_server {
|
namespace web_server {
|
||||||
|
|
||||||
#ifdef USE_ARDUINO
|
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||||
class DeferredUpdateEventSource;
|
class DeferredUpdateEventSource;
|
||||||
#endif
|
#endif
|
||||||
class WebServer;
|
class WebServer;
|
||||||
|
|
||||||
class ListEntitiesIterator : public ComponentIterator {
|
class ListEntitiesIterator : public ComponentIterator {
|
||||||
public:
|
public:
|
||||||
#ifdef USE_ARDUINO
|
#ifdef USE_ESP32
|
||||||
ListEntitiesIterator(const WebServer *ws, DeferredUpdateEventSource *es);
|
|
||||||
#endif
|
|
||||||
#ifdef USE_ESP_IDF
|
|
||||||
ListEntitiesIterator(const WebServer *ws, esphome::web_server_idf::AsyncEventSource *es);
|
ListEntitiesIterator(const WebServer *ws, esphome::web_server_idf::AsyncEventSource *es);
|
||||||
|
#elif defined(USE_ARDUINO)
|
||||||
|
ListEntitiesIterator(const WebServer *ws, DeferredUpdateEventSource *es);
|
||||||
#endif
|
#endif
|
||||||
virtual ~ListEntitiesIterator();
|
virtual ~ListEntitiesIterator();
|
||||||
#ifdef USE_BINARY_SENSOR
|
#ifdef USE_BINARY_SENSOR
|
||||||
@@ -90,11 +89,10 @@ class ListEntitiesIterator : public ComponentIterator {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
const WebServer *web_server_;
|
const WebServer *web_server_;
|
||||||
#ifdef USE_ARDUINO
|
#ifdef USE_ESP32
|
||||||
DeferredUpdateEventSource *events_;
|
|
||||||
#endif
|
|
||||||
#ifdef USE_ESP_IDF
|
|
||||||
esphome::web_server_idf::AsyncEventSource *events_;
|
esphome::web_server_idf::AsyncEventSource *events_;
|
||||||
|
#elif USE_ARDUINO
|
||||||
|
DeferredUpdateEventSource *events_;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -29,5 +29,5 @@ async def to_code(config):
|
|||||||
await ota_to_code(var, config)
|
await ota_to_code(var, config)
|
||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
cg.add_define("USE_WEBSERVER_OTA")
|
cg.add_define("USE_WEBSERVER_OTA")
|
||||||
if CORE.using_esp_idf:
|
if CORE.is_esp32:
|
||||||
add_idf_component(name="zorxx/multipart-parser", ref="1.0.1")
|
add_idf_component(name="zorxx/multipart-parser", ref="1.0.1")
|
||||||
|
@@ -17,6 +17,12 @@
|
|||||||
#endif
|
#endif
|
||||||
#endif // USE_ARDUINO
|
#endif // USE_ARDUINO
|
||||||
|
|
||||||
|
#if USE_ESP32
|
||||||
|
using PlatformString = std::string;
|
||||||
|
#elif USE_ARDUINO
|
||||||
|
using PlatformString = String;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace web_server {
|
namespace web_server {
|
||||||
|
|
||||||
@@ -26,8 +32,8 @@ class OTARequestHandler : public AsyncWebHandler {
|
|||||||
public:
|
public:
|
||||||
OTARequestHandler(WebServerOTAComponent *parent) : parent_(parent) {}
|
OTARequestHandler(WebServerOTAComponent *parent) : parent_(parent) {}
|
||||||
void handleRequest(AsyncWebServerRequest *request) override;
|
void handleRequest(AsyncWebServerRequest *request) override;
|
||||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
void handleUpload(AsyncWebServerRequest *request, const PlatformString &filename, size_t index, uint8_t *data,
|
||||||
bool final) override;
|
size_t len, bool final) override;
|
||||||
bool canHandle(AsyncWebServerRequest *request) const override {
|
bool canHandle(AsyncWebServerRequest *request) const override {
|
||||||
// Check if this is an OTA update request
|
// Check if this is an OTA update request
|
||||||
bool is_ota_request = request->url() == "/update" && request->method() == HTTP_POST;
|
bool is_ota_request = request->url() == "/update" && request->method() == HTTP_POST;
|
||||||
@@ -100,7 +106,7 @@ void OTARequestHandler::ota_init_(const char *filename) {
|
|||||||
this->ota_success_ = false;
|
this->ota_success_ = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OTARequestHandler::handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index,
|
void OTARequestHandler::handleUpload(AsyncWebServerRequest *request, const PlatformString &filename, size_t index,
|
||||||
uint8_t *data, size_t len, bool final) {
|
uint8_t *data, size_t len, bool final) {
|
||||||
ota::OTAResponseTypes error_code = ota::OTA_RESPONSE_OK;
|
ota::OTAResponseTypes error_code = ota::OTA_RESPONSE_OK;
|
||||||
|
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
#include "esphome/core/util.h"
|
#include "esphome/core/util.h"
|
||||||
|
|
||||||
#ifdef USE_ARDUINO
|
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||||
#include "StreamString.h"
|
#include "StreamString.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ static UrlMatch match_url(const char *url_ptr, size_t url_len, bool only_domain)
|
|||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_ARDUINO
|
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||||
// helper for allowing only unique entries in the queue
|
// helper for allowing only unique entries in the queue
|
||||||
void DeferredUpdateEventSource::deq_push_back_with_dedup_(void *source, message_generator_t *message_generator) {
|
void DeferredUpdateEventSource::deq_push_back_with_dedup_(void *source, message_generator_t *message_generator) {
|
||||||
DeferredEvent item(source, message_generator);
|
DeferredEvent item(source, message_generator);
|
||||||
@@ -297,7 +297,7 @@ void WebServer::setup() {
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_ESP_IDF
|
#ifdef USE_ESP32
|
||||||
this->base_->add_handler(&this->events_);
|
this->base_->add_handler(&this->events_);
|
||||||
#endif
|
#endif
|
||||||
this->base_->add_handler(this);
|
this->base_->add_handler(this);
|
||||||
@@ -1771,7 +1771,7 @@ bool WebServer::canHandle(AsyncWebServerRequest *request) const {
|
|||||||
// Static URL checks
|
// Static URL checks
|
||||||
static const char *const STATIC_URLS[] = {
|
static const char *const STATIC_URLS[] = {
|
||||||
"/",
|
"/",
|
||||||
#ifdef USE_ARDUINO
|
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||||
"/events",
|
"/events",
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||||
@@ -1899,7 +1899,7 @@ void WebServer::handleRequest(AsyncWebServerRequest *request) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_ARDUINO
|
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||||
if (url == "/events") {
|
if (url == "/events") {
|
||||||
this->events_.add_new_client(this, request);
|
this->events_.add_new_client(this, request);
|
||||||
return;
|
return;
|
||||||
|
@@ -81,7 +81,7 @@ enum JsonDetail { DETAIL_ALL, DETAIL_STATE };
|
|||||||
implemented in a more straightforward way for ESP-IDF. Arduino platform will eventually go away and this workaround
|
implemented in a more straightforward way for ESP-IDF. Arduino platform will eventually go away and this workaround
|
||||||
can be forgotten.
|
can be forgotten.
|
||||||
*/
|
*/
|
||||||
#ifdef USE_ARDUINO
|
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||||
using message_generator_t = std::string(WebServer *, void *);
|
using message_generator_t = std::string(WebServer *, void *);
|
||||||
|
|
||||||
class DeferredUpdateEventSourceList;
|
class DeferredUpdateEventSourceList;
|
||||||
@@ -164,7 +164,7 @@ class DeferredUpdateEventSourceList : public std::list<DeferredUpdateEventSource
|
|||||||
* can be found under https://esphome.io/web-api/index.html.
|
* can be found under https://esphome.io/web-api/index.html.
|
||||||
*/
|
*/
|
||||||
class WebServer : public Controller, public Component, public AsyncWebHandler {
|
class WebServer : public Controller, public Component, public AsyncWebHandler {
|
||||||
#ifdef USE_ARDUINO
|
#if !defined(USE_ESP32) && defined(USE_ARDUINO)
|
||||||
friend class DeferredUpdateEventSourceList;
|
friend class DeferredUpdateEventSourceList;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -559,11 +559,10 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
web_server_base::WebServerBase *base_;
|
web_server_base::WebServerBase *base_;
|
||||||
#ifdef USE_ARDUINO
|
#ifdef USE_ESP32
|
||||||
DeferredUpdateEventSourceList events_;
|
|
||||||
#endif
|
|
||||||
#ifdef USE_ESP_IDF
|
|
||||||
AsyncEventSource events_{"/events", this};
|
AsyncEventSource events_{"/events", this};
|
||||||
|
#elif USE_ARDUINO
|
||||||
|
DeferredUpdateEventSourceList events_;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if USE_WEBSERVER_VERSION == 1
|
#if USE_WEBSERVER_VERSION == 1
|
||||||
|
@@ -9,10 +9,10 @@ DEPENDENCIES = ["network"]
|
|||||||
|
|
||||||
|
|
||||||
def AUTO_LOAD():
|
def AUTO_LOAD():
|
||||||
|
if CORE.is_esp32:
|
||||||
|
return ["web_server_idf"]
|
||||||
if CORE.using_arduino:
|
if CORE.using_arduino:
|
||||||
return ["async_tcp"]
|
return ["async_tcp"]
|
||||||
if CORE.using_esp_idf:
|
|
||||||
return ["web_server_idf"]
|
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
@@ -33,6 +33,9 @@ async def to_code(config):
|
|||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
cg.add(cg.RawExpression(f"{web_server_base_ns}::global_web_server_base = {var}"))
|
cg.add(cg.RawExpression(f"{web_server_base_ns}::global_web_server_base = {var}"))
|
||||||
|
|
||||||
|
if CORE.is_esp32:
|
||||||
|
return
|
||||||
|
|
||||||
if CORE.using_arduino:
|
if CORE.using_arduino:
|
||||||
if CORE.is_esp32:
|
if CORE.is_esp32:
|
||||||
cg.add_library("WiFi", None)
|
cg.add_library("WiFi", None)
|
||||||
|
@@ -7,11 +7,17 @@
|
|||||||
|
|
||||||
#include "esphome/core/component.h"
|
#include "esphome/core/component.h"
|
||||||
|
|
||||||
#ifdef USE_ARDUINO
|
#if USE_ESP32
|
||||||
#include <ESPAsyncWebServer.h>
|
|
||||||
#elif USE_ESP_IDF
|
|
||||||
#include "esphome/core/hal.h"
|
#include "esphome/core/hal.h"
|
||||||
#include "esphome/components/web_server_idf/web_server_idf.h"
|
#include "esphome/components/web_server_idf/web_server_idf.h"
|
||||||
|
#elif USE_ARDUINO
|
||||||
|
#include <ESPAsyncWebServer.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if USE_ESP32
|
||||||
|
using PlatformString = std::string;
|
||||||
|
#elif USE_ARDUINO
|
||||||
|
using PlatformString = String;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
@@ -28,8 +34,8 @@ class MiddlewareHandler : public AsyncWebHandler {
|
|||||||
|
|
||||||
bool canHandle(AsyncWebServerRequest *request) const override { return next_->canHandle(request); }
|
bool canHandle(AsyncWebServerRequest *request) const override { return next_->canHandle(request); }
|
||||||
void handleRequest(AsyncWebServerRequest *request) override { next_->handleRequest(request); }
|
void handleRequest(AsyncWebServerRequest *request) override { next_->handleRequest(request); }
|
||||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
void handleUpload(AsyncWebServerRequest *request, const PlatformString &filename, size_t index, uint8_t *data,
|
||||||
bool final) override {
|
size_t len, bool final) override {
|
||||||
next_->handleUpload(request, filename, index, data, len, final);
|
next_->handleUpload(request, filename, index, data, len, final);
|
||||||
}
|
}
|
||||||
void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) override {
|
void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) override {
|
||||||
@@ -65,8 +71,8 @@ class AuthMiddlewareHandler : public MiddlewareHandler {
|
|||||||
return;
|
return;
|
||||||
MiddlewareHandler::handleRequest(request);
|
MiddlewareHandler::handleRequest(request);
|
||||||
}
|
}
|
||||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
void handleUpload(AsyncWebServerRequest *request, const PlatformString &filename, size_t index, uint8_t *data,
|
||||||
bool final) override {
|
size_t len, bool final) override {
|
||||||
if (!check_auth(request))
|
if (!check_auth(request))
|
||||||
return;
|
return;
|
||||||
MiddlewareHandler::handleUpload(request, filename, index, data, len, final);
|
MiddlewareHandler::handleUpload(request, filename, index, data, len, final);
|
||||||
|
@@ -5,7 +5,7 @@ CODEOWNERS = ["@dentra"]
|
|||||||
|
|
||||||
CONFIG_SCHEMA = cv.All(
|
CONFIG_SCHEMA = cv.All(
|
||||||
cv.Schema({}),
|
cv.Schema({}),
|
||||||
cv.only_with_esp_idf,
|
cv.only_on_esp32,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#include "esphome/core/defines.h"
|
#include "esphome/core/defines.h"
|
||||||
#if defined(USE_ESP_IDF) && defined(USE_WEBSERVER_OTA)
|
#if defined(USE_ESP32) && defined(USE_WEBSERVER_OTA)
|
||||||
#include "multipart.h"
|
#include "multipart.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "esphome/core/log.h"
|
#include "esphome/core/log.h"
|
||||||
@@ -251,4 +251,4 @@ std::string str_trim(const std::string &str) {
|
|||||||
|
|
||||||
} // namespace web_server_idf
|
} // namespace web_server_idf
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
#endif // defined(USE_ESP_IDF) && defined(USE_WEBSERVER_OTA)
|
#endif // defined(USE_ESP32) && defined(USE_WEBSERVER_OTA)
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "esphome/core/defines.h"
|
#include "esphome/core/defines.h"
|
||||||
#if defined(USE_ESP_IDF) && defined(USE_WEBSERVER_OTA)
|
#if defined(USE_ESP32) && defined(USE_WEBSERVER_OTA)
|
||||||
|
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
@@ -83,4 +83,4 @@ std::string str_trim(const std::string &str);
|
|||||||
|
|
||||||
} // namespace web_server_idf
|
} // namespace web_server_idf
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
#endif // defined(USE_ESP_IDF) && defined(USE_WEBSERVER_OTA)
|
#endif // defined(USE_ESP32) && defined(USE_WEBSERVER_OTA)
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#ifdef USE_ESP_IDF
|
#ifdef USE_ESP32
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
@@ -122,4 +122,4 @@ const char *stristr(const char *haystack, const char *needle) {
|
|||||||
|
|
||||||
} // namespace web_server_idf
|
} // namespace web_server_idf
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
#endif // USE_ESP_IDF
|
#endif // USE_ESP32
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#ifdef USE_ESP_IDF
|
#ifdef USE_ESP32
|
||||||
|
|
||||||
#include <esp_http_server.h>
|
#include <esp_http_server.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -24,4 +24,4 @@ const char *stristr(const char *haystack, const char *needle);
|
|||||||
|
|
||||||
} // namespace web_server_idf
|
} // namespace web_server_idf
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
#endif // USE_ESP_IDF
|
#endif // USE_ESP32
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
#ifdef USE_ESP_IDF
|
#ifdef USE_ESP32
|
||||||
|
|
||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
@@ -670,4 +670,4 @@ esp_err_t AsyncWebServer::handle_multipart_upload_(httpd_req_t *r, const char *c
|
|||||||
} // namespace web_server_idf
|
} // namespace web_server_idf
|
||||||
} // namespace esphome
|
} // namespace esphome
|
||||||
|
|
||||||
#endif // !defined(USE_ESP_IDF)
|
#endif // !defined(USE_ESP32)
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#ifdef USE_ESP_IDF
|
#ifdef USE_ESP32
|
||||||
|
|
||||||
#include "esphome/core/defines.h"
|
#include "esphome/core/defines.h"
|
||||||
#include <esp_http_server.h>
|
#include <esp_http_server.h>
|
||||||
@@ -22,11 +22,12 @@ class ListEntitiesIterator;
|
|||||||
#endif
|
#endif
|
||||||
namespace web_server_idf {
|
namespace web_server_idf {
|
||||||
|
|
||||||
|
#ifndef USE_ARDUINO
|
||||||
|
using String = std::string;
|
||||||
#define F(string_literal) (string_literal)
|
#define F(string_literal) (string_literal)
|
||||||
#define PGM_P const char *
|
#define PGM_P const char *
|
||||||
#define strncpy_P strncpy
|
#define strncpy_P strncpy
|
||||||
|
#endif
|
||||||
using String = std::string;
|
|
||||||
|
|
||||||
class AsyncWebParameter {
|
class AsyncWebParameter {
|
||||||
public:
|
public:
|
||||||
@@ -341,4 +342,4 @@ class DefaultHeaders {
|
|||||||
|
|
||||||
using namespace esphome::web_server_idf; // NOLINT(google-global-names-in-headers)
|
using namespace esphome::web_server_idf; // NOLINT(google-global-names-in-headers)
|
||||||
|
|
||||||
#endif // !defined(USE_ESP_IDF)
|
#endif // !defined(USE_ESP32)
|
||||||
|
Reference in New Issue
Block a user