Merge branch 'dev/increase_temp_polling' into devel

This commit is contained in:
Gina Häußge 2015-09-03 19:01:16 +02:00
commit aa6998ec5e
6 changed files with 34 additions and 2 deletions

View file

@ -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

View file

@ -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"])

View file

@ -80,6 +80,7 @@ default_settings = {
"connection": 10,
"communication": 30,
"temperature": 5,
"temperatureTargetSet": 2,
"sdStatus": 1
},
"additionalPorts": [],

View file

@ -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);

View file

@ -18,13 +18,21 @@
</label>
</div>
</div>
<div class="control-group" title="{{ _('Interval in which to poll for the temperature information from the printer while printing') }}">
<div class="control-group" title="{{ _('Interval in which to poll for the temperature information from the printer') }}">
<label class="control-label" for="settings-serialTimeoutTemperature">{{ _('Temperature interval') }}</label>
<div class="controls">
<div class="input-append">
<input type="number" step="any" min="1" class="input-mini text-right" data-bind="value: serial_timeoutTemperature" id="settings-serialTimeoutTemperature">
<span class="add-on">s</span>
</div>
<span class="help-inline">{{ _('When printing or idle')}}</span>
</div>
<div class="controls">
<div class="input-append">
<input type="number" step="any" min="1" class="input-mini text-right" data-bind="value: serial_timeoutTemperatureTargetSet" id="settings-serialTimeoutTemperatureTargetSet">
<span class="add-on">s</span>
</div>
<span class="help-inline">{{ _('When a target temperature is set')}}</span>
</div>
</div>
<div class="control-group" title="{{ _('Interval in which to poll for the SD printing status information from the printer while printing') }}">

View file

@ -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,22 @@ class MachineCom(object):
eventManager().fire(Events.CONNECTED, payload)
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=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=target_default)
if self._bedTemp and len(self._bedTemp) > 0 and self._bedTemp[1] > self._temperatureTargetSetThreshold:
return get_interval("temperatureTargetSet", default_value=target_default)
return get_interval("temperature", default_value=busy_default)
def _sendFromQueue(self):
if not self._commandQueue.empty() and not self.isStreaming():
entry = self._commandQueue.get()