mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 21:44:55 +01:00
commit
fc544dc389
10 changed files with 113 additions and 58 deletions
|
@ -151,11 +151,13 @@ void FujitsuGeneralClimate::transmit_state() {
|
||||||
case climate::CLIMATE_FAN_LOW:
|
case climate::CLIMATE_FAN_LOW:
|
||||||
SET_NIBBLE(remote_state, FUJITSU_GENERAL_FAN_NIBBLE, FUJITSU_GENERAL_FAN_LOW);
|
SET_NIBBLE(remote_state, FUJITSU_GENERAL_FAN_NIBBLE, FUJITSU_GENERAL_FAN_LOW);
|
||||||
break;
|
break;
|
||||||
|
case climate::CLIMATE_FAN_QUIET:
|
||||||
|
SET_NIBBLE(remote_state, FUJITSU_GENERAL_FAN_NIBBLE, FUJITSU_GENERAL_FAN_SILENT);
|
||||||
|
break;
|
||||||
case climate::CLIMATE_FAN_AUTO:
|
case climate::CLIMATE_FAN_AUTO:
|
||||||
default:
|
default:
|
||||||
SET_NIBBLE(remote_state, FUJITSU_GENERAL_FAN_NIBBLE, FUJITSU_GENERAL_FAN_AUTO);
|
SET_NIBBLE(remote_state, FUJITSU_GENERAL_FAN_NIBBLE, FUJITSU_GENERAL_FAN_AUTO);
|
||||||
break;
|
break;
|
||||||
// TODO Quiet / Silent
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set swing
|
// Set swing
|
||||||
|
@ -345,8 +347,9 @@ bool FujitsuGeneralClimate::on_receive(remote_base::RemoteReceiveData data) {
|
||||||
const uint8_t recv_fan_mode = GET_NIBBLE(recv_message, FUJITSU_GENERAL_FAN_NIBBLE);
|
const uint8_t recv_fan_mode = GET_NIBBLE(recv_message, FUJITSU_GENERAL_FAN_NIBBLE);
|
||||||
ESP_LOGV(TAG, "Received fan mode %X", recv_fan_mode);
|
ESP_LOGV(TAG, "Received fan mode %X", recv_fan_mode);
|
||||||
switch (recv_fan_mode) {
|
switch (recv_fan_mode) {
|
||||||
// TODO No Quiet / Silent in ESPH
|
|
||||||
case FUJITSU_GENERAL_FAN_SILENT:
|
case FUJITSU_GENERAL_FAN_SILENT:
|
||||||
|
this->fan_mode = climate::CLIMATE_FAN_QUIET;
|
||||||
|
break;
|
||||||
case FUJITSU_GENERAL_FAN_LOW:
|
case FUJITSU_GENERAL_FAN_LOW:
|
||||||
this->fan_mode = climate::CLIMATE_FAN_LOW;
|
this->fan_mode = climate::CLIMATE_FAN_LOW;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -52,7 +52,7 @@ class FujitsuGeneralClimate : public climate_ir::ClimateIR {
|
||||||
FujitsuGeneralClimate()
|
FujitsuGeneralClimate()
|
||||||
: ClimateIR(FUJITSU_GENERAL_TEMP_MIN, FUJITSU_GENERAL_TEMP_MAX, 1.0f, true, true,
|
: ClimateIR(FUJITSU_GENERAL_TEMP_MIN, FUJITSU_GENERAL_TEMP_MAX, 1.0f, true, true,
|
||||||
{climate::CLIMATE_FAN_AUTO, climate::CLIMATE_FAN_LOW, climate::CLIMATE_FAN_MEDIUM,
|
{climate::CLIMATE_FAN_AUTO, climate::CLIMATE_FAN_LOW, climate::CLIMATE_FAN_MEDIUM,
|
||||||
climate::CLIMATE_FAN_HIGH},
|
climate::CLIMATE_FAN_HIGH, climate::CLIMATE_FAN_QUIET},
|
||||||
{climate::CLIMATE_SWING_OFF, climate::CLIMATE_SWING_VERTICAL, climate::CLIMATE_SWING_HORIZONTAL,
|
{climate::CLIMATE_SWING_OFF, climate::CLIMATE_SWING_VERTICAL, climate::CLIMATE_SWING_HORIZONTAL,
|
||||||
climate::CLIMATE_SWING_BOTH}) {}
|
climate::CLIMATE_SWING_BOTH}) {}
|
||||||
|
|
||||||
|
|
|
@ -29,13 +29,10 @@ void PCA9685Output::setup() {
|
||||||
ESP_LOGCONFIG(TAG, "Setting up PCA9685OutputComponent...");
|
ESP_LOGCONFIG(TAG, "Setting up PCA9685OutputComponent...");
|
||||||
|
|
||||||
ESP_LOGV(TAG, " Resetting devices...");
|
ESP_LOGV(TAG, " Resetting devices...");
|
||||||
uint8_t address_tmp = this->address_;
|
|
||||||
this->set_i2c_address(0x00);
|
|
||||||
if (!this->write_bytes(PCA9685_REGISTER_SOFTWARE_RESET, nullptr, 0)) {
|
if (!this->write_bytes(PCA9685_REGISTER_SOFTWARE_RESET, nullptr, 0)) {
|
||||||
this->mark_failed();
|
this->mark_failed();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->set_i2c_address(address_tmp);
|
|
||||||
|
|
||||||
if (!this->write_byte(PCA9685_REGISTER_MODE1, PCA9685_MODE1_RESTART | PCA9685_MODE1_AUTOINC)) {
|
if (!this->write_byte(PCA9685_REGISTER_MODE1, PCA9685_MODE1_RESTART | PCA9685_MODE1_AUTOINC)) {
|
||||||
this->mark_failed();
|
this->mark_failed();
|
||||||
|
|
|
@ -81,6 +81,37 @@ CONFIG_SCHEMA = cv.All(
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def build_index_html(config) -> str:
|
||||||
|
html = "<!DOCTYPE html><html><head><meta charset=UTF-8><link rel=icon href=data:>"
|
||||||
|
css_include = config.get(CONF_CSS_INCLUDE)
|
||||||
|
js_include = config.get(CONF_JS_INCLUDE)
|
||||||
|
if css_include:
|
||||||
|
html += "<link rel=stylesheet href=/0.css>"
|
||||||
|
if config[CONF_CSS_URL]:
|
||||||
|
html += f'<link rel=stylesheet href="{config[CONF_CSS_URL]}">'
|
||||||
|
html += "</head><body>"
|
||||||
|
if js_include:
|
||||||
|
html += "<script type=module src=/0.js></script>"
|
||||||
|
html += "<esp-app></esp-app>"
|
||||||
|
if config[CONF_JS_URL]:
|
||||||
|
html += f'<script src="{config[CONF_JS_URL]}"></script>'
|
||||||
|
html += "</body></html>"
|
||||||
|
return html
|
||||||
|
|
||||||
|
|
||||||
|
def add_resource_as_progmem(resource_name: str, content: str) -> None:
|
||||||
|
"""Add a resource to progmem."""
|
||||||
|
content_encoded = content.encode("utf-8")
|
||||||
|
content_encoded_size = len(content_encoded)
|
||||||
|
bytes_as_int = ", ".join(str(x) for x in content_encoded)
|
||||||
|
uint8_t = f"const uint8_t ESPHOME_WEBSERVER_{resource_name}[{content_encoded_size}] PROGMEM = {{{bytes_as_int}}}"
|
||||||
|
size_t = (
|
||||||
|
f"const size_t ESPHOME_WEBSERVER_{resource_name}_SIZE = {content_encoded_size}"
|
||||||
|
)
|
||||||
|
cg.add_global(cg.RawExpression(uint8_t))
|
||||||
|
cg.add_global(cg.RawExpression(size_t))
|
||||||
|
|
||||||
|
|
||||||
@coroutine_with_priority(40.0)
|
@coroutine_with_priority(40.0)
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
paren = await cg.get_variable(config[CONF_WEB_SERVER_BASE_ID])
|
paren = await cg.get_variable(config[CONF_WEB_SERVER_BASE_ID])
|
||||||
|
@ -89,13 +120,17 @@ async def to_code(config):
|
||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
|
|
||||||
cg.add_define("USE_WEBSERVER")
|
cg.add_define("USE_WEBSERVER")
|
||||||
|
version = config[CONF_VERSION]
|
||||||
|
|
||||||
cg.add(paren.set_port(config[CONF_PORT]))
|
cg.add(paren.set_port(config[CONF_PORT]))
|
||||||
cg.add_define("USE_WEBSERVER")
|
cg.add_define("USE_WEBSERVER")
|
||||||
cg.add_define("USE_WEBSERVER_PORT", config[CONF_PORT])
|
cg.add_define("USE_WEBSERVER_PORT", config[CONF_PORT])
|
||||||
cg.add_define("USE_WEBSERVER_VERSION", config[CONF_VERSION])
|
cg.add_define("USE_WEBSERVER_VERSION", version)
|
||||||
cg.add(var.set_css_url(config[CONF_CSS_URL]))
|
if version == 2:
|
||||||
cg.add(var.set_js_url(config[CONF_JS_URL]))
|
add_resource_as_progmem("INDEX_HTML", build_index_html(config))
|
||||||
|
else:
|
||||||
|
cg.add(var.set_css_url(config[CONF_CSS_URL]))
|
||||||
|
cg.add(var.set_js_url(config[CONF_JS_URL]))
|
||||||
cg.add(var.set_allow_ota(config[CONF_OTA]))
|
cg.add(var.set_allow_ota(config[CONF_OTA]))
|
||||||
if CONF_AUTH in config:
|
if CONF_AUTH in config:
|
||||||
cg.add(paren.set_auth_username(config[CONF_AUTH][CONF_USERNAME]))
|
cg.add(paren.set_auth_username(config[CONF_AUTH][CONF_USERNAME]))
|
||||||
|
@ -103,13 +138,13 @@ async def to_code(config):
|
||||||
if CONF_CSS_INCLUDE in config:
|
if CONF_CSS_INCLUDE in config:
|
||||||
cg.add_define("USE_WEBSERVER_CSS_INCLUDE")
|
cg.add_define("USE_WEBSERVER_CSS_INCLUDE")
|
||||||
path = CORE.relative_config_path(config[CONF_CSS_INCLUDE])
|
path = CORE.relative_config_path(config[CONF_CSS_INCLUDE])
|
||||||
with open(file=path, encoding="utf-8") as myfile:
|
with open(file=path, encoding="utf-8") as css_file:
|
||||||
cg.add(var.set_css_include(myfile.read()))
|
add_resource_as_progmem("CSS_INCLUDE", css_file.read())
|
||||||
if CONF_JS_INCLUDE in config:
|
if CONF_JS_INCLUDE in config:
|
||||||
cg.add_define("USE_WEBSERVER_JS_INCLUDE")
|
cg.add_define("USE_WEBSERVER_JS_INCLUDE")
|
||||||
path = CORE.relative_config_path(config[CONF_JS_INCLUDE])
|
path = CORE.relative_config_path(config[CONF_JS_INCLUDE])
|
||||||
with open(file=path, encoding="utf-8") as myfile:
|
with open(file=path, encoding="utf-8") as js_file:
|
||||||
cg.add(var.set_js_include(myfile.read()))
|
add_resource_as_progmem("JS_INCLUDE", js_file.read())
|
||||||
cg.add(var.set_include_internal(config[CONF_INCLUDE_INTERNAL]))
|
cg.add(var.set_include_internal(config[CONF_INCLUDE_INTERNAL]))
|
||||||
if CONF_LOCAL in config and config[CONF_LOCAL]:
|
if CONF_LOCAL in config and config[CONF_LOCAL]:
|
||||||
cg.add_define("USE_WEBSERVER_LOCAL")
|
cg.add_define("USE_WEBSERVER_LOCAL")
|
||||||
|
|
|
@ -90,10 +90,17 @@ WebServer::WebServer(web_server_base::WebServerBase *base)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if USE_WEBSERVER_VERSION == 1
|
||||||
void WebServer::set_css_url(const char *css_url) { this->css_url_ = css_url; }
|
void WebServer::set_css_url(const char *css_url) { this->css_url_ = css_url; }
|
||||||
void WebServer::set_css_include(const char *css_include) { this->css_include_ = css_include; }
|
|
||||||
void WebServer::set_js_url(const char *js_url) { this->js_url_ = js_url; }
|
void WebServer::set_js_url(const char *js_url) { this->js_url_ = js_url; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||||
|
void WebServer::set_css_include(const char *css_include) { this->css_include_ = css_include; }
|
||||||
|
#endif
|
||||||
|
#ifdef USE_WEBSERVER_JS_INCLUDE
|
||||||
void WebServer::set_js_include(const char *js_include) { this->js_include_ = js_include; }
|
void WebServer::set_js_include(const char *js_include) { this->js_include_ = js_include; }
|
||||||
|
#endif
|
||||||
|
|
||||||
void WebServer::setup() {
|
void WebServer::setup() {
|
||||||
ESP_LOGCONFIG(TAG, "Setting up web server...");
|
ESP_LOGCONFIG(TAG, "Setting up web server...");
|
||||||
|
@ -159,20 +166,14 @@ void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
||||||
response->addHeader("Content-Encoding", "gzip");
|
response->addHeader("Content-Encoding", "gzip");
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
#else
|
#elif USE_WEBSERVER_VERSION == 1
|
||||||
void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
||||||
AsyncResponseStream *stream = request->beginResponseStream("text/html");
|
AsyncResponseStream *stream = request->beginResponseStream("text/html");
|
||||||
// All content is controlled and created by user - so allowing all origins is fine here.
|
|
||||||
stream->addHeader("Access-Control-Allow-Origin", "*");
|
|
||||||
#if USE_WEBSERVER_VERSION == 1
|
|
||||||
const std::string &title = App.get_name();
|
const std::string &title = App.get_name();
|
||||||
stream->print(F("<!DOCTYPE html><html lang=\"en\"><head><meta charset=UTF-8><meta "
|
stream->print(F("<!DOCTYPE html><html lang=\"en\"><head><meta charset=UTF-8><meta "
|
||||||
"name=viewport content=\"width=device-width, initial-scale=1,user-scalable=no\"><title>"));
|
"name=viewport content=\"width=device-width, initial-scale=1,user-scalable=no\"><title>"));
|
||||||
stream->print(title.c_str());
|
stream->print(title.c_str());
|
||||||
stream->print(F("</title>"));
|
stream->print(F("</title>"));
|
||||||
#else
|
|
||||||
stream->print(F("<!DOCTYPE html><html><head><meta charset=UTF-8><link rel=icon href=data:>"));
|
|
||||||
#endif
|
|
||||||
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||||
stream->print(F("<link rel=\"stylesheet\" href=\"/0.css\">"));
|
stream->print(F("<link rel=\"stylesheet\" href=\"/0.css\">"));
|
||||||
#endif
|
#endif
|
||||||
|
@ -182,7 +183,6 @@ void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
||||||
stream->print(F("\">"));
|
stream->print(F("\">"));
|
||||||
}
|
}
|
||||||
stream->print(F("</head><body>"));
|
stream->print(F("</head><body>"));
|
||||||
#if USE_WEBSERVER_VERSION == 1
|
|
||||||
stream->print(F("<article class=\"markdown-body\"><h1>"));
|
stream->print(F("<article class=\"markdown-body\"><h1>"));
|
||||||
stream->print(title.c_str());
|
stream->print(title.c_str());
|
||||||
stream->print(F("</h1>"));
|
stream->print(F("</h1>"));
|
||||||
|
@ -308,49 +308,40 @@ void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
||||||
"type=\"file\" name=\"update\"><input type=\"submit\" value=\"Update\"></form>"));
|
"type=\"file\" name=\"update\"><input type=\"submit\" value=\"Update\"></form>"));
|
||||||
}
|
}
|
||||||
stream->print(F("<h2>Debug Log</h2><pre id=\"log\"></pre>"));
|
stream->print(F("<h2>Debug Log</h2><pre id=\"log\"></pre>"));
|
||||||
#endif
|
|
||||||
#ifdef USE_WEBSERVER_JS_INCLUDE
|
#ifdef USE_WEBSERVER_JS_INCLUDE
|
||||||
if (this->js_include_ != nullptr) {
|
if (this->js_include_ != nullptr) {
|
||||||
stream->print(F("<script type=\"module\" src=\"/0.js\"></script>"));
|
stream->print(F("<script type=\"module\" src=\"/0.js\"></script>"));
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#if USE_WEBSERVER_VERSION == 2
|
|
||||||
stream->print(F("<esp-app></esp-app>"));
|
|
||||||
#endif
|
#endif
|
||||||
if (strlen(this->js_url_) > 0) {
|
if (strlen(this->js_url_) > 0) {
|
||||||
stream->print(F("<script src=\""));
|
stream->print(F("<script src=\""));
|
||||||
stream->print(this->js_url_);
|
stream->print(this->js_url_);
|
||||||
stream->print(F("\"></script>"));
|
stream->print(F("\"></script>"));
|
||||||
}
|
}
|
||||||
#if USE_WEBSERVER_VERSION == 1
|
|
||||||
stream->print(F("</article></body></html>"));
|
stream->print(F("</article></body></html>"));
|
||||||
#else
|
|
||||||
stream->print(F("</body></html>"));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
request->send(stream);
|
request->send(stream);
|
||||||
}
|
}
|
||||||
|
#elif USE_WEBSERVER_VERSION == 2
|
||||||
|
void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
||||||
|
AsyncWebServerResponse *response =
|
||||||
|
request->beginResponse_P(200, "text/html", ESPHOME_WEBSERVER_INDEX_HTML, ESPHOME_WEBSERVER_INDEX_HTML_SIZE);
|
||||||
|
request->send(response);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||||
void WebServer::handle_css_request(AsyncWebServerRequest *request) {
|
void WebServer::handle_css_request(AsyncWebServerRequest *request) {
|
||||||
AsyncResponseStream *stream = request->beginResponseStream("text/css");
|
AsyncWebServerResponse *response =
|
||||||
if (this->css_include_ != nullptr) {
|
request->beginResponse_P(200, "text/css", ESPHOME_WEBSERVER_CSS_INCLUDE, ESPHOME_WEBSERVER_CSS_INCLUDE_SIZE);
|
||||||
stream->print(this->css_include_);
|
request->send(response);
|
||||||
}
|
|
||||||
|
|
||||||
request->send(stream);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_WEBSERVER_JS_INCLUDE
|
#ifdef USE_WEBSERVER_JS_INCLUDE
|
||||||
void WebServer::handle_js_request(AsyncWebServerRequest *request) {
|
void WebServer::handle_js_request(AsyncWebServerRequest *request) {
|
||||||
AsyncResponseStream *stream = request->beginResponseStream("text/javascript");
|
AsyncWebServerResponse *response =
|
||||||
if (this->js_include_ != nullptr) {
|
request->beginResponse_P(200, "text/javascript", ESPHOME_WEBSERVER_JS_INCLUDE, ESPHOME_WEBSERVER_JS_INCLUDE_SIZE);
|
||||||
stream->addHeader("Access-Control-Allow-Origin", "*");
|
request->send(response);
|
||||||
stream->print(this->js_include_);
|
|
||||||
}
|
|
||||||
|
|
||||||
request->send(stream);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,22 @@
|
||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/semphr.h>
|
#include <freertos/semphr.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if USE_WEBSERVER_VERSION == 2
|
||||||
|
extern const uint8_t ESPHOME_WEBSERVER_INDEX_HTML[] PROGMEM;
|
||||||
|
extern const size_t ESPHOME_WEBSERVER_INDEX_HTML_SIZE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||||
|
extern const uint8_t ESPHOME_WEBSERVER_CSS_INCLUDE[] PROGMEM;
|
||||||
|
extern const size_t ESPHOME_WEBSERVER_CSS_INCLUDE_SIZE;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_JS_INCLUDE
|
||||||
|
extern const uint8_t ESPHOME_WEBSERVER_JS_INCLUDE[] PROGMEM;
|
||||||
|
extern const size_t ESPHOME_WEBSERVER_JS_INCLUDE_SIZE;
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace esphome {
|
namespace esphome {
|
||||||
namespace web_server {
|
namespace web_server {
|
||||||
|
|
||||||
|
@ -40,6 +56,7 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
|
||||||
public:
|
public:
|
||||||
WebServer(web_server_base::WebServerBase *base);
|
WebServer(web_server_base::WebServerBase *base);
|
||||||
|
|
||||||
|
#if USE_WEBSERVER_VERSION == 1
|
||||||
/** Set the URL to the CSS <link> that's sent to each client. Defaults to
|
/** Set the URL to the CSS <link> that's sent to each client. Defaults to
|
||||||
* https://esphome.io/_static/webserver-v1.min.css
|
* https://esphome.io/_static/webserver-v1.min.css
|
||||||
*
|
*
|
||||||
|
@ -47,24 +64,29 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
|
||||||
*/
|
*/
|
||||||
void set_css_url(const char *css_url);
|
void set_css_url(const char *css_url);
|
||||||
|
|
||||||
/** Set local path to the script that's embedded in the index page. Defaults to
|
|
||||||
*
|
|
||||||
* @param css_include Local path to web server script.
|
|
||||||
*/
|
|
||||||
void set_css_include(const char *css_include);
|
|
||||||
|
|
||||||
/** Set the URL to the script that's embedded in the index page. Defaults to
|
/** Set the URL to the script that's embedded in the index page. Defaults to
|
||||||
* https://esphome.io/_static/webserver-v1.min.js
|
* https://esphome.io/_static/webserver-v1.min.js
|
||||||
*
|
*
|
||||||
* @param js_url The url to the web server script.
|
* @param js_url The url to the web server script.
|
||||||
*/
|
*/
|
||||||
void set_js_url(const char *js_url);
|
void set_js_url(const char *js_url);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||||
|
/** Set local path to the script that's embedded in the index page. Defaults to
|
||||||
|
*
|
||||||
|
* @param css_include Local path to web server script.
|
||||||
|
*/
|
||||||
|
void set_css_include(const char *css_include);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_WEBSERVER_JS_INCLUDE
|
||||||
/** Set local path to the script that's embedded in the index page. Defaults to
|
/** Set local path to the script that's embedded in the index page. Defaults to
|
||||||
*
|
*
|
||||||
* @param js_include Local path to web server script.
|
* @param js_include Local path to web server script.
|
||||||
*/
|
*/
|
||||||
void set_js_include(const char *js_include);
|
void set_js_include(const char *js_include);
|
||||||
|
#endif
|
||||||
|
|
||||||
/** Determine whether internal components should be displayed on the web server.
|
/** Determine whether internal components should be displayed on the web server.
|
||||||
* Defaults to false.
|
* Defaults to false.
|
||||||
|
@ -240,10 +262,16 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
|
||||||
web_server_base::WebServerBase *base_;
|
web_server_base::WebServerBase *base_;
|
||||||
AsyncEventSource events_{"/events"};
|
AsyncEventSource events_{"/events"};
|
||||||
ListEntitiesIterator entities_iterator_;
|
ListEntitiesIterator entities_iterator_;
|
||||||
|
#if USE_WEBSERVER_VERSION == 1
|
||||||
const char *css_url_{nullptr};
|
const char *css_url_{nullptr};
|
||||||
const char *css_include_{nullptr};
|
|
||||||
const char *js_url_{nullptr};
|
const char *js_url_{nullptr};
|
||||||
|
#endif
|
||||||
|
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||||
|
const char *css_include_{nullptr};
|
||||||
|
#endif
|
||||||
|
#ifdef USE_WEBSERVER_JS_INCLUDE
|
||||||
const char *js_include_{nullptr};
|
const char *js_include_{nullptr};
|
||||||
|
#endif
|
||||||
bool include_internal_{false};
|
bool include_internal_{false};
|
||||||
bool allow_ota_{true};
|
bool allow_ota_{true};
|
||||||
#ifdef USE_ESP32
|
#ifdef USE_ESP32
|
||||||
|
|
|
@ -83,6 +83,7 @@ class WebServerBase : public Component {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->server_ = std::make_shared<AsyncWebServer>(this->port_);
|
this->server_ = std::make_shared<AsyncWebServer>(this->port_);
|
||||||
|
// All content is controlled and created by user - so allowing all origins is fine here.
|
||||||
DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*");
|
DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*");
|
||||||
this->server_->begin();
|
this->server_->begin();
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""Constants used by esphome."""
|
"""Constants used by esphome."""
|
||||||
|
|
||||||
__version__ = "2023.6.0b2"
|
__version__ = "2023.6.0b3"
|
||||||
|
|
||||||
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
||||||
VALID_SUBSTITUTIONS_CHARACTERS = (
|
VALID_SUBSTITUTIONS_CHARACTERS = (
|
||||||
|
|
|
@ -99,7 +99,7 @@ void Application::loop() {
|
||||||
|
|
||||||
if (this->dump_config_at_ < this->components_.size()) {
|
if (this->dump_config_at_ < this->components_.size()) {
|
||||||
if (this->dump_config_at_ == 0) {
|
if (this->dump_config_at_ == 0) {
|
||||||
ESP_LOGI(TAG, "ESPHome version " ESPHOME_VERSION " compiled on %s", this->compilation_time_.c_str());
|
ESP_LOGI(TAG, "ESPHome version " ESPHOME_VERSION " compiled on %s", this->compilation_time_);
|
||||||
#ifdef ESPHOME_PROJECT_NAME
|
#ifdef ESPHOME_PROJECT_NAME
|
||||||
ESP_LOGI(TAG, "Project " ESPHOME_PROJECT_NAME " version " ESPHOME_PROJECT_VERSION);
|
ESP_LOGI(TAG, "Project " ESPHOME_PROJECT_NAME " version " ESPHOME_PROJECT_VERSION);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -56,7 +56,7 @@ namespace esphome {
|
||||||
|
|
||||||
class Application {
|
class Application {
|
||||||
public:
|
public:
|
||||||
void pre_setup(const std::string &name, const std::string &friendly_name, const std::string &comment,
|
void pre_setup(const std::string &name, const std::string &friendly_name, const char *comment,
|
||||||
const char *compilation_time, bool name_add_mac_suffix) {
|
const char *compilation_time, bool name_add_mac_suffix) {
|
||||||
arch_init();
|
arch_init();
|
||||||
this->name_add_mac_suffix_ = name_add_mac_suffix;
|
this->name_add_mac_suffix_ = name_add_mac_suffix;
|
||||||
|
@ -154,11 +154,11 @@ class Application {
|
||||||
/// Get the friendly name of this Application set by pre_setup().
|
/// Get the friendly name of this Application set by pre_setup().
|
||||||
const std::string &get_friendly_name() const { return this->friendly_name_; }
|
const std::string &get_friendly_name() const { return this->friendly_name_; }
|
||||||
/// Get the comment of this Application set by pre_setup().
|
/// Get the comment of this Application set by pre_setup().
|
||||||
const std::string &get_comment() const { return this->comment_; }
|
std::string get_comment() const { return this->comment_; }
|
||||||
|
|
||||||
bool is_name_add_mac_suffix_enabled() const { return this->name_add_mac_suffix_; }
|
bool is_name_add_mac_suffix_enabled() const { return this->name_add_mac_suffix_; }
|
||||||
|
|
||||||
const std::string &get_compilation_time() const { return this->compilation_time_; }
|
std::string get_compilation_time() const { return this->compilation_time_; }
|
||||||
|
|
||||||
/** Set the target interval with which to run the loop() calls.
|
/** Set the target interval with which to run the loop() calls.
|
||||||
* If the loop() method takes longer than the target interval, ESPHome won't
|
* If the loop() method takes longer than the target interval, ESPHome won't
|
||||||
|
@ -376,8 +376,8 @@ class Application {
|
||||||
|
|
||||||
std::string name_;
|
std::string name_;
|
||||||
std::string friendly_name_;
|
std::string friendly_name_;
|
||||||
std::string comment_;
|
const char *comment_{nullptr};
|
||||||
std::string compilation_time_;
|
const char *compilation_time_{nullptr};
|
||||||
bool name_add_mac_suffix_;
|
bool name_add_mac_suffix_;
|
||||||
uint32_t last_loop_{0};
|
uint32_t last_loop_{0};
|
||||||
uint32_t loop_interval_{16};
|
uint32_t loop_interval_{16};
|
||||||
|
|
Loading…
Reference in a new issue