Chris Mullins 8 éve
szülő
commit
6b56d5ab93
4 módosított fájl, 29 hozzáadás és 4 törlés
  1. 21 0
      lib/Settings/Settings.cpp
  2. 1 0
      lib/Settings/Settings.h
  3. 2 2
      src/main.cpp
  4. 5 2
      web/index.html

+ 21 - 0
lib/Settings/Settings.cpp

@@ -32,6 +32,27 @@ void Settings::updateDeviceIds(JsonArray& arr) {
   }
 }
 
+void Settings::patch(JsonObject& parsedSettings) {
+  if (parsedSettings.success()) {
+    if (parsedSettings.containsKey("admin_username")) {
+      this->adminUsername = parsedSettings.get<String>("admin_username");
+    }
+    if (parsedSettings.containsKey("admin_password")) {
+      this->adminPassword = parsedSettings.get<String>("admin_password");
+    }
+    if (parsedSettings.containsKey("ce_pin")) {
+      this->cePin = parsedSettings["ce_pin"];
+    }
+    if (parsedSettings.containsKey("csn_pin")) {
+      this->csnPin = parsedSettings["csn_pin"];
+    }
+    if (parsedSettings.containsKey("device_ids")) {
+      JsonArray& arr = parsedSettings["device_ids"];
+      updateDeviceIds(arr);
+    }
+  }
+}
+
 void Settings::load(Settings& settings) {
   if (SPIFFS.exists(SETTINGS_FILE)) {
     File f = SPIFFS.open(SETTINGS_FILE, "r");

+ 1 - 0
lib/Settings/Settings.h

@@ -36,6 +36,7 @@ public:
   String toJson(const bool prettyPrint = true);
   void serialize(Stream& stream, const bool prettyPrint = false);
   void updateDeviceIds(JsonArray& arr);
+  void patch(JsonObject& obj);
   
   String adminUsername;
   String adminPassword;

+ 2 - 2
src/main.cpp

@@ -172,7 +172,7 @@ void handleUpdateSettings() {
   JsonObject& parsedSettings = buffer.parse(rawSettings);
   
   if (parsedSettings.success()) {
-    Settings::deserialize(settings, parsedSettings);
+    settings.patch(parsedSettings);
     settings.save();
     initMilightClient();
     
@@ -191,7 +191,7 @@ void setup() {
   
   server.on("/", HTTP_GET, handleServeFile(WEB_INDEX_FILENAME, "text/html"));
   server.on("/settings", HTTP_GET, handleServeFile(SETTINGS_FILE, "application/json"));
-  server.on("/settings", HTTP_POST, handleUpdateSettings);
+  server.on("/settings", HTTP_PUT, handleUpdateSettings);
   server.on("/gateway_traffic", HTTP_GET, handleListenGateway);
   server.onPattern("/gateways/:device_id/:group_id", HTTP_PUT, handleUpdateGroup);
   server.onPattern("/gateways/:device_id", HTTP_PUT, handleUpdateGateway);

+ 5 - 2
web/index.html

@@ -207,6 +207,9 @@
       selectize = $('#deviceId').selectize({
         create: true,
         sortField: 'text',
+        onOptionAdd: function(v, item) {
+          item.value = parseInt(item.value);
+        },
         createFilter: function(v) {
           if (! v.match(/^(0x[a-fA-F0-9]{1,4}|[0-9]{1,5})$/)) {
             deviceIdError("Must be an integer between 0x0000 and 0xFFFF");
@@ -249,14 +252,14 @@
         obj.device_ids = _.map(
           $('.selectize-control .option'),
           function(x) { 
-            return parseInt($(x).data('value'), 16)
+            return $(x).data('value')
           }
         );
         
         $.ajax(
           "/settings",
           {
-            method: 'post',
+            method: 'put',
             contentType: 'application/json',
             data: JSON.stringify(obj)
           }