Forráskód Böngészése

expose settings to tune number of repeated 2.4 GHz packets

Chris Mullins 8 éve
szülő
commit
cb04d57fd6

+ 31 - 4
lib/Settings/Settings.cpp

@@ -11,10 +11,29 @@ void Settings::deserialize(Settings& settings, String json) {
 
 void Settings::deserialize(Settings& settings, JsonObject& parsedSettings) {
   if (parsedSettings.success()) {
-    settings.adminUsername = parsedSettings.get<String>("admin_username");
-    settings.adminPassword = parsedSettings.get<String>("admin_password");
-    settings.cePin = parsedSettings["ce_pin"];
-    settings.csnPin = parsedSettings["csn_pin"];
+    if (parsedSettings.containsKey("admin_username")) {
+      settings.adminUsername = parsedSettings.get<String>("admin_username");
+    }
+    
+    if (parsedSettings.containsKey("admin_password")) {
+      settings.adminPassword = parsedSettings.get<String>("admin_password");
+    }
+    
+    if (parsedSettings.containsKey("ce_pin")) {
+      settings.cePin = parsedSettings["ce_pin"];
+    }
+    
+    if (parsedSettings.containsKey("csn_pin")) {
+      settings.csnPin = parsedSettings["csn_pin"];
+    }
+    
+    if (parsedSettings.containsKey("packet_repeats")) {
+      settings.packetRepeats = parsedSettings["packet_repeats"];
+    }
+    
+    if (parsedSettings.containsKey("http_repeat_factor")) {
+      settings.httpRepeatFactor = parsedSettings["http_repeat_factor"];
+    }
     
     JsonArray& arr = parsedSettings["device_ids"];
     settings.updateDeviceIds(arr);
@@ -72,6 +91,12 @@ void Settings::patch(JsonObject& parsedSettings) {
     if (parsedSettings.containsKey("csn_pin")) {
       this->csnPin = parsedSettings["csn_pin"];
     }
+    if (parsedSettings.containsKey("packet_repeats")) {
+      this->packetRepeats = parsedSettings["packet_repeats"];
+    }
+    if (parsedSettings.containsKey("http_repeat_factor")) {
+      this->httpRepeatFactor = parsedSettings["http_repeat_factor"];
+    }
     if (parsedSettings.containsKey("device_ids")) {
       JsonArray& arr = parsedSettings["device_ids"];
       updateDeviceIds(arr);
@@ -121,6 +146,8 @@ void Settings::serialize(Stream& stream, const bool prettyPrint) {
   root["admin_password"] = this->adminPassword;
   root["ce_pin"] = this->cePin;
   root["csn_pin"] = this->csnPin;
+  root["packet_repeats"] = this->packetRepeats;
+  root["http_repeat_factor"] = this->httpRepeatFactor;
   
   if (this->deviceIds) {
     JsonArray& arr = jsonBuffer.createArray();

+ 5 - 1
lib/Settings/Settings.h

@@ -34,7 +34,9 @@ public:
     deviceIds(NULL),
     gatewayConfigs(NULL),
     numDeviceIds(0),
-    numGatewayConfigs(0)
+    numGatewayConfigs(0),
+    packetRepeats(10),
+    httpRepeatFactor(5)
   { }
   
   ~Settings() {
@@ -66,6 +68,8 @@ public:
   GatewayConfig **gatewayConfigs;
   size_t numGatewayConfigs;
   size_t numDeviceIds;
+  size_t packetRepeats;
+  size_t httpRepeatFactor;
 };
 
 #endif 

+ 9 - 3
lib/WebServer/MiLightHttpServer.cpp

@@ -55,6 +55,8 @@ void MiLightHttpServer::applySettings(Settings& settings) {
   } else {
     server.requireAuthentication(settings.adminUsername, settings.adminPassword);
   }
+  
+  milightClient->setResendCount(settings.packetRepeats);
 }
 
 void MiLightHttpServer::onSettingsSaved(SettingsSavedHandler handler) {
@@ -182,8 +184,10 @@ void MiLightHttpServer::handleUpdateGroup(const UrlTokenBindings* urlBindings) {
     return;
   }
   
-  milightClient->setResendCount(MILIGHT_RESEND_COUNT_FOR_HTTP);
-    
+  milightClient->setResendCount(
+    settings.httpRepeatFactor * settings.packetRepeats
+  );
+  
   if (request.containsKey("status")) {
     const String& statusStr = request.get<String>("status");
     MiLightStatus status = (statusStr == "on" || statusStr == "true") ? ON : OFF;
@@ -242,10 +246,12 @@ void MiLightHttpServer::handleUpdateGroup(const UrlTokenBindings* urlBindings) {
       if (request["command"] == "temperature_down") {
         milightClient->decreaseTemperature(deviceId, groupId);
       }
+  
+      milightClient->setResendCount(settings.packetRepeats);
     }
   } 
   
-  milightClient->setResendCount(MILIGHT_DEFAULT_RESEND_COUNT);
+  milightClient->setResendCount(settings.packetRepeats);
   
   server.send(200, "application/json", "true");
 }

+ 0 - 2
lib/WebServer/MiLightHttpServer.h

@@ -5,8 +5,6 @@
 #ifndef _MILIGHT_HTTP_SERVER
 #define _MILIGHT_HTTP_SERVER 
 
-#define MILIGHT_RESEND_COUNT_FOR_HTTP 50
-
 typedef std::function<void(void)> SettingsSavedHandler;
 
 class MiLightHttpServer {

+ 4 - 1
web/index.html

@@ -74,7 +74,10 @@
   <script src="https://cdnjs.cloudflare.com/ajax/libs/selectize.js/0.12.4/js/standalone/selectize.min.js"></script>
   
   <script lang="text/javascript">
-    var FORM_SETTINGS = ["admin_username", "admin_password", "ce_pin", "csn_pin"];
+    var FORM_SETTINGS = [
+      "admin_username", "admin_password", "ce_pin", "csn_pin", "packet_repeats",
+      "http_repeat_factor"
+    ];
     
     var selectize;