Change pairing so that the command can be repeated on failure. #15. Add extra 0 to indicate there are no more bits to be read from the bitstream.

This commit is contained in:
Robert Strouse 2023-04-05 14:38:11 -07:00
parent 3b8c2e0aea
commit b6bc57e437
8 changed files with 119 additions and 20 deletions

51
Web.cpp
View file

@ -170,7 +170,7 @@ void Web::begin() {
shade->moveToTarget(target);
else
shade->sendCommand(command, repeat);
DynamicJsonDocument sdoc(256);
DynamicJsonDocument sdoc(512);
JsonObject sobj = sdoc.to<JsonObject>();
shade->toJSON(sobj);
serializeJson(sdoc, g_content);
@ -234,7 +234,7 @@ void Web::begin() {
shade->moveToTiltTarget(target);
else
shade->sendTiltCommand(command);
DynamicJsonDocument sdoc(256);
DynamicJsonDocument sdoc(512);
JsonObject sobj = sdoc.to<JsonObject>();
shade->toJSON(sobj);
serializeJson(sdoc, g_content);
@ -870,6 +870,52 @@ void Web::begin() {
}
}
});
server.on("/setPaired", []() {
webServer.sendCORSHeaders();
uint8_t shadeId = 255;
bool paired = false;
if(server.hasArg("plain")) {
DynamicJsonDocument doc(512);
DeserializationError err = deserializeJson(doc, server.arg("plain"));
if(err) {
switch(err.code()) {
case DeserializationError::InvalidInput:
server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Invalid JSON payload\"}"));
break;
case DeserializationError::NoMemory:
server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Out of memory parsing JSON\"}"));
break;
default:
server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"General JSON Deserialization failed\"}"));
break;
}
}
else {
JsonObject obj = doc.as<JsonObject>();
if (obj.containsKey("shadeId")) shadeId = obj["shadeId"];
if(obj.containsKey("paired")) paired = obj["paired"];
}
}
else if (server.hasArg("shadeId"))
shadeId = atoi(server.arg("shadeId").c_str());
if(server.hasArg("paired"))
paired = toBoolean(server.arg("paired").c_str(), false);
SomfyShade* shade = nullptr;
if (shadeId != 255) shade = somfy.getShadeById(shadeId);
if (!shade) {
server.send(500, _encoding_json, F("{\"status\":\"ERROR\",\"desc\":\"Shade not found to pair\"}"));
}
else {
shade->paired = paired;
shade->save();
DynamicJsonDocument doc(512);
JsonObject obj = doc.to<JsonObject>();
shade->toJSON(obj);
serializeJson(doc, g_content);
server.send(200, _encoding_json, g_content);
}
});
/*
server.on("/pairShade", []() {
webServer.sendCORSHeaders();
HTTPMethod method = server.method();
@ -919,6 +965,7 @@ void Web::begin() {
}
}
});
*/
server.on("/unpairShade", []() {
webServer.sendCORSHeaders();
HTTPMethod method = server.method();