Skip to content
This repository has been archived by the owner on Jan 5, 2021. It is now read-only.

Commit

Permalink
Add default value setting (merge pull)
Browse files Browse the repository at this point in the history
Add setting for default value
  • Loading branch information
ntoff authored Sep 3, 2017
2 parents 79bc20c + 7612b70 commit 8b9b08f
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 16 deletions.
12 changes: 9 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -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)

*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

Expand Down
7 changes: 6 additions & 1 deletion octoprint_fanspeedslider/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,19 @@ class FanSliderPlugin(octoprint.plugin.StartupPlugin,
octoprint.plugin.AssetPlugin):

def get_settings_defaults(self):
return dict(fanSpeed="255")
return dict(fanSpeed=100)

def get_assets(self):
return dict(
js=["js/fanslider.js"],
css=["css/style.css"]
)

def get_template_configs(self):
return [
dict(type="settings", custom_bindings=False)
]

def get_update_information(self):
return dict(
fanspeedslider=dict(
Expand Down
4 changes: 4 additions & 0 deletions octoprint_fanspeedslider/static/css/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,8 @@
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}

div#settings_plugin_fanspeedslider div {
width: 80%;
}
24 changes: 13 additions & 11 deletions octoprint_fanspeedslider/static/js/fanslider.js
Original file line number Diff line number Diff line change
@@ -1,38 +1,37 @@
/*
*
*
* Author: ntoff
* License: AGPLv3
*/
$(function() {

function FanSliderPluginViewModel(parameters) {
function FanSliderPluginViewModel(parameters) {
var self = this;

self.printerstate = parameters[0];
self.loginstate = parameters[1];
self.control = parameters[2];
self.settings = parameters[3];

//default to 100% fan speed
fanSpeed = ko.observable(100);
fanSpeed = ko.observable(undefined);
//convert percentage into PWM
fanPWM = ko.pureComputed(function () {
return Math.round(fanSpeed() * 255 / 100);
});
//set fan speed
//send gcode to set fan speed
sendFanSpeed = function () {
self.control.sendCustomCommand({ command: "M106 S" + fanPWM() });
};
//extra classes
$("#control > div.jog-panel").eq(0).addClass("controls");
$("#control > div.jog-panel").eq(1).addClass("tools");
$("#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 ) {
//add ID to buttons
$("#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(2).attr("id", "fan-off");

//remove original fan on/off buttons
$("#fan-on").remove();
$("#fan-off").remove();
Expand All @@ -42,22 +41,25 @@ $(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() { $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.");
$("#control > div.jog-panel.general").after("\
<div id=\"control-fan-slider\" class=\"jog-panel filament\" data-bind=\"visible: loginState.isUser\">\
<h1>" + gettext("Filament") + "</h1>\
<div>\
<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>\
</div>\
</div>\
");
}
//retrieve settings
self.onBeforeBinding = function() {
fanSpeed(self.settings.settings.plugins.fanspeedslider.fanSpeed());
}
}
OCTOPRINT_VIEWMODELS.push([
FanSliderPluginViewModel,

["printerStateViewModel", "loginStateViewModel", "controlViewModel"]
]);
["printerStateViewModel", "loginStateViewModel", "controlViewModel", "settingsViewModel"]
]);
});
18 changes: 18 additions & 0 deletions octoprint_fanspeedslider/templates/fanspeedslider_settings.jinja2
Original file line number Diff line number Diff line change
@@ -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 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
plugin_name = "OctoPrint-FanSpeedSlider"

# 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
# module
Expand Down

0 comments on commit 8b9b08f

Please sign in to comment.