mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	Merge branch 'use_idf_webserver_esp32' into integration
This commit is contained in:
		| @@ -1 +1 @@ | |||||||
| 4368db58e8f884aff245996b1e8b644cc0796c0bb2fa706d5740d40b823d3ac9 | 499db61c1aa55b98b6629df603a56a1ba7aff5a9a7c781a5c1552a9dcd186c08 | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							| @@ -466,7 +466,7 @@ jobs: | |||||||
|         with: |         with: | ||||||
|           python-version: ${{ env.DEFAULT_PYTHON }} |           python-version: ${{ env.DEFAULT_PYTHON }} | ||||||
|           cache-key: ${{ needs.common.outputs.cache-key }} |           cache-key: ${{ needs.common.outputs.cache-key }} | ||||||
|       - uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 |       - uses: esphome/action@43cd1109c09c544d97196f7730ee5b2e0cc6d81e # v3.0.1 fork with pinned actions/cache | ||||||
|         env: |         env: | ||||||
|           SKIP: pylint,clang-tidy-hash |           SKIP: pylint,clang-tidy-hash | ||||||
|       - uses: pre-commit-ci/lite-action@5d6cc0eb514c891a40562a58a8e71576c5c7fb43 # v1.1.0 |       - uses: pre-commit-ci/lite-action@5d6cc0eb514c891a40562a58a8e71576c5c7fb43 # v1.1.0 | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.github/workflows/codeql.yml
									
									
									
									
										vendored
									
									
								
							| @@ -58,7 +58,7 @@ jobs: | |||||||
