Skip to content

Commit

Permalink
BugFix save Coord3D to json model
Browse files Browse the repository at this point in the history
SysModModel:
- comments on Coord3D to/from/checkJson (temp)
setValue: bugfix: send whole array to ws without rowNr

SysModUI
- processJson: check explicitly for Coord3D
  • Loading branch information
ewowi committed Feb 15, 2024
1 parent 86900d3 commit 7f3d047
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 5 deletions.
9 changes: 5 additions & 4 deletions src/Sys/SysModModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,15 +86,17 @@ namespace ArduinoJson {
dst["x"] = src.x;
dst["y"] = src.y;
dst["z"] = src.z;
USER_PRINTF("Coord3D toJson %d,%d,%d -> {x:%d,y:%d,z:%d}\n", src.x, src.y, src.z, dst["x"].as<uint8_t>(), dst["y"].as<uint8_t>(), dst["z"].as<uint8_t>());
USER_PRINTF("Coord3D toJson %d,%d,%d -> %s\n", src.x, src.y, src.z, dst.as<String>().c_str());
return true;
}

static Coord3D fromJson(JsonVariantConst src) {
USER_PRINTF("Coord3D fromJson %s\n", src.as<String>().c_str());
return Coord3D{src["x"], src["y"], src["z"]};
}

static bool checkJson(JsonVariantConst src) {
USER_PRINTF("Coord3D checkJson %s\n", src.as<String>().c_str());
return src["x"].is<uint16_t>() && src["y"].is<uint16_t>() && src["z"].is<uint16_t>();
}
};
Expand Down Expand Up @@ -174,7 +176,7 @@ class SysModModel:public SysModule {
}
else {
USER_PRINTF("setValue changed %s %s -> %s\n", jsonToChar(var, "id"), oldValue.c_str(), var["value"].as<String>().c_str()); //old value
web->addResponse(var["id"], "value", var["value"], rowNr);
web->addResponse(var["id"], "value", var["value"]);
changed = true;
}
}
Expand All @@ -197,12 +199,11 @@ class SysModModel:public SysModule {
notSame = valueArray[rowNr].isNull() || valueArray[rowNr].as<Type>() != value;

if (notSame) {
// setValue(var, value, rowNr);
// if (rowNr >= valueArray.size())
// USER_PRINTF("notSame %d %d\n", rowNr, valueArray.size());
valueArray[rowNr] = value; //if valueArray[<rowNr] not exists it will be created
// USER_PRINTF(" assigned %d %d %s\n", rowNr, valueArray.size(), valueArray[rowNr].as<String>().c_str());
web->addResponse(var["id"], "value", var["value"], rowNr);
web->addResponse(var["id"], "value", var["value"]); //send the whole array to UI as response is in format value:<value> !!
changed = true;
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/Sys/SysModUI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -238,8 +238,10 @@ void SysModUI::processJson(JsonVariant json) {
else {
if (newValue.is<const char *>())
mdl->setValue(var, JsonString(newValue, JsonString::Copied), rowNr);
else if (newValue.is<Coord3D>()) //otherwise it will be treated as JsonObject and toJson / fromJson will not be triggered!!!
mdl->setValue(var, newValue.as<Coord3D>(), rowNr);
else
mdl->setValue(var, newValue.as<JsonVariant>(), rowNr);
mdl->setValue(var, newValue, rowNr);
}
// json.remove(key); //key / var["id"] processed we don't need the key in the response
}
Expand Down

0 comments on commit 7f3d047

Please sign in to comment.