Add default value setting (merge pull)

Add setting for default value
This commit is contained in:
ntoff 2017-09-03 17:40:49 +10:00 committed by GitHub
commit 8b9b08f382
6 changed files with 51 additions and 16 deletions

View File

@ -1,10 +1,16 @@
# OctoPrint-FanSpeedSlider # Fan Speed Slider Plugin
Adds a slider to control the speed of a parts cooling fan. Add a slider to control the speed of a parts cooling fan.
![](./image/slider.JPG) ![](./image/slider.JPG)
*Note: Slider does __not__ follow the speed of the fan. If the fan speed is set via gcode or an LCD panel on the printer, the slider will not respond to the change.* ## Usage
Slide the slider, click the button. There really isn't much else to do :)
The default value of the slider is user configurable, this is the value that the slider will be set to upon loading OctoPrint's UI, and any time you refresh the page. The default value setting does __NOT__ limit the output of the fan, if you set the default value to 10% and set the fan to 100% it will still come on at 100%. To limit the min/max speed of your fan during a print, please see your slicer's documentation and settings.
*Note: Slider does __not__ follow the speed of the fan. If the fan speed is set via gcode or an LCD panel on the printer, the slider will not respond to the change. It is a __setting__, not an indicator, and functions the same way the feedrate and flowrate sliders do.*
## Setup ## Setup

View File

