From 8b5d6c936779e5bb2946c52cb1eb593848cb3fe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 3 Mar 2014 22:34:09 +0100 Subject: [PATCH] Changed handling of bed temperatures Will now be left unset if not detected (instead of dying a horrible death), modified frontend to not display bed settings in such cases. While at it also (hopefully) fixed "Target: off" for bed issue. TODO: Support repetier's "TargetBed:", "TargetExtr%n" syntax Fixes #399, partially solves #360 --- src/octoprint/printer.py | 10 ++++++---- src/octoprint/settings.py | 3 ++- .../static/js/app/viewmodels/temperature.js | 17 +++++++++++++++-- src/octoprint/templates/index.jinja2 | 2 +- src/octoprint/util/comm.py | 19 ++++++++++++------- src/octoprint/util/virtual.py | 10 +++++++--- 6 files changed, 43 insertions(+), 18 deletions(-) diff --git a/src/octoprint/printer.py b/src/octoprint/printer.py index 2e8a6188..b7948d58 100644 --- a/src/octoprint/printer.py +++ b/src/octoprint/printer.py @@ -37,6 +37,7 @@ class Printer(): self._gcodeManager.registerCallback(self) # state + # TODO do we really need to hold the temperature here? self._temp = None self._bedTemp = None self._targetTemp = None @@ -355,10 +356,11 @@ class Printer(): "actual": temp[tool][0], "target": temp[tool][1] } - data["bed"] = { - "actual": bedTemp[0], - "target": bedTemp[1] - } + if bedTemp is not None and isinstance(bedTemp, tuple): + data["bed"] = { + "actual": bedTemp[0], + "target": bedTemp[1] + } self._temps.append(data) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index 629f785b..d253ac89 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -143,7 +143,8 @@ default_settings = { "forceChecksum": False, "okWithLinenumber": False, "numExtruders": 1, - "includeCurrentToolInTemps": True + "includeCurrentToolInTemps": True, + "hasBed": True } } } diff --git a/src/octoprint/static/js/app/viewmodels/temperature.js b/src/octoprint/static/js/app/viewmodels/temperature.js index e0c327a0..ae529c8f 100644 --- a/src/octoprint/static/js/app/viewmodels/temperature.js +++ b/src/octoprint/static/js/app/viewmodels/temperature.js @@ -17,6 +17,7 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { }; self.tools = ko.observableArray([]); + self.hasBed = ko.observable(true); self.bedTemp = self._createToolEntry(); self.bedTemp["name"]("Bed"); self.bedTemp["key"]("bed"); @@ -145,8 +146,13 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { } } - self.bedTemp["actual"](lastData.bed.actual); - self.bedTemp["target"](lastData.bed.target); + if (lastData.hasOwnProperty("bed")) { + self.hasBed(true); + self.bedTemp["actual"](lastData.bed.actual); + self.bedTemp["target"](lastData.bed.target); + } else { + self.hasBed(false); + } if (!CONFIG_TEMPERATURE_GRAPH) return; @@ -184,6 +190,7 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { if (!result) { result = {}; } + _.each(types, function(type) { if (!result.hasOwnProperty(type)) { result[type] = {actual: [], target: []}; @@ -199,6 +206,8 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { if (!d[type]) return; result[type].actual.push([time, d[type].actual]); result[type].target.push([time, d[type].target]); + + self.hasBed(self.hasBed() || (type == "bed")); }) }); @@ -213,6 +222,10 @@ function TemperatureViewModel(loginStateViewModel, settingsViewModel) { if (!heaterOptions) return; _.each(_.keys(heaterOptions), function(type) { + if (type == "bed" && !self.hasBed()) { + return; + } + var actuals = []; var targets = []; diff --git a/src/octoprint/templates/index.jinja2 b/src/octoprint/templates/index.jinja2 index 01fdd4de..b0ad8be8 100644 --- a/src/octoprint/templates/index.jinja2 +++ b/src/octoprint/templates/index.jinja2 @@ -274,7 +274,7 @@ - +