From f4bb25718ac44744e9b4a2241cb231faab4213f9 Mon Sep 17 00:00:00 2001 From: ntoff Date: Sun, 12 Nov 2017 01:02:29 +1000 Subject: [PATCH] add some notifications about fan speed being altered Added a popup notification (can be disabled) and some console log text if the fan speed is altered. Also made the slider snap to the min/max value if it is out of range to give visual feedback that the plugin is doing something to the fan speed. --- octoprint_fanspeedslider/__init__.py | 3 +- .../static/js/fanslider.js | 68 +++++++++++++++---- .../templates/fanspeedslider_settings.jinja2 | 14 +++- 3 files changed, 68 insertions(+), 17 deletions(-) diff --git a/octoprint_fanspeedslider/__init__.py b/octoprint_fanspeedslider/__init__.py index 2ea42de..1a2e2b9 100644 --- a/octoprint_fanspeedslider/__init__.py +++ b/octoprint_fanspeedslider/__init__.py @@ -17,7 +17,8 @@ class FanSliderPlugin(octoprint.plugin.StartupPlugin, return dict( defaultFanSpeed=100, minSpeed=0, - maxSpeed=100 + maxSpeed=100, + notifyDelay=3000 ) def on_settings_save(self, data): diff --git a/octoprint_fanspeedslider/static/js/fanslider.js b/octoprint_fanspeedslider/static/js/fanslider.js index 1ace80d..ada8aef 100644 --- a/octoprint_fanspeedslider/static/js/fanslider.js +++ b/octoprint_fanspeedslider/static/js/fanslider.js @@ -5,29 +5,60 @@ $(function() { function FanSliderPluginViewModel(parameters) { + //'use strict'; var self = this; self.settings = parameters[0]; self.control = parameters[1]; self.loginState = parameters[2]; - fanSpeed = ko.observable(undefined); + //fanSpeed = ko.observable("0"); + self.control.fanSpeed = new ko.observable("100"); + self.control.minFanSpeed = new ko.observable("000"); + self.control.maxFanSpeed = new ko.observable("100"); + self.control.notifyDelay = new ko.observable("3000"); //time in milliseconds - //convert percentage into PWM - 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; + self.showNotify = function(self,options) { + options.hide = true; + options.title = "Fan Speed Control"; + options.delay = self.control.notifyDelay(); + options.type = "info"; + if (options.delay != "0") { + new PNotify(options); + } + + }; + + //send gcode to set fan speed TODO: not be a global function + sendFanSpeed = ko.pureComputed(function () { + self.speed = self.control.fanSpeed() * 255 / 100 //don't forget to limit this to 2 decimal places at some point. + if (self.control.fanSpeed() < self.control.minFanSpeed() && self.control.fanSpeed() != "0") { + self.control.fanSpeed(self.control.minFanSpeed()); + var options = { + text: 'Fan speed increased to meet minimum requirement.', + } + self.showNotify(self,options); + console.log("Fan Speed Control Plugin: " + self.control.fanSpeed() + "% is less than the minimum speed set in the fan control settings, increasing to " + self.control.minFanSpeed() + "%"); + } + else { + if (self.control.fanSpeed() > self.control.maxFanSpeed()) { + self.control.fanSpeed(self.control.maxFanSpeed()); + var options = { + text: 'Fan speed decreased to meet minimum requirement.', + } + self.showNotify(self,options); + console.log("Fan Speed Control Plugin: " + self.control.fanSpeed() + "% is more than the maximum speed set in the fan control settings, decreasing to " + self.control.maxFanSpeed() + "%"); + } + } + self.control.sendCustomCommand({ command: "M106 S" + self.speed }); }); - //send gcode to set fan speed - sendFanSpeed = function () { - self.control.sendCustomCommand({ command: "M106 S" + self.fanPWM() }); - }; + //ph34r try { - //extra classes + //extra classes, I hate using this but it makes finding the buttons easier $("#control > div.jog-panel").eq(0).addClass("controls"); $("#control > div.jog-panel").eq(1).addClass("tools"); $("#control > div.jog-panel").eq(2).addClass("general"); - //If !TouchUI then remove standard buttons + add slider + new buttons + //If not 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"); @@ -39,7 +70,7 @@ $(function() { //add new fan controls $("#control > div.jog-panel.general").find("button").eq(0).before("\ \ - \ + \ \ "); } else { //if TouchUI is active we only add the speed input + fan on button in a new section. @@ -59,7 +90,16 @@ $(function() { } //retrieve settings self.onBeforeBinding = function() { - fanSpeed(self.settings.settings.plugins.fanspeedslider.defaultFanSpeed()); + self.control.fanSpeed(self.settings.settings.plugins.fanspeedslider.defaultFanSpeed()); + self.control.minFanSpeed(self.settings.settings.plugins.fanspeedslider.minSpeed()); + self.control.maxFanSpeed(self.settings.settings.plugins.fanspeedslider.maxSpeed()); + self.control.notifyDelay(self.settings.settings.plugins.fanspeedslider.notifyDelay()); + } + //update settings in case user changes them, otherwise a refresh of the UI is required + self.onSettingsHidden = function() { + self.control.minFanSpeed(self.settings.settings.plugins.fanspeedslider.minSpeed()); + self.control.maxFanSpeed(self.settings.settings.plugins.fanspeedslider.maxSpeed()); + self.control.notifyDelay(self.settings.settings.plugins.fanspeedslider.notifyDelay()); } } @@ -69,5 +109,5 @@ $(function() { dependencies: ["settingsViewModel", "controlViewModel", "loginStateViewModel"], optional: [], elements: [] - }); + }); }); \ No newline at end of file diff --git a/octoprint_fanspeedslider/templates/fanspeedslider_settings.jinja2 b/octoprint_fanspeedslider/templates/fanspeedslider_settings.jinja2 index c05a308..00a318e 100644 --- a/octoprint_fanspeedslider/templates/fanspeedslider_settings.jinja2 +++ b/octoprint_fanspeedslider/templates/fanspeedslider_settings.jinja2 @@ -1,12 +1,11 @@

{{ _('Fan Speed Control') }}

-

{{ _('Set the default value for the speed slider.') }}

- + %
{{ _('The default value the slider will be set to when opening OctoPrint\'s UI') }} @@ -34,5 +33,16 @@

{{ _('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.') }}

+

{{ _('Notification Auto Hide Delay') }}

+
+ +
+
+ + ms +
+ {{ _('Delay (in milliseconds) before notifications are auto-hidden. Set to 0 to disable notifications.') }} +
+