co2.cpp
1 #include "routes.h" 2 #include "sensors/carbon_dioxide.h" 3 #include <manager.h> 4 5 #include <ESPAsyncWebServer.h> 6 #include <AsyncJson.h> 7 #include <ArduinoJson.h> 8 9 namespace { 10 11 void handle_config_get(AsyncWebServerRequest *request) { 12 Co2Config config = {}; 13 ::sensors::carbon_dioxide::accessConfig(&config); 14 15 AsyncJsonResponse *response = new AsyncJsonResponse(); 16 JsonObject root = response->getRoot().to<JsonObject>(); 17 root["ok"] = ::sensors::carbon_dioxide::isAvailable(); 18 JsonObject data = root["data"].to<JsonObject>(); 19 data["model"] = config.model; 20 data["measuring"] = config.measuring; 21 data["measurement_interval_seconds"] = config.measurement_interval_seconds; 22 data["auto_calibration_enabled"] = config.auto_calibration_enabled; 23 data["temperature_offset_celsius"] = config.temperature_offset_celsius; 24 data["altitude_meters"] = config.altitude_meters; 25 response->setLength(); 26 request->send(response); 27 } 28 29 void handle_start(AsyncWebServerRequest *request) { 30 bool ok = ::sensors::carbon_dioxide::enable(); 31 AsyncJsonResponse *response = new AsyncJsonResponse(); 32 JsonObject root = response->getRoot().to<JsonObject>(); 33 root["ok"] = ok; 34 response->setLength(); 35 request->send(response); 36 } 37 38 void handle_stop(AsyncWebServerRequest *request) { 39 bool ok = ::sensors::carbon_dioxide::disable(); 40 AsyncJsonResponse *response = new AsyncJsonResponse(); 41 JsonObject root = response->getRoot().to<JsonObject>(); 42 root["ok"] = ok; 43 response->setLength(); 44 request->send(response); 45 } 46 47 } 48 49 void services::http::api::sensors::co2::registerRoutes(AsyncWebServer &server) { 50 server.on("/api/co2/config", HTTP_GET, handle_config_get); 51 server.on("/api/co2/start", HTTP_POST, handle_start); 52 server.on("/api/co2/stop", HTTP_POST, handle_stop); 53 54 AsyncCallbackJsonWebHandler &config_handler = 55 server.on("/api/co2/config", HTTP_POST, 56 [](AsyncWebServerRequest *request, JsonVariant &json) { 57 JsonObject body = json.as<JsonObject>(); 58 if (!body["measurement_interval_seconds"].isNull()) 59 ::sensors::carbon_dioxide::configureInterval(body["measurement_interval_seconds"]); 60 if (!body["auto_calibration_enabled"].isNull()) 61 ::sensors::carbon_dioxide::configureAutoCalibration(body["auto_calibration_enabled"]); 62 if (!body["temperature_offset_celsius"].isNull()) 63 ::sensors::carbon_dioxide::configureTemperatureOffset(body["temperature_offset_celsius"]); 64 if (!body["altitude_meters"].isNull()) 65 ::sensors::carbon_dioxide::configureAltitude(body["altitude_meters"]); 66 if (!body["forced_recalibration_ppm"].isNull()) 67 ::sensors::carbon_dioxide::configureRecalibration(body["forced_recalibration_ppm"]); 68 69 Co2Config config = {}; 70 ::sensors::carbon_dioxide::accessConfig(&config); 71 AsyncJsonResponse *response = new AsyncJsonResponse(); 72 JsonObject root = response->getRoot().to<JsonObject>(); 73 root["ok"] = ::sensors::carbon_dioxide::isAvailable(); 74 JsonObject data = root["data"].to<JsonObject>(); 75 data["model"] = config.model; 76 data["measuring"] = config.measuring; 77 data["measurement_interval_seconds"] = config.measurement_interval_seconds; 78 data["auto_calibration_enabled"] = config.auto_calibration_enabled; 79 data["temperature_offset_celsius"] = config.temperature_offset_celsius; 80 data["altitude_meters"] = config.altitude_meters; 81 response->setLength(); 82 request->send(response); 83 }); 84 config_handler.setMaxContentLength(512); 85 }