|  |  | ||||||
|       # Initializes the CodeQL tools for scanning. |       # Initializes the CodeQL tools for scanning. | ||||||
|       - name: Initialize CodeQL |       - name: Initialize CodeQL | ||||||
|         uses: github/codeql-action/init@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 |         uses: github/codeql-action/init@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 | ||||||
|         with: |         with: | ||||||
|           languages: ${{ matrix.language }} |           languages: ${{ matrix.language }} | ||||||
|           build-mode: ${{ matrix.build-mode }} |           build-mode: ${{ matrix.build-mode }} | ||||||
| @@ -86,6 +86,6 @@ jobs: | |||||||
|           exit 1 |           exit 1 | ||||||
|  |  | ||||||
|       - name: Perform CodeQL Analysis |       - name: Perform CodeQL Analysis | ||||||
|         uses: github/codeql-action/analyze@3599b3baa15b485a2e49ef411a7a4bb2452e7f93 # v3.30.5 |         uses: github/codeql-action/analyze@64d10c13136e1c5bce3e5fbde8d4906eeaafc885 # v3.30.6 | ||||||
|         with: |         with: | ||||||
|           category: "/language:${{matrix.language}}" |           category: "/language:${{matrix.language}}" | ||||||
|   | |||||||
| @@ -11,14 +11,14 @@ namespace captive_portal { | |||||||
| static const char *const TAG = "captive_portal"; | static const char *const TAG = "captive_portal"; | ||||||
|  |  | ||||||
| void CaptivePortal::handle_config(AsyncWebServerRequest *request) { | void CaptivePortal::handle_config(AsyncWebServerRequest *request) { | ||||||
|   AsyncResponseStream *stream = request->beginResponseStream(F("application/json")); |   AsyncResponseStream *stream = request->beginResponseStream(ESPHOME_F("application/json")); | ||||||
|   stream->addHeader(F("cache-control"), F("public, max-age=0, must-revalidate")); |   stream->addHeader(ESPHOME_F("cache-control"), ESPHOME_F("public, max-age=0, must-revalidate")); | ||||||
| #ifdef USE_ESP8266 | #ifdef USE_ESP8266 | ||||||
|   stream->print(F("{\"mac\":\"")); |   stream->print(ESPHOME_F("{\"mac\":\"")); | ||||||
|   stream->print(get_mac_address_pretty().c_str()); |   stream->print(get_mac_address_pretty().c_str()); | ||||||
|   stream->print(F("\",\"name\":\"")); |   stream->print(ESPHOME_F("\",\"name\":\"")); | ||||||
|   stream->print(App.get_name().c_str()); |   stream->print(App.get_name().c_str()); | ||||||
|   stream->print(F("\",\"aps\":[{}")); |   stream->print(ESPHOME_F("\",\"aps\":[{}")); | ||||||
| #else | #else | ||||||
|   stream->printf(R"({"mac":"%s","name":"%s","aps":[{})", get_mac_address_pretty().c_str(), App.get_name().c_str()); |   stream->printf(R"({"mac":"%s","name":"%s","aps":[{})", get_mac_address_pretty().c_str(), App.get_name().c_str()); | ||||||
| #endif | #endif | ||||||
| @@ -29,19 +29,19 @@ void CaptivePortal::handle_config(AsyncWebServerRequest *request) { | |||||||
|  |  | ||||||
|       // Assumes no " in ssid, possible unicode isses? |       // Assumes no " in ssid, possible unicode isses? | ||||||
| #ifdef USE_ESP8266 | #ifdef USE_ESP8266 | ||||||
|     stream->print(F(",{\"ssid\":\"")); |     stream->print(ESPHOME_F(",{\"ssid\":\"")); | ||||||
|     stream->print(scan.get_ssid().c_str()); |     stream->print(scan.get_ssid().c_str()); | ||||||
|     stream->print(F("\",\"rssi\":")); |     stream->print(ESPHOME_F("\",\"rssi\":")); | ||||||
|     stream->print(scan.get_rssi()); |     stream->print(scan.get_rssi()); | ||||||
|     stream->print(F(",\"lock\":")); |     stream->print(ESPHOME_F(",\"lock\":")); | ||||||
|     stream->print(scan.get_with_auth()); |     stream->print(scan.get_with_auth()); | ||||||
|     stream->print(F("}")); |     stream->print(ESPHOME_F("}")); | ||||||
| #else | #else | ||||||
|     stream->printf(R"(,{"ssid":"%s","rssi":%d,"lock":%d})", scan.get_ssid().c_str(), scan.get_rssi(), |     stream->printf(R"(,{"ssid":"%s","rssi":%d,"lock":%d})", scan.get_ssid().c_str(), scan.get_rssi(), | ||||||
|                    scan.get_with_auth()); |                    scan.get_with_auth()); | ||||||
| #endif | #endif | ||||||
|   } |   } | ||||||
|   stream->print(F("]}")); |   stream->print(ESPHOME_F("]}")); | ||||||
|   request->send(stream); |   request->send(stream); | ||||||
| } | } | ||||||
| void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) { | void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) { | ||||||
| @@ -52,7 +52,7 @@ void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) { | |||||||
|   ESP_LOGI(TAG, "  Password=" LOG_SECRET("'%s'"), psk.c_str()); |   ESP_LOGI(TAG, "  Password=" LOG_SECRET("'%s'"), psk.c_str()); | ||||||
|   wifi::global_wifi_component->save_wifi_sta(ssid, psk); |   wifi::global_wifi_component->save_wifi_sta(ssid, psk); | ||||||
|   wifi::global_wifi_component->start_scanning(); |   wifi::global_wifi_component->start_scanning(); | ||||||
|   request->redirect(F("/?save")); |   request->redirect(ESPHOME_F("/?save")); | ||||||
| } | } | ||||||
|  |  | ||||||
| void CaptivePortal::setup() { | void CaptivePortal::setup() { | ||||||
| @@ -75,7 +75,7 @@ void CaptivePortal::start() { | |||||||
| #ifdef USE_ARDUINO | #ifdef USE_ARDUINO | ||||||
|   this->dns_server_ = make_unique<DNSServer>(); |   this->dns_server_ = make_unique<DNSServer>(); | ||||||
|   this->dns_server_->setErrorReplyCode(DNSReplyCode::NoError); |   this->dns_server_->setErrorReplyCode(DNSReplyCode::NoError); | ||||||
|   this->dns_server_->start(53, F("*"), ip); |   this->dns_server_->start(53, ESPHOME_F("*"), ip); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   this->initialized_ = true; |   this->initialized_ = true; | ||||||
| @@ -88,10 +88,10 @@ void CaptivePortal::start() { | |||||||
| } | } | ||||||
|  |  | ||||||
| void CaptivePortal::handleRequest(AsyncWebServerRequest *req) { | void CaptivePortal::handleRequest(AsyncWebServerRequest *req) { | ||||||
|   if (req->url() == F("/config.json")) { |   if (req->url() == ESPHOME_F("/config.json")) { | ||||||
|     this->handle_config(req); |     this->handle_config(req); | ||||||
|     return; |     return; | ||||||
|   } else if (req->url() == F("/wifisave")) { |   } else if (req->url() == ESPHOME_F("/wifisave")) { | ||||||
|     this->handle_wifisave(req); |     this->handle_wifisave(req); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
| @@ -100,11 +100,11 @@ void CaptivePortal::handleRequest(AsyncWebServerRequest *req) { | |||||||
|   // This includes OS captive portal detection endpoints which will trigger |   // This includes OS captive portal detection endpoints which will trigger | ||||||
|   // the captive portal when they don't receive their expected responses |   // the captive portal when they don't receive their expected responses | ||||||
| #ifndef USE_ESP8266 | #ifndef USE_ESP8266 | ||||||
|   auto *response = req->beginResponse(200, F("text/html"), INDEX_GZ, sizeof(INDEX_GZ)); |   auto *response = req->beginResponse(200, ESPHOME_F("text/html"), INDEX_GZ, sizeof(INDEX_GZ)); | ||||||
| #else | #else | ||||||
|   auto *response = req->beginResponse_P(200, F("text/html"), INDEX_GZ, sizeof(INDEX_GZ)); |   auto *response = req->beginResponse_P(200, ESPHOME_F("text/html"), INDEX_GZ, sizeof(INDEX_GZ)); | ||||||
| #endif | #endif | ||||||
|   response->addHeader(F("Content-Encoding"), F("gzip")); |   response->addHeader(ESPHOME_F("Content-Encoding"), ESPHOME_F("gzip")); | ||||||
|   req->send(response); |   req->send(response); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -162,7 +162,7 @@ class EthernetComponent : public Component { | |||||||
| // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) | // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables) | ||||||
| extern EthernetComponent *global_eth_component; | extern EthernetComponent *global_eth_component; | ||||||
|  |  | ||||||
| #if defined(USE_ARDUINO) || ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 4, 2) | #if ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 4, 2) | ||||||
| extern "C" esp_eth_phy_t *esp_eth_phy_new_jl1101(const eth_phy_config_t *config); | extern "C" esp_eth_phy_t *esp_eth_phy_new_jl1101(const eth_phy_config_t *config); | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -110,21 +110,21 @@ std::string PrometheusHandler::relabel_name_(EntityBase *obj) { | |||||||
|  |  | ||||||
| void PrometheusHandler::add_area_label_(AsyncResponseStream *stream, std::string &area) { | void PrometheusHandler::add_area_label_(AsyncResponseStream *stream, std::string &area) { | ||||||
|   if (!area.empty()) { |   if (!area.empty()) { | ||||||
|     stream->print(F("\",area=\"")); |     stream->print(ESPHOME_F("\",area=\"")); | ||||||
|     stream->print(area.c_str()); |     stream->print(area.c_str()); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrometheusHandler::add_node_label_(AsyncResponseStream *stream, std::string &node) { | void PrometheusHandler::add_node_label_(AsyncResponseStream *stream, std::string &node) { | ||||||
|   if (!node.empty()) { |   if (!node.empty()) { | ||||||
|     stream->print(F("\",node=\"")); |     stream->print(ESPHOME_F("\",node=\"")); | ||||||
|     stream->print(node.c_str()); |     stream->print(node.c_str()); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrometheusHandler::add_friendly_name_label_(AsyncResponseStream *stream, std::string &friendly_name) { | void PrometheusHandler::add_friendly_name_label_(AsyncResponseStream *stream, std::string &friendly_name) { | ||||||
|   if (!friendly_name.empty()) { |   if (!friendly_name.empty()) { | ||||||
|     stream->print(F("\",friendly_name=\"")); |     stream->print(ESPHOME_F("\",friendly_name=\"")); | ||||||
|     stream->print(friendly_name.c_str()); |     stream->print(friendly_name.c_str()); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -132,8 +132,8 @@ void PrometheusHandler::add_friendly_name_label_(AsyncResponseStream *stream, st | |||||||
| // Type-specific implementation | // Type-specific implementation | ||||||
| #ifdef USE_SENSOR | #ifdef USE_SENSOR | ||||||
| void PrometheusHandler::sensor_type_(AsyncResponseStream *stream) { | void PrometheusHandler::sensor_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_sensor_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_sensor_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_sensor_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_sensor_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor *obj, std::string &area, | void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor *obj, std::string &area, | ||||||
|                                     std::string &node, std::string &friendly_name) { |                                     std::string &node, std::string &friendly_name) { | ||||||
| @@ -141,37 +141,37 @@ void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor | |||||||
|     return; |     return; | ||||||
|   if (!std::isnan(obj->state)) { |   if (!std::isnan(obj->state)) { | ||||||
|     // We have a valid value, output this value |     // We have a valid value, output this value | ||||||
|     stream->print(F("esphome_sensor_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_sensor_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 0\n")); |     stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|     // Data itself |     // Data itself | ||||||
|     stream->print(F("esphome_sensor_value{id=\"")); |     stream->print(ESPHOME_F("esphome_sensor_value{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\",unit=\"")); |     stream->print(ESPHOME_F("\",unit=\"")); | ||||||
|     stream->print(obj->get_unit_of_measurement().c_str()); |     stream->print(obj->get_unit_of_measurement().c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(value_accuracy_to_string(obj->state, obj->get_accuracy_decimals()).c_str()); |     stream->print(value_accuracy_to_string(obj->state, obj->get_accuracy_decimals()).c_str()); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } else { |   } else { | ||||||
|     // Invalid state |     // Invalid state | ||||||
|     stream->print(F("esphome_sensor_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_sensor_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 1\n")); |     stream->print(ESPHOME_F("\"} 1\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
| @@ -179,8 +179,8 @@ void PrometheusHandler::sensor_row_(AsyncResponseStream *stream, sensor::Sensor | |||||||
| // Type-specific implementation | // Type-specific implementation | ||||||
| #ifdef USE_BINARY_SENSOR | #ifdef USE_BINARY_SENSOR | ||||||
| void PrometheusHandler::binary_sensor_type_(AsyncResponseStream *stream) { | void PrometheusHandler::binary_sensor_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_binary_sensor_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_binary_sensor_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_binary_sensor_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_binary_sensor_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_sensor::BinarySensor *obj, | void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_sensor::BinarySensor *obj, | ||||||
|                                            std::string &area, std::string &node, std::string &friendly_name) { |                                            std::string &area, std::string &node, std::string &friendly_name) { | ||||||
| @@ -188,204 +188,204 @@ void PrometheusHandler::binary_sensor_row_(AsyncResponseStream *stream, binary_s | |||||||
|     return; |     return; | ||||||
|   if (obj->has_state()) { |   if (obj->has_state()) { | ||||||
|     // We have a valid value, output this value |     // We have a valid value, output this value | ||||||
|     stream->print(F("esphome_binary_sensor_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_binary_sensor_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 0\n")); |     stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|     // Data itself |     // Data itself | ||||||
|     stream->print(F("esphome_binary_sensor_value{id=\"")); |     stream->print(ESPHOME_F("esphome_binary_sensor_value{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(obj->state); |     stream->print(obj->state); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } else { |   } else { | ||||||
|     // Invalid state |     // Invalid state | ||||||
|     stream->print(F("esphome_binary_sensor_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_binary_sensor_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 1\n")); |     stream->print(ESPHOME_F("\"} 1\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_FAN | #ifdef USE_FAN | ||||||
| void PrometheusHandler::fan_type_(AsyncResponseStream *stream) { | void PrometheusHandler::fan_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_fan_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_fan_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_fan_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_fan_failed gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_fan_speed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_fan_speed gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_fan_oscillation gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_fan_oscillation gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj, std::string &area, std::string &node, | void PrometheusHandler::fan_row_(AsyncResponseStream *stream, fan::Fan *obj, std::string &area, std::string &node, | ||||||
|                                  std::string &friendly_name) { |                                  std::string &friendly_name) { | ||||||
|   if (obj->is_internal() && !this->include_internal_) |   if (obj->is_internal() && !this->include_internal_) | ||||||
|     return; |     return; | ||||||
|   stream->print(F("esphome_fan_failed{id=\"")); |   stream->print(ESPHOME_F("esphome_fan_failed{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} 0\n")); |   stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|   // Data itself |   // Data itself | ||||||
|   stream->print(F("esphome_fan_value{id=\"")); |   stream->print(ESPHOME_F("esphome_fan_value{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(obj->state); |   stream->print(obj->state); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   // Speed if available |   // Speed if available | ||||||
|   if (obj->get_traits().supports_speed()) { |   if (obj->get_traits().supports_speed()) { | ||||||
|     stream->print(F("esphome_fan_speed{id=\"")); |     stream->print(ESPHOME_F("esphome_fan_speed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(obj->speed); |     stream->print(obj->speed); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } |   } | ||||||
|   // Oscillation if available |   // Oscillation if available | ||||||
|   if (obj->get_traits().supports_oscillation()) { |   if (obj->get_traits().supports_oscillation()) { | ||||||
|     stream->print(F("esphome_fan_oscillation{id=\"")); |     stream->print(ESPHOME_F("esphome_fan_oscillation{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(obj->oscillating); |     stream->print(obj->oscillating); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_LIGHT | #ifdef USE_LIGHT | ||||||
| void PrometheusHandler::light_type_(AsyncResponseStream *stream) { | void PrometheusHandler::light_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_light_state gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_light_state gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_light_color gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_light_color gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_light_effect_active gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_light_effect_active gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightState *obj, std::string &area, | void PrometheusHandler::light_row_(AsyncResponseStream *stream, light::LightState *obj, std::string &area, | ||||||
|                                    std::string &node, std::string &friendly_name) { |                                    std::string &node, std::string &friendly_name) { | ||||||
|   if (obj->is_internal() && !this->include_internal_) |   if (obj->is_internal() && !this->include_internal_) | ||||||
|     return; |     return; | ||||||
|   // State |   // State | ||||||
|   stream->print(F("esphome_light_state{id=\"")); |   stream->print(ESPHOME_F("esphome_light_state{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(obj->remote_values.is_on()); |   stream->print(obj->remote_values.is_on()); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   // Brightness and RGBW |   // Brightness and RGBW | ||||||
|   light::LightColorValues color = obj->current_values; |   light::LightColorValues color = obj->current_values; | ||||||
|   float brightness, r, g, b, w; |   float brightness, r, g, b, w; | ||||||
|   color.as_brightness(&brightness); |   color.as_brightness(&brightness); | ||||||
|   color.as_rgbw(&r, &g, &b, &w); |   color.as_rgbw(&r, &g, &b, &w); | ||||||
|   stream->print(F("esphome_light_color{id=\"")); |   stream->print(ESPHOME_F("esphome_light_color{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",channel=\"brightness\"} ")); |   stream->print(ESPHOME_F("\",channel=\"brightness\"} ")); | ||||||
|   stream->print(brightness); |   stream->print(brightness); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   stream->print(F("esphome_light_color{id=\"")); |   stream->print(ESPHOME_F("esphome_light_color{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",channel=\"r\"} ")); |   stream->print(ESPHOME_F("\",channel=\"r\"} ")); | ||||||
|   stream->print(r); |   stream->print(r); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   stream->print(F("esphome_light_color{id=\"")); |   stream->print(ESPHOME_F("esphome_light_color{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",channel=\"g\"} ")); |   stream->print(ESPHOME_F("\",channel=\"g\"} ")); | ||||||
|   stream->print(g); |   stream->print(g); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   stream->print(F("esphome_light_color{id=\"")); |   stream->print(ESPHOME_F("esphome_light_color{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",channel=\"b\"} ")); |   stream->print(ESPHOME_F("\",channel=\"b\"} ")); | ||||||
|   stream->print(b); |   stream->print(b); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   stream->print(F("esphome_light_color{id=\"")); |   stream->print(ESPHOME_F("esphome_light_color{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",channel=\"w\"} ")); |   stream->print(ESPHOME_F("\",channel=\"w\"} ")); | ||||||
|   stream->print(w); |   stream->print(w); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   // Effect |   // Effect | ||||||
|   std::string effect = obj->get_effect_name(); |   std::string effect = obj->get_effect_name(); | ||||||
|   if (effect == "None") { |   if (effect == "None") { | ||||||
|     stream->print(F("esphome_light_effect_active{id=\"")); |     stream->print(ESPHOME_F("esphome_light_effect_active{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\",effect=\"None\"} 0\n")); |     stream->print(ESPHOME_F("\",effect=\"None\"} 0\n")); | ||||||
|   } else { |   } else { | ||||||
|     stream->print(F("esphome_light_effect_active{id=\"")); |     stream->print(ESPHOME_F("esphome_light_effect_active{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\",effect=\"")); |     stream->print(ESPHOME_F("\",effect=\"")); | ||||||
|     stream->print(effect.c_str()); |     stream->print(effect.c_str()); | ||||||
|     stream->print(F("\"} 1\n")); |     stream->print(ESPHOME_F("\"} 1\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_COVER | #ifdef USE_COVER | ||||||
| void PrometheusHandler::cover_type_(AsyncResponseStream *stream) { | void PrometheusHandler::cover_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_cover_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_cover_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_cover_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_cover_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *obj, std::string &area, std::string &node, | void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *obj, std::string &area, std::string &node, | ||||||
|                                    std::string &friendly_name) { |                                    std::string &friendly_name) { | ||||||
| @@ -393,118 +393,118 @@ void PrometheusHandler::cover_row_(AsyncResponseStream *stream, cover::Cover *ob | |||||||
|     return; |     return; | ||||||
|   if (!std::isnan(obj->position)) { |   if (!std::isnan(obj->position)) { | ||||||
|     // We have a valid value, output this value |     // We have a valid value, output this value | ||||||
|     stream->print(F("esphome_cover_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_cover_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 0\n")); |     stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|     // Data itself |     // Data itself | ||||||
|     stream->print(F("esphome_cover_value{id=\"")); |     stream->print(ESPHOME_F("esphome_cover_value{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(obj->position); |     stream->print(obj->position); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|     if (obj->get_traits().get_supports_tilt()) { |     if (obj->get_traits().get_supports_tilt()) { | ||||||
|       stream->print(F("esphome_cover_tilt{id=\"")); |       stream->print(ESPHOME_F("esphome_cover_tilt{id=\"")); | ||||||
|       stream->print(relabel_id_(obj).c_str()); |       stream->print(relabel_id_(obj).c_str()); | ||||||
|       add_area_label_(stream, area); |       add_area_label_(stream, area); | ||||||
|       add_node_label_(stream, node); |       add_node_label_(stream, node); | ||||||
|       add_friendly_name_label_(stream, friendly_name); |       add_friendly_name_label_(stream, friendly_name); | ||||||
|       stream->print(F("\",name=\"")); |       stream->print(ESPHOME_F("\",name=\"")); | ||||||
|       stream->print(relabel_name_(obj).c_str()); |       stream->print(relabel_name_(obj).c_str()); | ||||||
|       stream->print(F("\"} ")); |       stream->print(ESPHOME_F("\"} ")); | ||||||
|       stream->print(obj->tilt); |       stream->print(obj->tilt); | ||||||
|       stream->print(F("\n")); |       stream->print(ESPHOME_F("\n")); | ||||||
|     } |     } | ||||||
|   } else { |   } else { | ||||||
|     // Invalid state |     // Invalid state | ||||||
|     stream->print(F("esphome_cover_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_cover_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 1\n")); |     stream->print(ESPHOME_F("\"} 1\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_SWITCH | #ifdef USE_SWITCH | ||||||
| void PrometheusHandler::switch_type_(AsyncResponseStream *stream) { | void PrometheusHandler::switch_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_switch_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_switch_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_switch_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_switch_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::switch_row_(AsyncResponseStream *stream, switch_::Switch *obj, std::string &area, | void PrometheusHandler::switch_row_(AsyncResponseStream *stream, switch_::Switch *obj, std::string &area, | ||||||
|                                     std::string &node, std::string &friendly_name) { |                                     std::string &node, std::string &friendly_name) { | ||||||
|   if (obj->is_internal() && !this->include_internal_) |   if (obj->is_internal() && !this->include_internal_) | ||||||
|     return; |     return; | ||||||
|   stream->print(F("esphome_switch_failed{id=\"")); |   stream->print(ESPHOME_F("esphome_switch_failed{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} 0\n")); |   stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|   // Data itself |   // Data itself | ||||||
|   stream->print(F("esphome_switch_value{id=\"")); |   stream->print(ESPHOME_F("esphome_switch_value{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(obj->state); |   stream->print(obj->state); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_LOCK | #ifdef USE_LOCK | ||||||
| void PrometheusHandler::lock_type_(AsyncResponseStream *stream) { | void PrometheusHandler::lock_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_lock_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_lock_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_lock_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_lock_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::lock_row_(AsyncResponseStream *stream, lock::Lock *obj, std::string &area, std::string &node, | void PrometheusHandler::lock_row_(AsyncResponseStream *stream, lock::Lock *obj, std::string &area, std::string &node, | ||||||
|                                   std::string &friendly_name) { |                                   std::string &friendly_name) { | ||||||
|   if (obj->is_internal() && !this->include_internal_) |   if (obj->is_internal() && !this->include_internal_) | ||||||
|     return; |     return; | ||||||
|   stream->print(F("esphome_lock_failed{id=\"")); |   stream->print(ESPHOME_F("esphome_lock_failed{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} 0\n")); |   stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|   // Data itself |   // Data itself | ||||||
|   stream->print(F("esphome_lock_value{id=\"")); |   stream->print(ESPHOME_F("esphome_lock_value{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(obj->state); |   stream->print(obj->state); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // Type-specific implementation | // Type-specific implementation | ||||||
| #ifdef USE_TEXT_SENSOR | #ifdef USE_TEXT_SENSOR | ||||||
| void PrometheusHandler::text_sensor_type_(AsyncResponseStream *stream) { | void PrometheusHandler::text_sensor_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_text_sensor_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_text_sensor_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_text_sensor_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_text_sensor_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::text_sensor_row_(AsyncResponseStream *stream, text_sensor::TextSensor *obj, std::string &area, | void PrometheusHandler::text_sensor_row_(AsyncResponseStream *stream, text_sensor::TextSensor *obj, std::string &area, | ||||||
|                                          std::string &node, std::string &friendly_name) { |                                          std::string &node, std::string &friendly_name) { | ||||||
| @@ -512,37 +512,37 @@ void PrometheusHandler::text_sensor_row_(AsyncResponseStream *stream, text_senso | |||||||
|     return; |     return; | ||||||
|   if (obj->has_state()) { |   if (obj->has_state()) { | ||||||
|     // We have a valid value, output this value |     // We have a valid value, output this value | ||||||
|     stream->print(F("esphome_text_sensor_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_text_sensor_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 0\n")); |     stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|     // Data itself |     // Data itself | ||||||
|     stream->print(F("esphome_text_sensor_value{id=\"")); |     stream->print(ESPHOME_F("esphome_text_sensor_value{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\",value=\"")); |     stream->print(ESPHOME_F("\",value=\"")); | ||||||
|     stream->print(obj->state.c_str()); |     stream->print(obj->state.c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(F("1.0")); |     stream->print(ESPHOME_F("1.0")); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } else { |   } else { | ||||||
|     // Invalid state |     // Invalid state | ||||||
|     stream->print(F("esphome_text_sensor_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_text_sensor_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 1\n")); |     stream->print(ESPHOME_F("\"} 1\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
| @@ -550,8 +550,8 @@ void PrometheusHandler::text_sensor_row_(AsyncResponseStream *stream, text_senso | |||||||
| // Type-specific implementation | // Type-specific implementation | ||||||
| #ifdef USE_NUMBER | #ifdef USE_NUMBER | ||||||
| void PrometheusHandler::number_type_(AsyncResponseStream *stream) { | void PrometheusHandler::number_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_number_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_number_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_number_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_number_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::number_row_(AsyncResponseStream *stream, number::Number *obj, std::string &area, | void PrometheusHandler::number_row_(AsyncResponseStream *stream, number::Number *obj, std::string &area, | ||||||
|                                     std::string &node, std::string &friendly_name) { |                                     std::string &node, std::string &friendly_name) { | ||||||
| @@ -559,43 +559,43 @@ void PrometheusHandler::number_row_(AsyncResponseStream *stream, number::Number | |||||||
|     return; |     return; | ||||||
|   if (!std::isnan(obj->state)) { |   if (!std::isnan(obj->state)) { | ||||||
|     // We have a valid value, output this value |     // We have a valid value, output this value | ||||||
|     stream->print(F("esphome_number_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_number_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 0\n")); |     stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|     // Data itself |     // Data itself | ||||||
|     stream->print(F("esphome_number_value{id=\"")); |     stream->print(ESPHOME_F("esphome_number_value{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(obj->state); |     stream->print(obj->state); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } else { |   } else { | ||||||
|     // Invalid state |     // Invalid state | ||||||
|     stream->print(F("esphome_number_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_number_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 1\n")); |     stream->print(ESPHOME_F("\"} 1\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_SELECT | #ifdef USE_SELECT | ||||||
| void PrometheusHandler::select_type_(AsyncResponseStream *stream) { | void PrometheusHandler::select_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_select_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_select_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_select_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_select_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::select_row_(AsyncResponseStream *stream, select::Select *obj, std::string &area, | void PrometheusHandler::select_row_(AsyncResponseStream *stream, select::Select *obj, std::string &area, | ||||||
|                                     std::string &node, std::string &friendly_name) { |                                     std::string &node, std::string &friendly_name) { | ||||||
| @@ -603,105 +603,105 @@ void PrometheusHandler::select_row_(AsyncResponseStream *stream, select::Select | |||||||
|     return; |     return; | ||||||
|   if (obj->has_state()) { |   if (obj->has_state()) { | ||||||
|     // We have a valid value, output this value |     // We have a valid value, output this value | ||||||
|     stream->print(F("esphome_select_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_select_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 0\n")); |     stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|     // Data itself |     // Data itself | ||||||
|     stream->print(F("esphome_select_value{id=\"")); |     stream->print(ESPHOME_F("esphome_select_value{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\",value=\"")); |     stream->print(ESPHOME_F("\",value=\"")); | ||||||
|     stream->print(obj->state.c_str()); |     stream->print(obj->state.c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(F("1.0")); |     stream->print(ESPHOME_F("1.0")); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } else { |   } else { | ||||||
|     // Invalid state |     // Invalid state | ||||||
|     stream->print(F("esphome_select_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_select_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 1\n")); |     stream->print(ESPHOME_F("\"} 1\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_MEDIA_PLAYER | #ifdef USE_MEDIA_PLAYER | ||||||
| void PrometheusHandler::media_player_type_(AsyncResponseStream *stream) { | void PrometheusHandler::media_player_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_media_player_state_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_media_player_state_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_media_player_volume gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_media_player_volume gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_media_player_is_muted gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_media_player_is_muted gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_media_player_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_media_player_failed gauge\n")); | ||||||
| } | } | ||||||
| void PrometheusHandler::media_player_row_(AsyncResponseStream *stream, media_player::MediaPlayer *obj, | void PrometheusHandler::media_player_row_(AsyncResponseStream *stream, media_player::MediaPlayer *obj, | ||||||
|                                           std::string &area, std::string &node, std::string &friendly_name) { |                                           std::string &area, std::string &node, std::string &friendly_name) { | ||||||
|   if (obj->is_internal() && !this->include_internal_) |   if (obj->is_internal() && !this->include_internal_) | ||||||
|     return; |     return; | ||||||
|   stream->print(F("esphome_media_player_failed{id=\"")); |   stream->print(ESPHOME_F("esphome_media_player_failed{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} 0\n")); |   stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|   // Data itself |   // Data itself | ||||||
|   stream->print(F("esphome_media_player_state_value{id=\"")); |   stream->print(ESPHOME_F("esphome_media_player_state_value{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",value=\"")); |   stream->print(ESPHOME_F("\",value=\"")); | ||||||
|   stream->print(media_player::media_player_state_to_string(obj->state)); |   stream->print(media_player::media_player_state_to_string(obj->state)); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(F("1.0")); |   stream->print(ESPHOME_F("1.0")); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   stream->print(F("esphome_media_player_volume{id=\"")); |   stream->print(ESPHOME_F("esphome_media_player_volume{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(obj->volume); |   stream->print(obj->volume); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   stream->print(F("esphome_media_player_is_muted{id=\"")); |   stream->print(ESPHOME_F("esphome_media_player_is_muted{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   if (obj->is_muted()) { |   if (obj->is_muted()) { | ||||||
|     stream->print(F("1.0")); |     stream->print(ESPHOME_F("1.0")); | ||||||
|   } else { |   } else { | ||||||
|     stream->print(F("0.0")); |     stream->print(ESPHOME_F("0.0")); | ||||||
|   } |   } | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_UPDATE | #ifdef USE_UPDATE | ||||||
| void PrometheusHandler::update_entity_type_(AsyncResponseStream *stream) { | void PrometheusHandler::update_entity_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_update_entity_state gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_update_entity_state gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_update_entity_info gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_update_entity_info gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_update_entity_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_update_entity_failed gauge\n")); | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrometheusHandler::handle_update_state_(AsyncResponseStream *stream, update::UpdateState state) { | void PrometheusHandler::handle_update_state_(AsyncResponseStream *stream, update::UpdateState state) { | ||||||
| @@ -730,168 +730,168 @@ void PrometheusHandler::update_entity_row_(AsyncResponseStream *stream, update:: | |||||||
|     return; |     return; | ||||||
|   if (obj->has_state()) { |   if (obj->has_state()) { | ||||||
|     // We have a valid value, output this value |     // We have a valid value, output this value | ||||||
|     stream->print(F("esphome_update_entity_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_update_entity_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 0\n")); |     stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|     // First update state |     // First update state | ||||||
|     stream->print(F("esphome_update_entity_state{id=\"")); |     stream->print(ESPHOME_F("esphome_update_entity_state{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\",value=\"")); |     stream->print(ESPHOME_F("\",value=\"")); | ||||||
|     handle_update_state_(stream, obj->state); |     handle_update_state_(stream, obj->state); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(F("1.0")); |     stream->print(ESPHOME_F("1.0")); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|     // Next update info |     // Next update info | ||||||
|     stream->print(F("esphome_update_entity_info{id=\"")); |     stream->print(ESPHOME_F("esphome_update_entity_info{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\",current_version=\"")); |     stream->print(ESPHOME_F("\",current_version=\"")); | ||||||
|     stream->print(obj->update_info.current_version.c_str()); |     stream->print(obj->update_info.current_version.c_str()); | ||||||
|     stream->print(F("\",latest_version=\"")); |     stream->print(ESPHOME_F("\",latest_version=\"")); | ||||||
|     stream->print(obj->update_info.latest_version.c_str()); |     stream->print(obj->update_info.latest_version.c_str()); | ||||||
|     stream->print(F("\",title=\"")); |     stream->print(ESPHOME_F("\",title=\"")); | ||||||
|     stream->print(obj->update_info.title.c_str()); |     stream->print(obj->update_info.title.c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(F("1.0")); |     stream->print(ESPHOME_F("1.0")); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } else { |   } else { | ||||||
|     // Invalid state |     // Invalid state | ||||||
|     stream->print(F("esphome_update_entity_failed{id=\"")); |     stream->print(ESPHOME_F("esphome_update_entity_failed{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} 1\n")); |     stream->print(ESPHOME_F("\"} 1\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_VALVE | #ifdef USE_VALVE | ||||||
| void PrometheusHandler::valve_type_(AsyncResponseStream *stream) { | void PrometheusHandler::valve_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_valve_operation gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_valve_operation gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_valve_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_valve_failed gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_valve_position gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_valve_position gauge\n")); | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrometheusHandler::valve_row_(AsyncResponseStream *stream, valve::Valve *obj, std::string &area, std::string &node, | void PrometheusHandler::valve_row_(AsyncResponseStream *stream, valve::Valve *obj, std::string &area, std::string &node, | ||||||
|                                    std::string &friendly_name) { |                                    std::string &friendly_name) { | ||||||
|   if (obj->is_internal() && !this->include_internal_) |   if (obj->is_internal() && !this->include_internal_) | ||||||
|     return; |     return; | ||||||
|   stream->print(F("esphome_valve_failed{id=\"")); |   stream->print(ESPHOME_F("esphome_valve_failed{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\"} 0\n")); |   stream->print(ESPHOME_F("\"} 0\n")); | ||||||
|   // Data itself |   // Data itself | ||||||
|   stream->print(F("esphome_valve_operation{id=\"")); |   stream->print(ESPHOME_F("esphome_valve_operation{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",operation=\"")); |   stream->print(ESPHOME_F("\",operation=\"")); | ||||||
|   stream->print(valve::valve_operation_to_str(obj->current_operation)); |   stream->print(valve::valve_operation_to_str(obj->current_operation)); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(F("1.0")); |   stream->print(ESPHOME_F("1.0")); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
|   // Now see if position is supported |   // Now see if position is supported | ||||||
|   if (obj->get_traits().get_supports_position()) { |   if (obj->get_traits().get_supports_position()) { | ||||||
|     stream->print(F("esphome_valve_position{id=\"")); |     stream->print(ESPHOME_F("esphome_valve_position{id=\"")); | ||||||
|     stream->print(relabel_id_(obj).c_str()); |     stream->print(relabel_id_(obj).c_str()); | ||||||
|     add_area_label_(stream, area); |     add_area_label_(stream, area); | ||||||
|     add_node_label_(stream, node); |     add_node_label_(stream, node); | ||||||
|     add_friendly_name_label_(stream, friendly_name); |     add_friendly_name_label_(stream, friendly_name); | ||||||
|     stream->print(F("\",name=\"")); |     stream->print(ESPHOME_F("\",name=\"")); | ||||||
|     stream->print(relabel_name_(obj).c_str()); |     stream->print(relabel_name_(obj).c_str()); | ||||||
|     stream->print(F("\"} ")); |     stream->print(ESPHOME_F("\"} ")); | ||||||
|     stream->print(obj->position); |     stream->print(obj->position); | ||||||
|     stream->print(F("\n")); |     stream->print(ESPHOME_F("\n")); | ||||||
|   } |   } | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef USE_CLIMATE | #ifdef USE_CLIMATE | ||||||
| void PrometheusHandler::climate_type_(AsyncResponseStream *stream) { | void PrometheusHandler::climate_type_(AsyncResponseStream *stream) { | ||||||
|   stream->print(F("#TYPE esphome_climate_setting gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_climate_setting gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_climate_value gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_climate_value gauge\n")); | ||||||
|   stream->print(F("#TYPE esphome_climate_failed gauge\n")); |   stream->print(ESPHOME_F("#TYPE esphome_climate_failed gauge\n")); | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrometheusHandler::climate_setting_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, | void PrometheusHandler::climate_setting_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, | ||||||
|                                              std::string &node, std::string &friendly_name, std::string &setting, |                                              std::string &node, std::string &friendly_name, std::string &setting, | ||||||
|                                              const LogString *setting_value) { |                                              const LogString *setting_value) { | ||||||
|   stream->print(F("esphome_climate_setting{id=\"")); |   stream->print(ESPHOME_F("esphome_climate_setting{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",category=\"")); |   stream->print(ESPHOME_F("\",category=\"")); | ||||||
|   stream->print(setting.c_str()); |   stream->print(setting.c_str()); | ||||||
|   stream->print(F("\",setting_value=\"")); |   stream->print(ESPHOME_F("\",setting_value=\"")); | ||||||
|   stream->print(LOG_STR_ARG(setting_value)); |   stream->print(LOG_STR_ARG(setting_value)); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(F("1.0")); |   stream->print(ESPHOME_F("1.0")); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrometheusHandler::climate_value_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, | void PrometheusHandler::climate_value_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, | ||||||
|                                            std::string &node, std::string &friendly_name, std::string &category, |                                            std::string &node, std::string &friendly_name, std::string &category, | ||||||
|                                            std::string &climate_value) { |                                            std::string &climate_value) { | ||||||
|   stream->print(F("esphome_climate_value{id=\"")); |   stream->print(ESPHOME_F("esphome_climate_value{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",category=\"")); |   stream->print(ESPHOME_F("\",category=\"")); | ||||||
|   stream->print(category.c_str()); |   stream->print(category.c_str()); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   stream->print(climate_value.c_str()); |   stream->print(climate_value.c_str()); | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrometheusHandler::climate_failed_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, | void PrometheusHandler::climate_failed_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, | ||||||
|                                             std::string &node, std::string &friendly_name, std::string &category, |                                             std::string &node, std::string &friendly_name, std::string &category, | ||||||
|                                             bool is_failed_value) { |                                             bool is_failed_value) { | ||||||
|   stream->print(F("esphome_climate_failed{id=\"")); |   stream->print(ESPHOME_F("esphome_climate_failed{id=\"")); | ||||||
|   stream->print(relabel_id_(obj).c_str()); |   stream->print(relabel_id_(obj).c_str()); | ||||||
|   add_area_label_(stream, area); |   add_area_label_(stream, area); | ||||||
|   add_node_label_(stream, node); |   add_node_label_(stream, node); | ||||||
|   add_friendly_name_label_(stream, friendly_name); |   add_friendly_name_label_(stream, friendly_name); | ||||||
|   stream->print(F("\",name=\"")); |   stream->print(ESPHOME_F("\",name=\"")); | ||||||
|   stream->print(relabel_name_(obj).c_str()); |   stream->print(relabel_name_(obj).c_str()); | ||||||
|   stream->print(F("\",category=\"")); |   stream->print(ESPHOME_F("\",category=\"")); | ||||||
|   stream->print(category.c_str()); |   stream->print(category.c_str()); | ||||||
|   stream->print(F("\"} ")); |   stream->print(ESPHOME_F("\"} ")); | ||||||
|   if (is_failed_value) { |   if (is_failed_value) { | ||||||
|     stream->print(F("1.0")); |     stream->print(ESPHOME_F("1.0")); | ||||||
|   } else { |   } else { | ||||||
|     stream->print(F("0.0")); |     stream->print(ESPHOME_F("0.0")); | ||||||
|   } |   } | ||||||
|   stream->print(F("\n")); |   stream->print(ESPHOME_F("\n")); | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrometheusHandler::climate_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, | void PrometheusHandler::climate_row_(AsyncResponseStream *stream, climate::Climate *obj, std::string &area, | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ class TextTraits { | |||||||
|   int get_max_length() const { return this->max_length_; } |   int get_max_length() const { return this->max_length_; } | ||||||
|  |  | ||||||
|   // Set/get the pattern. |   // Set/get the pattern. | ||||||
|   void set_pattern(std::string pattern) { this->pattern_ = std::move(pattern); } |   void set_pattern(const std::string &pattern) { this->pattern_ = pattern; } | ||||||
|   std::string get_pattern() const { return this->pattern_; } |   std::string get_pattern() const { return this->pattern_; } | ||||||
|   StringRef get_pattern_ref() const { return StringRef(this->pattern_); } |   StringRef get_pattern_ref() const { return StringRef(this->pattern_); } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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); | ||||||
| @@ -301,7 +301,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); | ||||||
| @@ -1776,15 +1776,15 @@ 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 | ||||||
|       "/0.css", |     "/0.css", | ||||||
| #endif | #endif | ||||||
| #ifdef USE_WEBSERVER_JS_INCLUDE | #ifdef USE_WEBSERVER_JS_INCLUDE | ||||||
|       "/0.js", |     "/0.js", | ||||||
| #endif | #endif | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
| @@ -1905,7 +1905,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 | ||||||
|   | |||||||
| @@ -34,23 +34,23 @@ void WebServer::set_js_url(const char *js_url) { this->js_url_ = js_url; } | |||||||
| 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"); | ||||||
|   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(ESPHOME_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(ESPHOME_F("</title>")); | ||||||
| #ifdef USE_WEBSERVER_CSS_INCLUDE | #ifdef USE_WEBSERVER_CSS_INCLUDE | ||||||
|   stream->print(F("<link rel=\"stylesheet\" href=\"/0.css\">")); |   stream->print(ESPHOME_F("<link rel=\"stylesheet\" href=\"/0.css\">")); | ||||||
| #endif | #endif | ||||||
|   if (strlen(this->css_url_) > 0) { |   if (strlen(this->css_url_) > 0) { | ||||||
|     stream->print(F(R"(<link rel="stylesheet" href=")")); |     stream->print(ESPHOME_F(R"(<link rel="stylesheet" href=")")); | ||||||
|     stream->print(this->css_url_); |     stream->print(this->css_url_); | ||||||
|     stream->print(F("\">")); |     stream->print(ESPHOME_F("\">")); | ||||||
|   } |   } | ||||||
|   stream->print(F("</head><body>")); |   stream->print(ESPHOME_F("</head><body>")); | ||||||
|   stream->print(F("<article class=\"markdown-body\"><h1>")); |   stream->print(ESPHOME_F("<article class=\"markdown-body\"><h1>")); | ||||||
|   stream->print(title.c_str()); |   stream->print(title.c_str()); | ||||||
|   stream->print(F("</h1>")); |   stream->print(ESPHOME_F("</h1>")); | ||||||
|   stream->print(F("<h2>States</h2><table id=\"states\"><thead><tr><th>Name<th>State<th>Actions<tbody>")); |   stream->print(ESPHOME_F("<h2>States</h2><table id=\"states\"><thead><tr><th>Name<th>State<th>Actions<tbody>")); | ||||||
|  |  | ||||||
| #ifdef USE_SENSOR | #ifdef USE_SENSOR | ||||||
|   for (auto *obj : App.get_sensors()) { |   for (auto *obj : App.get_sensors()) { | ||||||
| @@ -190,26 +190,28 @@ void WebServer::handle_index_request(AsyncWebServerRequest *request) { | |||||||
|   } |   } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   stream->print(F("</tbody></table><p>See <a href=\"https://esphome.io/web-api/index.html\">ESPHome Web API</a> for " |   stream->print( | ||||||
|                   "REST API documentation.</p>")); |       ESPHOME_F("</tbody></table><p>See <a href=\"https://esphome.io/web-api/index.html\">ESPHome Web API</a> for " | ||||||
|  |                 "REST API documentation.</p>")); | ||||||
| #if defined(USE_WEBSERVER_OTA) && !defined(USE_WEBSERVER_OTA_DISABLED) | #if defined(USE_WEBSERVER_OTA) && !defined(USE_WEBSERVER_OTA_DISABLED) | ||||||
|   // Show OTA form only if web_server OTA is not explicitly disabled |   // Show OTA form only if web_server OTA is not explicitly disabled | ||||||
|   // Note: USE_WEBSERVER_OTA_DISABLED only affects web_server, not captive_portal |   // Note: USE_WEBSERVER_OTA_DISABLED only affects web_server, not captive_portal | ||||||
|   stream->print(F("<h2>OTA Update</h2><form method=\"POST\" action=\"/update\" enctype=\"multipart/form-data\"><input " |   stream->print( | ||||||
|                   "type=\"file\" name=\"update\"><input type=\"submit\" value=\"Update\"></form>")); |       ESPHOME_F("<h2>OTA Update</h2><form method=\"POST\" action=\"/update\" enctype=\"multipart/form-data\"><input " | ||||||
|  |                 "type=\"file\" name=\"update\"><input type=\"submit\" value=\"Update\"></form>")); | ||||||
| #endif | #endif | ||||||
|   stream->print(F("<h2>Debug Log</h2><pre id=\"log\"></pre>")); |   stream->print(ESPHOME_F("<h2>Debug Log</h2><pre id=\"log\"></pre>")); | ||||||
| #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(ESPHOME_F("<script type=\"module\" src=\"/0.js\"></script>")); | ||||||
|   } |   } | ||||||
| #endif | #endif | ||||||
|   if (strlen(this->js_url_) > 0) { |   if (strlen(this->js_url_) > 0) { | ||||||
|     stream->print(F("<script src=\"")); |     stream->print(ESPHOME_F("<script src=\"")); | ||||||
|     stream->print(this->js_url_); |     stream->print(this->js_url_); | ||||||
|     stream->print(F("\"></script>")); |     stream->print(ESPHOME_F("\"></script>")); | ||||||
|   } |   } | ||||||
|   stream->print(F("</article></body></html>")); |   stream->print(ESPHOME_F("</article></body></html>")); | ||||||
|   request->send(stream); |   request->send(stream); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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,31 @@ | |||||||
|  |  | ||||||
| #include "esphome/core/component.h" | #include "esphome/core/component.h" | ||||||
|  |  | ||||||
| #ifdef USE_ARDUINO | // Platform-agnostic macros for web server components | ||||||
| #include <ESPAsyncWebServer.h> | // On ESP32 (both Arduino and IDF): Use plain strings (no PROGMEM) | ||||||
| #elif USE_ESP_IDF | // On ESP8266: Use Arduino's F() macro for PROGMEM strings | ||||||
|  | #ifdef USE_ESP32 | ||||||
|  | #define ESPHOME_F(string_literal) (string_literal) | ||||||
|  | #define ESPHOME_PGM_P const char * | ||||||
|  | #define ESPHOME_strncpy_P strncpy | ||||||
|  | #else | ||||||
|  | // ESP8266 uses Arduino macros | ||||||
|  | #define ESPHOME_F(string_literal) F(string_literal) | ||||||
|  | #define ESPHOME_PGM_P PGM_P | ||||||
|  | #define ESPHOME_strncpy_P strncpy_P | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | #if USE_ESP32 | ||||||
| #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" | ||||||
|  | #else | ||||||
|  | #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 +48,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 +85,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); | ||||||
| @@ -111,8 +131,8 @@ class WebServerBase : public Component { | |||||||
|   float get_setup_priority() const override; |   float get_setup_priority() const override; | ||||||
|  |  | ||||||
| #ifdef USE_WEBSERVER_AUTH | #ifdef USE_WEBSERVER_AUTH | ||||||
|   void set_auth_username(std::string auth_username) { credentials_.username = std::move(auth_username); } |   void set_auth_username(const std::string &auth_username) { credentials_.username = auth_username; } | ||||||
|   void set_auth_password(std::string auth_password) { credentials_.password = std::move(auth_password); } |   void set_auth_password(const std::string &auth_password) { credentials_.password = auth_password; } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|   void add_handler(AsyncWebHandler *handler); |   void add_handler(AsyncWebHandler *handler); | ||||||
|   | |||||||
| @@ -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> | ||||||
| @@ -35,7 +35,7 @@ class MultipartReader { | |||||||
|  |  | ||||||
|   // Set callbacks for handling data |   // Set callbacks for handling data | ||||||
|   void set_data_callback(DataCallback callback) { data_callback_ = std::move(callback); } |   void set_data_callback(DataCallback callback) { data_callback_ = std::move(callback); } | ||||||
|   void set_part_complete_callback(PartCompleteCallback callback) { part_complete_callback_ = std::move(callback); } |   void set_part_complete_callback(const PartCompleteCallback &callback) { part_complete_callback_ = callback; } | ||||||
|  |  | ||||||
|   // Parse incoming data |   // Parse incoming data | ||||||
|   size_t parse(const char *data, size_t len); |   size_t parse(const char *data, size_t len); | ||||||
| @@ -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> | ||||||
| @@ -727,4 +727,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,12 +22,6 @@ class ListEntitiesIterator; | |||||||
| #endif | #endif | ||||||
| namespace web_server_idf { | namespace web_server_idf { | ||||||
|  |  | ||||||
| #define F(string_literal) (string_literal) |  | ||||||
| #define PGM_P const char * |  | ||||||
| #define strncpy_P strncpy |  | ||||||
|  |  | ||||||
| using String = std::string; |  | ||||||
|  |  | ||||||
| class AsyncWebParameter { | class AsyncWebParameter { | ||||||
|  public: |  public: | ||||||
|   AsyncWebParameter(std::string value) : value_(std::move(value)) {} |   AsyncWebParameter(std::string value) : value_(std::move(value)) {} | ||||||
| @@ -343,4 +337,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) | ||||||
|   | |||||||
| @@ -1169,7 +1169,7 @@ UNIT_KILOMETER = "km" | |||||||
| UNIT_KILOMETER_PER_HOUR = "km/h" | UNIT_KILOMETER_PER_HOUR = "km/h" | ||||||
| UNIT_KILOVOLT_AMPS = "kVA" | UNIT_KILOVOLT_AMPS = "kVA" | ||||||
| UNIT_KILOVOLT_AMPS_HOURS = "kVAh" | UNIT_KILOVOLT_AMPS_HOURS = "kVAh" | ||||||
| UNIT_KILOVOLT_AMPS_REACTIVE = "kVAR" | UNIT_KILOVOLT_AMPS_REACTIVE = "kvar" | ||||||
| UNIT_KILOVOLT_AMPS_REACTIVE_HOURS = "kvarh" | UNIT_KILOVOLT_AMPS_REACTIVE_HOURS = "kvarh" | ||||||
| UNIT_KILOWATT = "kW" | UNIT_KILOWATT = "kW" | ||||||
| UNIT_KILOWATT_HOURS = "kWh" | UNIT_KILOWATT_HOURS = "kWh" | ||||||
|   | |||||||
| @@ -72,7 +72,6 @@ lib_deps = | |||||||
|     SPI                                                   ; spi (Arduino built-in) |     SPI                                                   ; spi (Arduino built-in) | ||||||
|     Wire                                                  ; i2c (Arduino built-int) |     Wire                                                  ; i2c (Arduino built-int) | ||||||
|     heman/AsyncMqttClient-esphome@1.0.0                   ; mqtt |     heman/AsyncMqttClient-esphome@1.0.0                   ; mqtt | ||||||
|     ESP32Async/ESPAsyncWebServer@3.7.8                    ; web_server_base |  | ||||||
|     fastled/FastLED@3.9.16                                ; fastled_base |     fastled/FastLED@3.9.16                                ; fastled_base | ||||||
|     freekode/TM1651@1.0.1                                 ; tm1651 |     freekode/TM1651@1.0.1                                 ; tm1651 | ||||||
|     glmnet/Dsmr@0.7                                       ; dsmr |     glmnet/Dsmr@0.7                                       ; dsmr | ||||||
| @@ -107,6 +106,7 @@ lib_deps = | |||||||
|     ESP8266WiFi                           ; wifi (Arduino built-in) |     ESP8266WiFi                           ; wifi (Arduino built-in) | ||||||
|     Update                                ; ota (Arduino built-in) |     Update                                ; ota (Arduino built-in) | ||||||
|     ESP32Async/ESPAsyncTCP@2.0.0          ; async_tcp |     ESP32Async/ESPAsyncTCP@2.0.0          ; async_tcp | ||||||
|  |     ESP32Async/ESPAsyncWebServer@3.7.8    ; web_server_base | ||||||
|     makuna/NeoPixelBus@2.7.3              ; neopixelbus |     makuna/NeoPixelBus@2.7.3              ; neopixelbus | ||||||
|     ESP8266HTTPClient                     ; http_request (Arduino built-in) |     ESP8266HTTPClient                     ; http_request (Arduino built-in) | ||||||
|     ESP8266mDNS                           ; mdns (Arduino built-in) |     ESP8266mDNS                           ; mdns (Arduino built-in) | ||||||
| @@ -129,7 +129,7 @@ platform = https://github.com/pioarduino/platform-espressif32/releases/download/ | |||||||
| platform_packages = | platform_packages = | ||||||
|     pioarduino/framework-arduinoespressif32@https://github.com/espressif/arduino-esp32/releases/download/3.2.1/esp32-3.2.1.zip |     pioarduino/framework-arduinoespressif32@https://github.com/espressif/arduino-esp32/releases/download/3.2.1/esp32-3.2.1.zip | ||||||
|  |  | ||||||
| framework = arduino | framework = arduino, espidf  ; Arduino as an ESP-IDF component | ||||||
| lib_deps = | lib_deps = | ||||||
|     ; order matters with lib-deps; some of the libs in common:arduino.lib_deps |     ; order matters with lib-deps; some of the libs in common:arduino.lib_deps | ||||||
|     ; don't declare built-in libraries as dependencies, so they have to be declared first |     ; don't declare built-in libraries as dependencies, so they have to be declared first | ||||||
| @@ -193,6 +193,7 @@ platform_packages = | |||||||
| framework = arduino | framework = arduino | ||||||
| lib_deps = | lib_deps = | ||||||
|     ${common:arduino.lib_deps} |     ${common:arduino.lib_deps} | ||||||
|  |     ESP32Async/ESPAsyncWebServer@3.7.8    ; web_server_base | ||||||
| build_flags = | build_flags = | ||||||
|     ${common:arduino.build_flags} |     ${common:arduino.build_flags} | ||||||
|     -DUSE_RP2040 |     -DUSE_RP2040 | ||||||
| @@ -207,7 +208,8 @@ platform = libretiny@1.9.1 | |||||||
| framework = arduino | framework = arduino | ||||||
| lib_compat_mode = soft | lib_compat_mode = soft | ||||||
| lib_deps = | lib_deps = | ||||||
|     droscy/esp_wireguard@0.4.2    ; wireguard |     ESP32Async/ESPAsyncWebServer@3.7.8    ; web_server_base | ||||||
|  |     droscy/esp_wireguard@0.4.2            ; wireguard | ||||||
| build_flags = | build_flags = | ||||||
|     ${common:arduino.build_flags} |     ${common:arduino.build_flags} | ||||||
|     -DUSE_LIBRETINY |     -DUSE_LIBRETINY | ||||||
| @@ -274,6 +276,7 @@ build_unflags = | |||||||
| [env:esp32-arduino-tidy] | [env:esp32-arduino-tidy] | ||||||
| extends = common:esp32-arduino | extends = common:esp32-arduino | ||||||
| board = esp32dev | board = esp32dev | ||||||
|  | board_build.esp-idf.sdkconfig_path = .temp/sdkconfig-esp32-arduino-tidy | ||||||
| build_flags = | build_flags = | ||||||
|     ${common:esp32-arduino.build_flags} |     ${common:esp32-arduino.build_flags} | ||||||
|     ${flags:clangtidy.build_flags} |     ${flags:clangtidy.build_flags} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user