diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a491e78..b8645fb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -108,6 +108,10 @@ * OctoPrint server should no longer hang when big changes in the system time happen, e.g. after first contact to an NTP server on a Raspberry Pi image. Achieved through monkey patching Tornado with [this PR](https://github.com/tornadoweb/tornado/pull/1290). +* Serial ports matching ``/dev/ttyAMA*`` are not anymore listed by default (this was the reason for a lot of people + attempting to connect to their printer on their Raspberry Pis, on which ``/dev/ttyAMA0`` is the OS's serial console + by default). Added configuration of additional ports to the Serial Connection section in the Settings to make it easier + for those people who do indeed have their printer connected to ``/dev/ttyAMA0``. ### Bug Fixes @@ -167,6 +171,7 @@ * Don't display a "Disconnected" screen when trying to download a timelapse in Firefox * Fixed handling of SD card files in folders * Fixed refreshing of timelapse file list upon finished rendering of a new one + * Fixed ``/api/printer`` which wasn't adapter yet to new internal offset data model ([Commits](https://github.com/foosel/OctoPrint/compare/master...devel)) diff --git a/src/octoprint/printer/standard.py b/src/octoprint/printer/standard.py index 3127e027..289741b5 100644 --- a/src/octoprint/printer/standard.py +++ b/src/octoprint/printer/standard.py @@ -436,24 +436,23 @@ class Printer(PrinterInterface, comm.MachineComPrintCallback): def get_current_temperatures(self): if self._comm is not None: - tempOffset, bedTempOffset = self._comm.getOffsets() + offsets = self._comm.getOffsets() else: - tempOffset = {} - bedTempOffset = None + offsets = dict() result = {} if self._temp is not None: for tool in self._temp.keys(): result["tool%d" % tool] = { - "actual": self._temp[tool][0], - "target": self._temp[tool][1], - "offset": tempOffset[tool] if tool in tempOffset.keys() and tempOffset[tool] is not None else 0 + "actual": self._temp[tool][0], + "target": self._temp[tool][1], + "offset": offsets[tool] if tool in offsets and offsets[tool] is not None else 0 } if self._bedTemp is not None: result["bed"] = { - "actual": self._bedTemp[0], - "target": self._bedTemp[1], - "offset": bedTempOffset + "actual": self._bedTemp[0], + "target": self._bedTemp[1], + "offset": offsets["bed"] if "bed" in offsets and offsets["bed"] is not None else 0 } return result diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index bd91e286..0cf9b74b 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -77,7 +77,8 @@ def getSettings(): "timeoutCommunication": s.getFloat(["serial", "timeout", "communication"]), "timeoutTemperature": s.getFloat(["serial", "timeout", "temperature"]), "timeoutSdStatus": s.getFloat(["serial", "timeout", "sdStatus"]), - "log": s.getBoolean(["serial", "log"]) + "log": s.getBoolean(["serial", "log"]), + "additionalPorts": s.get(["serial", "additionalPorts"]) }, "folder": { "uploads": s.getBaseFolder("uploads"), @@ -185,6 +186,7 @@ def setSettings(): 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 "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"]) oldLog = s.getBoolean(["serial", "log"]) if "log" in data["serial"].keys(): s.setBoolean(["serial", "log"], data["serial"]["log"]) diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 4dbb756f..30dd26f2 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -92,6 +92,7 @@ $(function() { self.serial_timeoutTemperature = ko.observable(undefined); self.serial_timeoutSdStatus = ko.observable(undefined); self.serial_log = ko.observable(undefined); + self.serial_additionalPorts = ko.observable(undefined); self.folder_uploads = ko.observable(undefined); self.folder_timelapse = ko.observable(undefined); @@ -231,6 +232,7 @@ $(function() { self.serial_timeoutTemperature(response.serial.timeoutTemperature); self.serial_timeoutSdStatus(response.serial.timeoutSdStatus); self.serial_log(response.serial.log); + self.serial_additionalPorts(response.serial.additionalPorts.join("\n")); self.folder_uploads(response.folder.uploads); self.folder_timelapse(response.folder.timelapse); @@ -302,7 +304,14 @@ $(function() { "timeoutCommunication": self.serial_timeoutCommunication(), "timeoutTemperature": self.serial_timeoutTemperature(), "timeoutSdStatus": self.serial_timeoutSdStatus(), - "log": self.serial_log() + "log": self.serial_log(), + "additionalPorts": _.filter( + _.map( + self.serial_additionalPorts().split("\n"), + function(item) { return (item) ? item.trim() : ""; } + ), + function(item) { return item && !_.startsWith(item, "#"); } + ) }, "folder": { "uploads": self.folder_uploads(), diff --git a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 index 234aad02..13b7177d 100644 --- a/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 +++ b/src/octoprint/templates/dialogs/settings/serialconnection.jinja2 @@ -70,4 +70,11 @@ +
/dev/ttyAMA*. One entry per line.')|format(glob_url="http://docs.python.org/2/library/glob.html") }}
+