diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index 7c269b98..3419c11f 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -83,6 +83,7 @@ def getSettings(): "timeoutDetection": s.getFloat(["serial", "timeout", "detection"]), "timeoutCommunication": s.getFloat(["serial", "timeout", "communication"]), "timeoutTemperature": s.getFloat(["serial", "timeout", "temperature"]), + "timeoutTemperatureTargetSet": s.getFloat(["serial", "timeout", "temperatureTargetSet"]), "timeoutSdStatus": s.getFloat(["serial", "timeout", "sdStatus"]), "log": s.getBoolean(["serial", "log"]), "additionalPorts": s.get(["serial", "additionalPorts"]), @@ -234,6 +235,7 @@ def _saveSettings(data): 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"]) if "timeoutTemperature" in data["serial"].keys(): s.setFloat(["serial", "timeout", "temperature"], data["serial"]["timeoutTemperature"]) + if "timeoutTemperatureTargetSet" in data["serial"].keys(): s.setFloat(["serial", "timeout", "temperatureTargetSet"], data["serial"]["timeoutTemperatureTargetSet"]) if "timeoutSdStatus" in data["serial"].keys(): s.setFloat(["serial", "timeout", "sdStatus"], data["serial"]["timeoutSdStatus"]) if "additionalPorts" in data["serial"] and isinstance(data["serial"]["additionalPorts"], (list, tuple)): s.set(["serial", "additionalPorts"], data["serial"]["additionalPorts"]) if "additionalBaudrates" in data["serial"] and isinstance(data["serial"]["additionalBaudrates"], (list, tuple)): s.set(["serial", "additionalBaudrates"], data["serial"]["additionalBaudrates"]) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 502b1056..e23980e4 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -80,6 +80,7 @@ default_settings = { "connection": 10, "communication": 30, "temperature": 5, + "temperatureTargetSet": 1, "sdStatus": 1 }, "additionalPorts": [], diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 8b4d4560..39b58432 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -132,6 +132,7 @@ $(function() { self.serial_timeoutDetection = ko.observable(undefined); self.serial_timeoutCommunication = ko.observable(undefined); self.serial_timeoutTemperature = ko.observable(undefined); + self.serial_timeoutTemperatureTargetSet = ko.observable(undefined); self.serial_timeoutSdStatus = ko.observable(undefined); self.serial_log = ko.observable(undefined); self.serial_additionalPorts = ko.observable(undefined); diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index 6cf96272..a06441b6 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -27,6 +27,15 @@ +
+ +
+
+ + s +
+
+
diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index 44eae0ba..bf3ae0ae 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -222,6 +222,7 @@ class MachineCom(object): self._baudrateDetectRetry = 0 self._temp = {} self._bedTemp = None + self._temperatureTargetSetThreshold = 25 self._tempOffsets = dict() self._commandQueue = queue.Queue() self._currentZ = None @@ -1253,7 +1254,7 @@ class MachineCom(object): def _onConnected(self): self._serial.timeout = settings().getFloat(["serial", "timeout", "communication"]) - self._temperature_timer = RepeatedTimer(lambda: get_interval("temperature", default_value=4.0), self._poll_temperature, run_first=True) + self._temperature_timer = RepeatedTimer(self._getTemperatureTimerInterval, self._poll_temperature, run_first=True) self._temperature_timer.start() self._changeState(self.STATE_OPERATIONAL) @@ -1269,6 +1270,19 @@ class MachineCom(object): eventManager().fire(Events.CONNECTED, payload) self.sendGcodeScript("afterPrinterConnected", replacements=dict(event=payload)) + def _getTemperatureTimerInterval(self): + if self.isBusy(): + return get_interval("temperature", default_value=4.0) + + for temp in [self._temp[k][1] for k in self._temp.keys()]: + if temp > self._temperatureTargetSetThreshold: + return get_interval("temperatureTargetSet", default_value=1.0) + + if self._bedTemp and len(self._bedTemp) > 0 and self._bedTemp[1] > self._temperatureTargetSetThreshold: + return get_interval("temperatureTargetSet", default_value=1.0) + + return get_interval("temperature", default_value=4.0) + def _sendFromQueue(self): if not self._commandQueue.empty() and not self.isStreaming(): entry = self._commandQueue.get()