From 558465fdcd52befaf98f237c76205d728d9c9015 Mon Sep 17 00:00:00 2001 From: Nicanor Romero Venier Date: Thu, 3 Sep 2015 15:23:44 +0200 Subject: [PATCH 1/5] Added a new timeout for polling when a target temperature is set --- src/octoprint/server/api/settings.py | 2 ++ src/octoprint/settings.py | 1 + .../static/js/app/viewmodels/settings.js | 1 + .../dialogs/settings/serialconnection.jinja2 | 9 +++++++++ src/octoprint/util/comm.py | 16 +++++++++++++++- 5 files changed, 28 insertions(+), 1 deletion(-) 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() From 1e936387944be4ebe01e947f15391cdd8b31c099 Mon Sep 17 00:00:00 2001 From: Nicanor Romero Venier Date: Thu, 3 Sep 2015 15:52:43 +0200 Subject: [PATCH 2/5] Changed UI layout for the temperature interval --- .../templates/dialogs/settings/serialconnection.jinja2 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index a06441b6..6501a9fc 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -25,15 +25,17 @@ s
+

{{ _('When printing or idle')}}

- +
s
+

{{ _('When a target temperature is set')}}

From 24f769ff809143156663f45b558b598385d53137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 3 Sep 2015 17:46:03 +0200 Subject: [PATCH 3/5] Moved both temperature intervals into the same "section" --- .../templates/dialogs/settings/serialconnection.jinja2 | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index 6501a9fc..ad9a8433 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -18,24 +18,21 @@
-
+
s
-

{{ _('When printing or idle')}}

+ {{ _('When printing or idle')}}
-
-
-
s
-

{{ _('When a target temperature is set')}}

+ {{ _('When a target temperature is set')}}
From f6acca5db2d1c1652d3e9c13763c37137cf98711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 3 Sep 2015 18:02:46 +0200 Subject: [PATCH 4/5] Set default value for temperature polling when target is set to 2s 1s might be a bit fast as a default for certain boards, so better leave it at something less spammy. --- src/octoprint/settings.py | 2 +- src/octoprint/util/comm.py | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index e23980e4..666012af 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -80,7 +80,7 @@ default_settings = { "connection": 10, "communication": 30, "temperature": 5, - "temperatureTargetSet": 1, + "temperatureTargetSet": 2, "sdStatus": 1 }, "additionalPorts": [], diff --git a/src/octoprint/util/comm.py b/src/octoprint/util/comm.py index bf3ae0ae..fd2042d2 100644 --- a/src/octoprint/util/comm.py +++ b/src/octoprint/util/comm.py @@ -1271,17 +1271,20 @@ class MachineCom(object): self.sendGcodeScript("afterPrinterConnected", replacements=dict(event=payload)) def _getTemperatureTimerInterval(self): + busy_default = 4.0 + target_default = 2.0 + if self.isBusy(): - return get_interval("temperature", default_value=4.0) + return get_interval("temperature", default_value=busy_default) 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) + return get_interval("temperatureTargetSet", default_value=target_default) 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("temperatureTargetSet", default_value=target_default) - return get_interval("temperature", default_value=4.0) + return get_interval("temperature", default_value=busy_default) def _sendFromQueue(self): if not self._commandQueue.empty() and not self.isStreaming(): From 64bb1adf8c9009d6ae98669771bc51aff552dee9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Thu, 3 Sep 2015 18:59:05 +0200 Subject: [PATCH 5/5] Added CHANGELOG entry for second temperature polling interval --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d4bf7de..7b19a999 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,9 @@ additional serial ports via the settings dialog and the configuration file. * Option to never send checksums (e.g. if the printer firmware doesn't support it), see [#949](https://github.com/foosel/OctoPrint/issues/949). +* Added secondary temperature polling interval to use when printer is not printing + but a target temperature is set - this way the graph should be more responsive + while monitoring a manual heatup. * Documentation improvements ### Bug Fixes