mirror of
https://github.com/esphome/esphome.git
synced 2025-02-22 04:48:21 +00:00
[web_server] expose event compoent to REST (#7587)
This commit is contained in:
parent
cf14c02b8a
commit
654cee6f83
@ -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) {
|
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");
|
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) {
|
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) {
|
return json::build_json([this, obj, event_type, start_config](JsonObject root) {
|
||||||
set_json_id(root, obj, "event-" + obj->get_object_id(), start_config);
|
set_json_id(root, obj, "event-" + obj->get_object_id(), start_config);
|
||||||
@ -1651,6 +1668,11 @@ bool WebServer::canHandle(AsyncWebServerRequest *request) {
|
|||||||
return true;
|
return true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_EVENT
|
||||||
|
if (request->method() == HTTP_GET && match.domain == "event")
|
||||||
|
return true;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_UPDATE
|
#ifdef USE_UPDATE
|
||||||
if ((request->method() == HTTP_POST || request->method() == HTTP_GET) && match.domain == "update")
|
if ((request->method() == HTTP_POST || request->method() == HTTP_GET) && match.domain == "update")
|
||||||
return true;
|
return true;
|
||||||
|
@ -322,6 +322,9 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
|
|||||||
#ifdef USE_EVENT
|
#ifdef USE_EVENT
|
||||||
void on_event(event::Event *obj, const std::string &event_type) override;
|
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.
|
/// 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);
|
std::string event_json(event::Event *obj, const std::string &event_type, JsonDetail start_config);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user