Add default value setting (merge pull)
Add setting for default value
This commit is contained in:
commit
8b9b08f382
12
README.md
12
README.md
@ -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
|
||||||
|
|
||||||
|
@ -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(
|
||||||
|
@ -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%;
|
||||||
|
}
|
@ -1,24 +1,24 @@
|
|||||||
/*
|
/*
|
||||||
*
|
|
||||||
*
|
|
||||||
* Author: ntoff
|
* Author: ntoff
|
||||||
* License: AGPLv3
|
* License: AGPLv3
|
||||||
*/
|
*/
|
||||||
$(function() {
|
$(function() {
|
||||||
|
|
||||||
function FanSliderPluginViewModel(parameters) {
|
function FanSliderPluginViewModel(parameters) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
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"]
|
||||||
]);
|
]);
|
||||||
});
|
});
|
@ -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>
|
2
setup.py
2
setup.py
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user