2017-08-28 23:10:51 +02:00
/ *
* Author : ntoff
* License : AGPLv3
* /
$ ( function ( ) {
2017-08-30 14:39:57 +02:00
function FanSliderPluginViewModel ( parameters ) {
2017-11-11 16:02:29 +01:00
//'use strict';
2017-08-28 23:10:51 +02:00
var self = this ;
2017-09-05 14:57:53 +02:00
self . settings = parameters [ 0 ] ;
self . control = parameters [ 1 ] ;
self . loginState = parameters [ 2 ] ;
2017-08-30 14:39:57 +02:00
2017-11-11 16:02:29 +01:00
//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
2017-09-04 19:52:55 +02:00
2017-11-11 16:02:29 +01:00
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" ) {
2017-11-11 16:08:27 +01:00
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 ( ) + "%" ) ;
2017-11-11 16:02:29 +01:00
self . control . fanSpeed ( self . control . minFanSpeed ( ) ) ;
var options = {
text : 'Fan speed increased to meet minimum requirement.' ,
}
self . showNotify ( self , options ) ;
2017-11-11 16:08:27 +01:00
2017-11-11 16:02:29 +01:00
}
else {
if ( self . control . fanSpeed ( ) > self . control . maxFanSpeed ( ) ) {
2017-11-11 16:08:27 +01:00
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 ( ) + "%" ) ;
2017-11-11 16:02:29 +01:00
self . control . fanSpeed ( self . control . maxFanSpeed ( ) ) ;
var options = {
text : 'Fan speed decreased to meet minimum requirement.' ,
}
self . showNotify ( self , options ) ;
2017-11-11 16:08:27 +01:00
2017-11-11 16:02:29 +01:00
}
}
self . control . sendCustomCommand ( { command : "M106 S" + self . speed } ) ;
2017-08-28 23:10:51 +02:00
} ) ;
2017-11-11 16:02:29 +01:00
//ph34r
2017-11-06 08:23:25 +01:00
try {
2017-11-11 16:02:29 +01:00
//extra classes, I hate using this but it makes finding the buttons easier
2017-11-06 08:23:25 +01:00
$ ( "#control > div.jog-panel" ) . eq ( 0 ) . addClass ( "controls" ) ;
$ ( "#control > div.jog-panel" ) . eq ( 1 ) . addClass ( "tools" ) ;
$ ( "#control > div.jog-panel" ) . eq ( 2 ) . addClass ( "general" ) ;
2017-11-11 16:02:29 +01:00
//If not TouchUI then remove standard buttons + add slider + new buttons
2017-11-06 08:23:25 +01:00
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 ( ) ;
//add new fan controls
$ ( "#control > div.jog-panel.general" ) . find ( "button" ) . eq ( 0 ) . before ( " \
< input type = \ "number\" style=\"width: 90px\" data-bind=\"slider: {min: 00, max: 100, step: 1, value: fanSpeed, tooltip: 'hide'}\" > \
2017-11-11 16:02:29 +01:00
< button class = \ "btn btn-block control-box\" data-bind=\"enable: isOperational() && loginState.isUser(), click: function() { sendFanSpeed() }\">" + gettext ( "Fan" ) + ":<span data-bind=\"text: fanSpeed() + '%'\" > < / s p a n > < / b u t t o n > \
2017-11-06 08:23:25 +01:00
< button class = \ "btn btn-block control-box\" data-bind=\"enable: isOperational() && loginState.isUser(), click: function() { $root.sendCustomCommand({ type: 'command', commands: ['M106 S0'] }) }\">" + gettext ( "Fan off" ) + " < / b u t t o n > \
" ) ;
} 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\" > \
< 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() && loginState.isUser(), click: function() { sendFanSpeed() }\">" + gettext ( "Fan Speed(%)" ) + " < / b u t t o n > \
< / d i v > \
2017-08-30 10:28:26 +02:00
< / d i v > \
2017-11-06 08:23:25 +01:00
" ) ;
}
}
catch ( error ) {
console . log ( error ) ;
2017-08-30 10:28:26 +02:00
}
2017-08-30 14:39:57 +02:00
//retrieve settings
self . onBeforeBinding = function ( ) {
2017-11-11 16:02:29 +01:00
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 ( ) ) ;
2017-08-30 14:39:57 +02:00
}
2017-08-28 23:10:51 +02:00
}
2017-11-11 12:41:07 +01:00
OCTOPRINT _VIEWMODELS . push ( {
construct : FanSliderPluginViewModel ,
additionalNames : [ ] ,
dependencies : [ "settingsViewModel" , "controlViewModel" , "loginStateViewModel" ] ,
optional : [ ] ,
elements : [ ]
2017-11-11 16:02:29 +01:00
} ) ;
2017-11-11 12:41:07 +01:00
} ) ;