/ firmware / src / services / http / api / sensors / wind.cpp
wind.cpp
 1  #include "routes.h"
 2  #include <manager.h>
 3  
 4  #include <ESPAsyncWebServer.h>
 5  #include <AsyncJson.h>
 6  #include <ArduinoJson.h>
 7  
 8  namespace {
 9  
10  void handle_speed_get(AsyncWebServerRequest *request) {
11    WindSpeedSensorData sensor_data = {};
12    bool ok = sensors::manager::accessWindSpeed(&sensor_data);
13  
14    AsyncJsonResponse *response = new AsyncJsonResponse();
15    JsonObject root = response->getRoot().to<JsonObject>();
16    root["ok"] = ok && sensor_data.ok;
17    JsonObject data = root["data"].to<JsonObject>();
18    if (ok && sensor_data.ok) {
19      data["wind_speed_kilometers_per_hour"] = sensor_data.kilometers_per_hour;
20    }
21    response->setLength();
22    request->send(response);
23  }
24  
25  void handle_direction_get(AsyncWebServerRequest *request) {
26    WindDirectionSensorData sensor_data = {};
27    bool ok = sensors::manager::accessWindDirection(&sensor_data);
28  
29    AsyncJsonResponse *response = new AsyncJsonResponse();
30    JsonObject root = response->getRoot().to<JsonObject>();
31    root["ok"] = ok && sensor_data.ok;
32    JsonObject data = root["data"].to<JsonObject>();
33    if (ok && sensor_data.ok) {
34      data["wind_direction_degrees"] = sensor_data.degrees;
35      data["wind_direction_angle_slice"] = sensor_data.slice;
36    }
37    response->setLength();
38    request->send(response);
39  }
40  
41  }
42  
43  void services::http::api::sensors::wind::registerRoutes(AsyncWebServer &server) {
44    server.on("/api/sensors/wind/speed", HTTP_GET, handle_speed_get);
45    server.on("/api/sensors/wind/direction", HTTP_GET, handle_direction_get);
46  }