@ -9,7 +9,7 @@ class FanSliderPlugin(octoprint.plugin.StartupPlugin,
octoprint.plugin.AssetPlugin): octoprint.plugin.AssetPlugin):
def get_settings_defaults(self): def get_settings_defaults(self):
return dict(fanSpeed="255") return dict(fanSpeed=100)
def get_assets(self): def get_assets(self):
return dict( return dict(
@ -17,6 +17,11 @@ class FanSliderPlugin(octoprint.plugin.StartupPlugin,
css=["css/style.css"] css=["css/style.css"]
) )
def get_template_configs(self):
return [
dict(type="settings", custom_bindings=False)
]
def get_update_information(self): def get_update_information(self):
return dict( return dict(
fanspeedslider=dict( fanspeedslider=dict(

View File

@ -14,3 +14,7 @@
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }
div#settings_plugin_fanspeedslider div {
width: 80%;
}

View File

@ -1,6 +1,4 @@
/* /*
*
*
* Author: ntoff * Author: ntoff
* License: AGPLv3 * License: AGPLv3
*/ */
@ -12,13 +10,15 @@ $(function() {
self.printerstate = parameters[0]; self.printerstate = parameters[0];
self.loginstate = parameters[1]; self.loginstate = parameters[1];
self.control = parameters[2]; self.control = parameters[2];
self.settings = parameters[3];
//default to 100% fan speed //default to 100% fan speed
fanSpeed = ko.observable(100); fanSpeed = ko.observable(undefined);
//convert percentage into PWM //convert percentage into PWM
fanPWM = ko.pureComputed(function () { fanPWM = ko.pureComputed(function () {
return Math.round(fanSpeed() * 255 / 100); return Math.round(fanSpeed() * 255 / 100);
}); });
//set fan speed //send gcode to set fan speed
sendFanSpeed = function () { sendFanSpeed = function () {
self.control.sendCustomCommand({ command: "M106 S" + fanPWM() }); self.control.sendCustomCommand({ command: "M106 S" + fanPWM() });
}; };
@ -26,13 +26,12 @@ $(function() {
$("#control > div.jog-panel").eq(0).addClass("controls"); $("#control > div.jog-panel").eq(0).addClass("controls");
$("#control > div.jog-panel").eq(1).addClass("tools"); $("#control > div.jog-panel").eq(1).addClass("tools");
$("#control > div.jog-panel").eq(2).addClass("general"); $("#control > div.jog-panel").eq(2).addClass("general");
//Only display the slider if TouchUI isn't active (sorry) //If !TouchUI then remove standard buttons + add slider + new buttons
if ($("#touch body").length ==0 ) { if ($("#touch body").length ==0 ) {
//add ID to buttons //add ID to buttons
$("#control > div.general").find("button").eq(0).attr("id", "motors-off"); $("#control > div.general").find("button").eq(0).attr("id", "motors-off");
$("#control > div.general").find("button").eq(1).attr("id", "fan-on"); $("#control > div.general").find("button").eq(1).attr("id", "fan-on");
$("#control > div.general").find("button").eq(2).attr("id", "fan-off"); $("#control > div.general").find("button").eq(2).attr("id", "fan-off");
//remove original fan on/off buttons //remove original fan on/off buttons
$("#fan-on").remove(); $("#fan-on").remove();
$("#fan-off").remove(); $("#fan-off").remove();
@ -42,11 +41,10 @@ $(function() {
<button class=\"btn btn-block control-box\" data-bind=\"enable: isOperational() && !isPrinting() && loginState.isUser(), click: function() { sendFanSpeed() }\">" + gettext("Fan on") + ":<span data-bind=\"text: fanSpeed() + '%'\"></span></button>\ <button class=\"btn btn-block control-box\" data-bind=\"enable: isOperational() && !isPrinting() && loginState.isUser(), click: function() { sendFanSpeed() }\">" + gettext("Fan on") + ":<span data-bind=\"text: fanSpeed() + '%'\"></span></button>\
<button class=\"btn btn-block control-box\" data-bind=\"enable: isOperational() && !isPrinting() && loginState.isUser(), click: function() { $root.sendCustomCommand({ type: 'command', commands: ['M106 S0'] }) }\">" + gettext("Fan off") + "</button>\ <button class=\"btn btn-block control-box\" data-bind=\"enable: isOperational() && !isPrinting() && loginState.isUser(), click: function() { $root.sendCustomCommand({ type: 'command', commands: ['M106 S0'] }) }\">" + gettext("Fan off") + "</button>\
"); ");
} else { } else { //if TouchUI is active we only add the speed input + fan on button in a new section.
console.log("Fan Speed Slider: NOTICE! TouchUI is active, adding simplified control."); console.log("Fan Speed Slider: NOTICE! TouchUI is active, adding simplified control.");
$("#control > div.jog-panel.general").after("\ $("#control > div.jog-panel.general").after("\
<div id=\"control-fan-slider\" class=\"jog-panel filament\" data-bind=\"visible: loginState.isUser\">\ <div id=\"control-fan-slider\" class=\"jog-panel filament\" data-bind=\"visible: loginState.isUser\">\
<h1>" + gettext("Filament") + "</h1>\
<div>\ <div>\
<input type=\"number\" style=\"width: 150px\" data-bind=\"slider: {min: 00, max: 255, step: 1, value: fanSpeed, tooltip: 'hide'}\">\ <input type=\"number\" style=\"width: 150px\" data-bind=\"slider: {min: 00, max: 255, step: 1, value: fanSpeed, tooltip: 'hide'}\">\
<button class=\"btn btn-block control-box\" data-bind=\"enable: isOperational() && !isPrinting() && loginState.isUser(), click: function() { sendFanSpeed() }\">" + gettext("Fan Speed(%)") + "</button>\ <button class=\"btn btn-block control-box\" data-bind=\"enable: isOperational() && !isPrinting() && loginState.isUser(), click: function() { sendFanSpeed() }\">" + gettext("Fan Speed(%)") + "</button>\
@ -54,10 +52,14 @@ $(function() {
</div>\ </div>\
"); ");
} }
//retrieve settings
self.onBeforeBinding = function() {
fanSpeed(self.settings.settings.plugins.fanspeedslider.fanSpeed());
}
} }
OCTOPRINT_VIEWMODELS.push([ OCTOPRINT_VIEWMODELS.push([
FanSliderPluginViewModel, FanSliderPluginViewModel,
["printerStateViewModel", "loginStateViewModel", "controlViewModel"] ["printerStateViewModel", "loginStateViewModel", "controlViewModel", "settingsViewModel"]
]); ]);
}); });

View File

@ -0,0 +1,18 @@
<h4>{{ _('Fan Speed Slider') }}</h4>
<div>
<p>{{ _('Set the default value for the fan speed slider.') }}</p>
</div>
<div>
<form class="form-horizontal">
<div class="control-group">
<label class="control-label">{{ _('Default Value') }}</label>
<div class="controls">
<div class="input-append">
<input type="number" min="0" max="100" class="input-mini" data-bind="value: settings.plugins.fanspeedslider.fanSpeed">
<span class="add-on">%</span>
</div>
<span class="help-inline">{{ _('This value does <i><b>not</b></i> affect the maximum or minimum speed of the fan. To limit the power the fan will use during a print, see your slicer\'s min / max fan speed setting.') }}</span>
</div>
</div>
</form>
</div>

View File

@ -14,7 +14,7 @@ plugin_package = "octoprint_fanspeedslider"
plugin_name = "OctoPrint-FanSpeedSlider" plugin_name = "OctoPrint-FanSpeedSlider"
# The plugin's version. Can be overwritten within OctoPrint's internal data via __plugin_version__ in the plugin module # The plugin's version. Can be overwritten within OctoPrint's internal data via __plugin_version__ in the plugin module
plugin_version = "0.1.1" plugin_version = "0.1.2"
# The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin # The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin
# module # module