/ firmware / src / services / http / api / sensors / current.cpp
current.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_get(AsyncWebServerRequest *request) {
11    CurrentSensorData sensor_data = {};
12    bool ok = sensors::manager::accessCurrent(&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["current_mA"] = sensor_data.current_mA;
20      data["bus_voltage_V"] = sensor_data.bus_voltage_V;
21      data["shunt_voltage_mV"] = sensor_data.shunt_voltage_mV;
22      data["power_mW"] = sensor_data.power_mW;
23      data["energy_J"] = sensor_data.energy_J;
24      data["charge_C"] = sensor_data.charge_C;
25      data["die_temperature_C"] = sensor_data.die_temperature_C;
26    }
27    response->setLength();
28    request->send(response);
29  }
30  
31  }
32  
33  void services::http::api::sensors::current::registerRoutes(AsyncWebServer &server) {
34    server.on("/api/sensors/current", HTTP_GET, handle_get);
35  }