diff --git a/octoprint/server.py b/octoprint/server.py index b62511f..c98bb98 100644 --- a/octoprint/server.py +++ b/octoprint/server.py @@ -518,6 +518,9 @@ def getSettings(): "portOptions": connectionOptions["ports"], "baudrateOptions": connectionOptions["baudrates"], "autoconnect": s.getBoolean(["serial", "autoconnect"]), + "timeoutConnection": s.getFloat(["serial", "timeout", "connection"]), + "timeoutDetection": s.getFloat(["serial", "timeout", "detection"]), + "timeoutCommunication": s.getFloat(["serial", "timeout", "communication"]), "log": s.getBoolean(["serial", "log"]) }, "folder": { @@ -576,6 +579,9 @@ def setSettings(): if "autoconnect" in data["serial"].keys(): s.setBoolean(["serial", "autoconnect"], data["serial"]["autoconnect"]) if "port" in data["serial"].keys(): s.set(["serial", "port"], data["serial"]["port"]) if "baudrate" in data["serial"].keys(): s.setInt(["serial", "baudrate"], data["serial"]["baudrate"]) + if "timeoutConnection" in data["serial"].keys(): s.setFloat(["serial", "timeout", "connection"], data["serial"]["timeoutConnection"]) + if "timeoutDetection" in data["serial"].keys(): s.setFloat(["serial", "timeout", "detection"], data["serial"]["timeoutDetection"]) + if "timeoutCommunication" in data["serial"].keys(): s.setFloat(["serial", "timeout", "communication"], data["serial"]["timeoutCommunication"]) oldLog = s.getBoolean(["serial", "log"]) if "log" in data["serial"].keys(): s.setBoolean(["serial", "log"], data["serial"]["log"]) diff --git a/octoprint/settings.py b/octoprint/settings.py index 55bdda7..4429521 100644 --- a/octoprint/settings.py +++ b/octoprint/settings.py @@ -27,7 +27,12 @@ default_settings = { "port": None, "baudrate": None, "autoconnect": False, - "log": False + "log": False, + "timeout": { + "detection": 0.5, + "connection": 2, + "communication": 5 + } }, "server": { "host": "0.0.0.0", @@ -199,6 +204,17 @@ class Settings(object): self._logger.warn("Could not convert %r to a valid integer when getting option %r" % (value, path)) return None + def getFloat(self, path): + value = self.get(path) + if value is None: + return None + + try: + return float(value) + except ValueError: + self._logger.warn("Could not convert %r to a valid integer when getting option %r" % (value, path)) + return None + def getBoolean(self, path): value = self.get(path) if value is None: @@ -288,6 +304,19 @@ class Settings(object): self.set(path, intValue, force) + def setFloat(self, path, value, force=False): + if value is None: + self.set(path, None, force) + return + + try: + floatValue = float(value) + except ValueError: + self._logger.warn("Could not convert %r to a valid integer when setting option %r" % (value, path)) + return + + self.set(path, floatValue, force) + def setBoolean(self, path, value, force=False): if value is None or isinstance(value, bool): self.set(path, value, force) diff --git a/octoprint/static/js/ui.js b/octoprint/static/js/ui.js index 9556fa8..8f7fe52 100644 --- a/octoprint/static/js/ui.js +++ b/octoprint/static/js/ui.js @@ -1363,6 +1363,9 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.serial_portOptions = ko.observableArray([]); self.serial_baudrateOptions = ko.observableArray([]); self.serial_autoconnect = ko.observable(undefined); + self.serial_timeoutConnection = ko.observable(undefined); + self.serial_timeoutDetection = ko.observable(undefined); + self.serial_timeoutCommunication = ko.observable(undefined); self.serial_log = ko.observable(undefined); self.folder_uploads = ko.observable(undefined); @@ -1421,6 +1424,9 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { self.serial_portOptions(response.serial.portOptions); self.serial_baudrateOptions(response.serial.baudrateOptions); self.serial_autoconnect(response.serial.autoconnect); + self.serial_timeoutConnection(response.serial.timeoutConnection); + self.serial_timeoutDetection(response.serial.timeoutDetection); + self.serial_timeoutCommunication(response.serial.timeoutCommunication); self.serial_log(response.serial.log); self.folder_uploads(response.folder.uploads); @@ -1468,6 +1474,9 @@ function SettingsViewModel(loginStateViewModel, usersViewModel) { "port": self.serial_port(), "baudrate": self.serial_baudrate(), "autoconnect": self.serial_autoconnect(), + "timeoutConnection": self.serial_timeoutConnection(), + "timeoutDetection": self.serial_timeoutDetection(), + "timeoutCommunication": self.serial_timeoutCommunication(), "log": self.serial_log() }, "folder": { diff --git a/octoprint/templates/settings.jinja2 b/octoprint/templates/settings.jinja2 index ee9a827..ea329de 100644 --- a/octoprint/templates/settings.jinja2 +++ b/octoprint/templates/settings.jinja2 @@ -21,14 +21,14 @@
+
-
+
-
@@ -39,6 +39,33 @@
+
+ +
+
+ + s +
+
+
+
+ +
+
+ + s +
+
+
+
+ +
+
+ + s +
+
+