+ AsyncCallbackJsonWebHandler* configUploadHandler = new AsyncCallbackJsonWebHandler("/config/put", [](AsyncWebServerRequest *request, JsonVariant &json) {
+ cfg.clear();
+ // first - set values
+ for( JsonPair kv : json.as<JsonObject>() ) {
+ const char* name = kv.key().c_str();
+ if (kv.value().is<bool>()) {
+ cfg.setValue(name, kv.value().as<bool>());
+ } else if (kv.value().is<int>()) {
+ cfg.setValue(name, kv.value().as<int>());
+ } else if (kv.value().is<double>()) {
+ cfg.setValue(name, kv.value().as<double>());
+ } else if (kv.value().is<char*>()) {
+ cfg.setValue(name, kv.value().as<char*>());
+ } else {
+ Serial.print(F("Неопознанный тип значения параметра ")); Serial.print(name); Serial.print(": "); Serial.println(kv.value().as<String>().c_str());
+ cfg.clear();
+ setupConfig();
+ request->send(500, "text/plain", "Unknown parameter type");
+ }
+ }
+ // second - handle all changes
+ for( JsonPair kv : json.as<JsonObject>() ) {
+ apply(kv.key().c_str());
+ }
+ pendingWiFi = false;
+ pendingAuth = false;
+ saveConfig();
+ message(F("Применены сохраненные настройки"),5);
+ reportMessage(F("Применены сохраненные настройки"));
+ millisScheduled = millis() + 10000;
+ actionScheduled = "restart";
+ request->send(200,"application/json", "{\"result\":\"OK\",\"message\":\"Настройки восстановлены из резервной копии\"}");
+ });