commit
ce10fc7e3b
@ -1,6 +1,8 @@
|
||||
# coding=utf-8
|
||||
from __future__ import absolute_import
|
||||
|
||||
from decimal import *
|
||||
import re
|
||||
import octoprint.plugin
|
||||
|
||||
class FanSliderPlugin(octoprint.plugin.StartupPlugin,
|
||||
@ -8,8 +10,19 @@ class FanSliderPlugin(octoprint.plugin.StartupPlugin,
|
||||
octoprint.plugin.SettingsPlugin,
|
||||
octoprint.plugin.AssetPlugin):
|
||||
|
||||
def on_after_startup(self):
|
||||
self.get_settings_updates()
|
||||
|
||||
def get_settings_defaults(self):
|
||||
return dict(fanSpeed=100)
|
||||
return dict(
|
||||
defaultFanSpeed=100,
|
||||
minSpeed=0,
|
||||
maxSpeed=100
|
||||
)
|
||||
|
||||
def on_settings_save(self, data):
|
||||
octoprint.plugin.SettingsPlugin.on_settings_save(self, data)
|
||||
self.get_settings_updates()
|
||||
|
||||
def get_assets(self):
|
||||
return dict(
|
||||
@ -22,10 +35,33 @@ class FanSliderPlugin(octoprint.plugin.StartupPlugin,
|
||||
dict(type="settings", custom_bindings=False)
|
||||
]
|
||||
|
||||
def get_settings_updates(self):
|
||||
self.defaultFanSpeed = self._settings.get(["defaultFanSpeed"])
|
||||
self.minSpeed = self._settings.get(["minSpeed"])
|
||||
self.maxSpeed = self._settings.get(["maxSpeed"])
|
||||
|
||||
getcontext().prec=5 #sets precision for "Decimal" not sure if this'll cause conflicts, ideas?
|
||||
self.minPWM = round( Decimal(self.minSpeed) * Decimal(2.55), 2 )
|
||||
self.maxPWM = round( Decimal(self.maxSpeed) * Decimal(2.55), 2 )
|
||||
|
||||
def rewrite_m106(self, comm_instance, phase, cmd, cmd_type, gcode, *args, **kwargs):
|
||||
if gcode and gcode.startswith('M106'):
|
||||
fanPwm = re.search("S(\d+.\d+)", cmd)
|
||||
if fanPwm and fanPwm.group(1):
|
||||
fanPwm = fanPwm.group(1)
|
||||
if Decimal(fanPwm) < self.minPWM and Decimal(fanPwm) != 0:
|
||||
self._logger.info("fan pwm value " + str(fanPwm) + " is below threshold, increasing to " + str(self.minPWM))
|
||||
cmd = "M106 S" + str(self.minPWM)
|
||||
return cmd,
|
||||
elif Decimal(fanPwm) > self.maxPWM:
|
||||
self._logger.info("fan pwm value " + str(fanPwm) + " is above threshold, decreasing to " + str(self.maxPWM))
|
||||
cmd = "M106 S" + str(self.maxPWM)
|
||||
return cmd,
|
||||
|
||||
def get_update_information(self):
|
||||
return dict(
|
||||
fanspeedslider=dict(
|
||||
displayName="Fan Speed Slider",
|
||||
displayName="Fan Speed Control",
|
||||
displayVersion=self._plugin_version,
|
||||
|
||||
# version check: github repository
|
||||
@ -38,8 +74,15 @@ class FanSliderPlugin(octoprint.plugin.StartupPlugin,
|
||||
pip="https://github.com/ntoff/OctoPrint-FanSpeedSlider/archive/{target_version}.zip"
|
||||
)
|
||||
)
|
||||
__plugin_name__ = "Fan Speed Slider"
|
||||
__plugin_implementation__ = FanSliderPlugin()
|
||||
__plugin_hooks__ = {
|
||||
|
||||
__plugin_name__ = "Fan Speed Control"
|
||||
|
||||
def __plugin_load__():
|
||||
global __plugin_implementation__
|
||||
__plugin_implementation__ = __plugin_implementation__ = FanSliderPlugin()
|
||||
|
||||
global __plugin_hooks__
|
||||
__plugin_hooks__ = {
|
||||
"octoprint.comm.protocol.gcode.queuing": __plugin_implementation__.rewrite_m106,
|
||||
"octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information
|
||||
}
|
@ -7,20 +7,20 @@ $(function() {
|
||||
function FanSliderPluginViewModel(parameters) {
|
||||
var self = this;
|
||||
|
||||
self.printerstate = parameters[0];
|
||||
self.loginstate = parameters[1];
|
||||
self.control = parameters[2];
|
||||
self.settings = parameters[3];
|
||||
self.settings = parameters[0];
|
||||
self.control = parameters[1];
|
||||
self.loginState = parameters[2];
|
||||
|
||||
//default to 100% fan speed
|
||||
fanSpeed = ko.observable(undefined);
|
||||
|
||||
//convert percentage into PWM
|
||||
fanPWM = ko.pureComputed(function () {
|
||||
return Math.round(fanSpeed() * 255 / 100);
|
||||
self.fanPWM = ko.pureComputed(function () {
|
||||
self.speed = fanSpeed() * 255 / 100 //don't forget to limit this to 2 decimal places at some point.
|
||||
return self.speed;
|
||||
});
|
||||
//send gcode to set fan speed
|
||||
sendFanSpeed = function () {
|
||||
self.control.sendCustomCommand({ command: "M106 S" + fanPWM() });
|
||||
self.control.sendCustomCommand({ command: "M106 S" + self.fanPWM() });
|
||||
};
|
||||
//extra classes
|
||||
$("#control > div.jog-panel").eq(0).addClass("controls");
|
||||
@ -54,12 +54,11 @@ $(function() {
|
||||
}
|
||||
//retrieve settings
|
||||
self.onBeforeBinding = function() {
|
||||
fanSpeed(self.settings.settings.plugins.fanspeedslider.fanSpeed());
|
||||
fanSpeed(self.settings.settings.plugins.fanspeedslider.defaultFanSpeed());
|
||||
}
|
||||
}
|
||||
OCTOPRINT_VIEWMODELS.push([
|
||||
FanSliderPluginViewModel,
|
||||
|
||||
["printerStateViewModel", "loginStateViewModel", "controlViewModel", "settingsViewModel"]
|
||||
["settingsViewModel", "controlViewModel", "loginStateViewModel"]
|
||||
]);
|
||||
});
|
@ -1,18 +1,38 @@
|
||||
<h4>{{ _('Fan Speed Slider') }}</h4>
|
||||
<div>
|
||||
<p>{{ _('Set the default value for the fan speed slider.') }}</p>
|
||||
</div>
|
||||
<h3>{{ _('Fan Speed Control') }}</h3>
|
||||
<div>
|
||||
<form class="form-horizontal">
|
||||
<p>{{ _('Set the default value for the speed slider.') }}</p>
|
||||
<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">
|
||||
<input type="number" min="0" max="100" class="input-mini" data-bind="value: settings.plugins.fanspeedslider.defaultFanSpeed">
|
||||
<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>
|
||||
<span class="help-block">{{ _('The default value the slider will be set to when opening OctoPrint\'s UI') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<p>{{ _('The settings below can be used to limit the fan\'s output without having to re-slice and re-upload your gcode.') }}</p>
|
||||
<div class="control-group">
|
||||
<label class="control-label">{{ _('Minimum Speed') }}</label>
|
||||
<div class="controls">
|
||||
<div class="input-append">
|
||||
<input type="number" min="0" max="100" class="input-mini" data-bind="value: settings.plugins.fanspeedslider.minSpeed">
|
||||
<span class="add-on">%</span>
|
||||
</div>
|
||||
<span class="help-block">{{ _('Any value sent which is below this value will be increased to meet this speed. Useful if your fan doesn\'t work below a certain threshold.') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">{{ _('Maximum Speed') }}</label>
|
||||
<div class="controls">
|
||||
<div class="input-append">
|
||||
<input type="number" min="0" max="100" class="input-mini" data-bind="value: settings.plugins.fanspeedslider.maxSpeed">
|
||||
<span class="add-on">%</span>
|
||||
</div>
|
||||
<span class="help-block">{{ _('Any value sent which is above this value will be decreased to meet this speed. Useful if your fan is too strong on full speed.') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<p><i>{{ _('NOTE: The min/max setting has no effect when you are printing from an SD card that is attached directly to the printer as the gcode does not pass through OctoPrint.') }}</i></p>
|
||||
</form>
|
||||
</div>
|
||||
|
2
setup.py
2
setup.py
@ -14,7 +14,7 @@ plugin_package = "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
|
||||
plugin_version = "0.1.2"
|
||||
plugin_version = "0.1.3"
|
||||
|
||||
# The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin
|
||||
# module
|
||||
|
Loading…
Reference in New Issue
Block a user