Add light status API endpoint, UI update

This commit is contained in:
Djuri Baars 2023-11-17 22:09:28 +01:00
parent 8d94cb4090
commit 909500fe2e
5 changed files with 52 additions and 7 deletions

2
data

@ -1 +1 @@
Subproject commit e14e85425eb7a5fdc1d5aab6f4ae091f93ab45a7 Subproject commit 58fa1e7ecb49388bc4b59444ab3f5af7b3219699

View File

@ -25,6 +25,7 @@ build_flags =
!python scripts/git_rev.py !python scripts/git_rev.py
-DLAST_BUILD_TIME=$UNIX_TIME -DLAST_BUILD_TIME=$UNIX_TIME
-DARDUINO_USB_CDC_ON_BOOT -DARDUINO_USB_CDC_ON_BOOT
-DCORE_DEBUG_LEVEL=0
-fexceptions -fexceptions
build_unflags = build_unflags =
-Werror=all -Werror=all

View File

@ -224,6 +224,14 @@ std::vector<std::string> getScreenNameMap()
void setupHardware() void setupHardware()
{ {
if (!LittleFS.begin(true))
{
Serial.println(F("An Error has occurred while mounting LittleFS"));
}
if(!LittleFS.open("/index.html", "r")) {
Serial.println("Error loading WebUI");
}
setupLeds(); setupLeds();
WiFi.setHostname(getMyHostname().c_str()); WiFi.setHostname(getMyHostname().c_str());

View File

@ -6,11 +6,7 @@ TaskHandle_t eventSourceTaskHandle;
void setupWebserver() void setupWebserver()
{ {
if (!LittleFS.begin(true))
{
Serial.println(F("An Error has occurred while mounting LittleFS"));
return;
}
events.onConnect([](AsyncEventSourceClient *client) events.onConnect([](AsyncEventSourceClient *client)
{ client->send("welcome", NULL, millis(), 1000); }); { client->send("welcome", NULL, millis(), 1000); });
@ -19,7 +15,7 @@ void setupWebserver()
// server.serveStatic("/css", LittleFS, "/css/"); // server.serveStatic("/css", LittleFS, "/css/");
// server.serveStatic("/js", LittleFS, "/js/"); // server.serveStatic("/js", LittleFS, "/js/");
server.serveStatic("/build", LittleFS, "/build"); server.serveStatic("/build", LittleFS, "/build");
server.serveStatic("/api.json", LittleFS, "/api.json"); server.serveStatic("/swagger.json", LittleFS, "/swagger.json");
server.serveStatic("/api.html", LittleFS, "/api.html"); server.serveStatic("/api.html", LittleFS, "/api.html");
server.on("/", HTTP_GET, onIndex); server.on("/", HTTP_GET, onIndex);
@ -45,6 +41,7 @@ void setupWebserver()
server.on("/api/lights/off", HTTP_GET, onApiLightsOff); server.on("/api/lights/off", HTTP_GET, onApiLightsOff);
server.on("/api/lights/color", HTTP_GET, onApiLightsSetColor); server.on("/api/lights/color", HTTP_GET, onApiLightsSetColor);
server.on("/api/lights", HTTP_GET, onApiLightsStatus);
// server.on("^\\/api\\/lights\\/([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", HTTP_GET, onApiLightsSetColor); // server.on("^\\/api\\/lights\\/([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$", HTTP_GET, onApiLightsSetColor);
@ -108,12 +105,40 @@ StaticJsonDocument<768> getStatusObject()
return root; return root;
} }
StaticJsonDocument<512> getLedStatusObject()
{
StaticJsonDocument<512> root;
JsonArray colors = root.createNestedArray("data");
// Adafruit_NeoPixel pix = getPixels();
for (uint i = 0; i < pixels.numPixels(); i++) {
uint32_t pixColor = pixels.getPixelColor(i);
uint alpha = (pixColor >> 24) & 0xFF;
uint red = (pixColor >> 16) & 0xFF;
uint green = (pixColor >> 8) & 0xFF;
uint blue = pixColor & 0xFF;
char hexColor[8];
sprintf(hexColor, "#%02X%02X%02X", red, green, blue);
JsonObject object = colors.createNestedObject();
object["red"] = red;
object["green"] = green;
object["blue"] = blue;
object["hex"] = hexColor;
}
return root;
}
void eventSourceUpdate() void eventSourceUpdate()
{ {
if (!events.count()) if (!events.count())
return; return;
StaticJsonDocument<768> root = getStatusObject(); StaticJsonDocument<768> root = getStatusObject();
JsonArray data = root.createNestedArray("data"); JsonArray data = root.createNestedArray("data");
root["leds"] = getLedStatusObject()["data"];
String epdContent[NUM_SCREENS]; String epdContent[NUM_SCREENS];
std::array<String, NUM_SCREENS> retEpdContent = getCurrentEpdContent(); std::array<String, NUM_SCREENS> retEpdContent = getCurrentEpdContent();
std::copy(std::begin(retEpdContent), std::end(retEpdContent), epdContent); std::copy(std::begin(retEpdContent), std::end(retEpdContent), epdContent);
@ -648,6 +673,15 @@ void onApiSystemStatus(AsyncWebServerRequest *request)
request->send(response); request->send(response);
} }
void onApiLightsStatus(AsyncWebServerRequest *request)
{
AsyncResponseStream *response = request->beginResponseStream("application/json");
serializeJson(getLedStatusObject(), *response);
request->send(response);
}
void onApiLightsOff(AsyncWebServerRequest *request) void onApiLightsOff(AsyncWebServerRequest *request)
{ {
setLights(0, 0, 0); setLights(0, 0, 0);

View File

@ -33,6 +33,7 @@ void onApiSettingsPost(AsyncWebServerRequest *request);
void onApiSettingsPatch(AsyncWebServerRequest *request, JsonVariant &json); void onApiSettingsPatch(AsyncWebServerRequest *request, JsonVariant &json);
void onApiFullRefresh(AsyncWebServerRequest *request); void onApiFullRefresh(AsyncWebServerRequest *request);
void onApiLightsStatus(AsyncWebServerRequest *request);
void onApiLightsOff(AsyncWebServerRequest *request); void onApiLightsOff(AsyncWebServerRequest *request);
void onApiLightsSetColor(AsyncWebServerRequest *request); void onApiLightsSetColor(AsyncWebServerRequest *request);
@ -42,6 +43,7 @@ void onApiRestart(AsyncWebServerRequest *request);
void onIndex(AsyncWebServerRequest *request); void onIndex(AsyncWebServerRequest *request);
void onNotFound(AsyncWebServerRequest *request); void onNotFound(AsyncWebServerRequest *request);
StaticJsonDocument<512> getLedStatusObject();
StaticJsonDocument<768> getStatusObject(); StaticJsonDocument<768> getStatusObject();
void eventSourceUpdate(); void eventSourceUpdate();
void eventSourceTask(void *pvParameters); void eventSourceTask(void *pvParameters);