2020-09-19 17:24:34 +00:00
|
|
|
/*
|
|
|
|
* ESP8266 RGBW controller
|
|
|
|
* Copyright 2020 (c) Mark van Renswoude
|
|
|
|
*
|
|
|
|
* https://git.x2software.net/pub/RGBWifi
|
|
|
|
*/
|
|
|
|
#include "./api.h"
|
2020-10-15 07:17:10 +00:00
|
|
|
#include <ArduinoJson.h>
|
|
|
|
#include <AsyncJson.h>
|
2020-09-19 17:24:34 +00:00
|
|
|
#include "../debug.h"
|
|
|
|
#include "../global.h"
|
|
|
|
|
|
|
|
|
2020-09-20 09:08:20 +00:00
|
|
|
void handleSetStatic(AsyncWebServerRequest *request)
|
2020-09-19 17:24:34 +00:00
|
|
|
{
|
2020-09-20 09:08:20 +00:00
|
|
|
_dln("API :: set/static");
|
2020-09-19 17:24:34 +00:00
|
|
|
|
2020-10-09 18:38:09 +00:00
|
|
|
AsyncWebParameter* rParam = request->getParam("r");
|
|
|
|
AsyncWebParameter* gParam = request->getParam("g");
|
|
|
|
AsyncWebParameter* bParam = request->getParam("b");
|
|
|
|
AsyncWebParameter* wParam = request->getParam("w");
|
2020-09-19 17:24:34 +00:00
|
|
|
|
2020-09-20 09:08:20 +00:00
|
|
|
if (rParam == nullptr || gParam == nullptr || bParam == nullptr || wParam == nullptr)
|
2020-09-19 17:24:34 +00:00
|
|
|
{
|
|
|
|
request->send(400);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2020-10-14 17:41:19 +00:00
|
|
|
AsyncWebParameter* fadeTimeParameter = request->getParam("fadeTime");
|
|
|
|
uint16_t fadeTime = fadeTimeParameter == nullptr ? 0 : fadeTimeParameter->value().toInt();
|
|
|
|
|
|
|
|
|
2020-10-15 07:17:10 +00:00
|
|
|
RgbwColor color(rParam->value().toInt(), gParam->value().toInt(), bParam->value().toInt(), wParam->value().toInt());
|
|
|
|
strip->setStatic(color, fadeTime);
|
2020-09-19 17:24:34 +00:00
|
|
|
|
|
|
|
request->send(200);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-10-09 18:38:09 +00:00
|
|
|
void handleSetRainbow(AsyncWebServerRequest *request)
|
|
|
|
{
|
|
|
|
_dln("API :: set/rainbow");
|
|
|
|
|
|
|
|
AsyncWebParameter* speedParam = request->getParam("speed");
|
2020-10-09 19:20:19 +00:00
|
|
|
AsyncWebParameter* lightnessParam = request->getParam("lightness");
|
2020-10-09 18:38:09 +00:00
|
|
|
|
|
|
|
uint16_t speed = speedParam == nullptr ? 0 : speedParam->value().toInt();
|
2020-10-09 19:20:19 +00:00
|
|
|
uint8_t lightness = lightnessParam == nullptr ? 0 : lightnessParam->value().toInt();
|
|
|
|
strip->setRainbow(speed, lightness);
|
2020-10-09 18:38:09 +00:00
|
|
|
|
|
|
|
request->send(200);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-10-15 07:17:10 +00:00
|
|
|
void handleGetStatus(AsyncWebServerRequest *request)
|
|
|
|
{
|
|
|
|
_dln("API :: get strip status");
|
|
|
|
|
|
|
|
DynamicJsonDocument jsonDocument(256);
|
|
|
|
|
|
|
|
switch (strip->getSetting())
|
|
|
|
{
|
|
|
|
case StripSetting::Static:
|
|
|
|
jsonDocument["setting"] = "static";
|
|
|
|
break;
|
|
|
|
|
|
|
|
case StripSetting::Rainbow:
|
|
|
|
case StripSetting::RainbowMoving:
|
|
|
|
jsonDocument["setting"] = "rainbow";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
JsonObject staticSettings = jsonDocument.createNestedObject("static");
|
|
|
|
JsonObject staticColor = staticSettings.createNestedObject("color");
|
|
|
|
|
|
|
|
RgbwColor color = strip->getStaticColor();
|
|
|
|
staticColor["r"] = color.R;
|
|
|
|
staticColor["g"] = color.G;
|
|
|
|
staticColor["b"] = color.B;
|
|
|
|
staticColor["w"] = color.W;
|
|
|
|
|
|
|
|
JsonObject rainbowSettings = jsonDocument.createNestedObject("rainbow");
|
|
|
|
rainbowSettings["speed"] = strip->getRainbowSpeed();
|
|
|
|
rainbowSettings["lightness"] = strip->getRainbowLightness();
|
|
|
|
|
|
|
|
|
|
|
|
AsyncResponseStream *response = request->beginResponseStream("application/json");
|
|
|
|
serializeJson(jsonDocument, *response);
|
|
|
|
|
|
|
|
request->send(response);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void handleSetStatus(AsyncWebServerRequest *request, JsonVariant &json)
|
|
|
|
{
|
|
|
|
_dln("API :: set strip status");
|
|
|
|
|
|
|
|
const char* jsonSetting = json["setting"];
|
|
|
|
|
|
|
|
if (strcmp(jsonSetting, "static") == 0)
|
|
|
|
{
|
|
|
|
JsonObject jsonColor = json["static"]["color"];
|
|
|
|
if (jsonColor.isNull())
|
|
|
|
{
|
|
|
|
request->send(400);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
uint16_t fadeTime = json["static"]["fadeTime"];
|
|
|
|
|
|
|
|
RgbwColor color(jsonColor["r"], jsonColor["g"], jsonColor["b"], jsonColor["w"]);
|
|
|
|
strip->setStatic(color, fadeTime);
|
|
|
|
|
|
|
|
request->send(200);
|
|
|
|
}
|
|
|
|
else if (strcmp(jsonSetting, "rainbow") == 0)
|
|
|
|
{
|
|
|
|
JsonObject jsonRainbow = json["rainbow"];
|
|
|
|
if (jsonRainbow.isNull())
|
|
|
|
{
|
|
|
|
request->send(400);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
strip->setRainbow(jsonRainbow["speed"], jsonRainbow["lightness"]);
|
|
|
|
|
|
|
|
request->send(200);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
request->send(400);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2020-09-19 17:24:34 +00:00
|
|
|
void registerAPIRoutes(AsyncWebServer* server)
|
|
|
|
{
|
2020-09-20 09:08:20 +00:00
|
|
|
server->on("/api/set/static", HTTP_GET, handleSetStatic);
|
2020-10-09 18:38:09 +00:00
|
|
|
server->on("/api/set/rainbow", HTTP_GET, handleSetRainbow);
|
2020-10-15 07:17:10 +00:00
|
|
|
|
|
|
|
server->on("/api/strip/status", HTTP_GET, handleGetStatus);
|
|
|
|
|
|
|
|
AsyncCallbackJsonWebHandler* statusPostHandler = new AsyncCallbackJsonWebHandler("/api/strip/status", handleSetStatus, 256);
|
|
|
|
statusPostHandler->setMethod(HTTP_POST);
|
|
|
|
server->addHandler(statusPostHandler);
|
2020-09-19 17:24:34 +00:00
|
|
|
}
|