mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 15:12:06 +00:00 
			
		
		
		
	[web_server] expose event compoent to REST (#7587)
This commit is contained in:
		| @@ -1441,7 +1441,24 @@ std::string WebServer::alarm_control_panel_json(alarm_control_panel::AlarmContro | ||||
| void WebServer::on_event(event::Event *obj, const std::string &event_type) { | ||||
|   this->events_.send(this->event_json(obj, event_type, DETAIL_STATE).c_str(), "state"); | ||||
| } | ||||
| void WebServer::handle_event_request(AsyncWebServerRequest *request, const UrlMatch &match) { | ||||
|   for (event::Event *obj : App.get_events()) { | ||||
|     if (obj->get_object_id() != match.id) | ||||
|       continue; | ||||
|  | ||||
|     if (request->method() == HTTP_GET && match.method.empty()) { | ||||
|       auto detail = DETAIL_STATE; | ||||
|       auto *param = request->getParam("detail"); | ||||
|       if (param && param->value() == "all") { | ||||
|         detail = DETAIL_ALL; | ||||
|       } | ||||
|       std::string data = this->event_json(obj, "", detail); | ||||
|       request->send(200, "application/json", data.c_str()); | ||||
|       return; | ||||
|     } | ||||
|   } | ||||
|   request->send(404); | ||||
| } | ||||
| std::string WebServer::event_json(event::Event *obj, const std::string &event_type, JsonDetail start_config) { | ||||
|   return json::build_json([this, obj, event_type, start_config](JsonObject root) { | ||||
|     set_json_id(root, obj, "event-" + obj->get_object_id(), start_config); | ||||
| @@ -1651,6 +1668,11 @@ bool WebServer::canHandle(AsyncWebServerRequest *request) { | ||||
|     return true; | ||||
| #endif | ||||
|  | ||||
| #ifdef USE_EVENT | ||||
|   if (request->method() == HTTP_GET && match.domain == "event") | ||||
|     return true; | ||||
| #endif | ||||
|  | ||||
| #ifdef USE_UPDATE | ||||
|   if ((request->method() == HTTP_POST || request->method() == HTTP_GET) && match.domain == "update") | ||||
|     return true; | ||||
|   | ||||
| @@ -322,6 +322,9 @@ class WebServer : public Controller, public Component, public AsyncWebHandler { | ||||
| #ifdef USE_EVENT | ||||
|   void on_event(event::Event *obj, const std::string &event_type) override; | ||||
|  | ||||
|   /// Handle a event request under '/event<id>'. | ||||
|   void handle_event_request(AsyncWebServerRequest *request, const UrlMatch &match); | ||||
|  | ||||
|   /// Dump the event details with its value as a JSON string. | ||||
|   std::string event_json(event::Event *obj, const std::string &event_type, JsonDetail start_config); | ||||
| #endif | ||||
|   | ||||
		Reference in New Issue
	
	Block a user