commit 594455ef614193fc19c5ebfcec24605109b2a81e Author: ntoff Date: Tue Aug 29 07:10:51 2017 +1000 upload diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..82c8e05 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +root = true + +[*] +end_of_line = lf +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true + +[**.py] +indent_style = tab + +[**.js] +indent_style = space +indent_size = 4 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..840565b --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +*.pyc +*.swp +.idea +*.iml +build +dist +*.egg* +.DS_Store +*.zip +.vscode \ No newline at end of file diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..0be8242 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,2 @@ +include README.md +recursive-include octoprint_fanspeedslider * diff --git a/README.md b/README.md new file mode 100644 index 0000000..843ba8c --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +# OctoPrint-FanSpeedSlider + +Adds 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.* + +## Setup + +Install manually using this URL: + + https://github.com/ntoff/OctoPrint-fanspeedslider/archive/master.zip + diff --git a/babel.cfg b/babel.cfg new file mode 100644 index 0000000..b6f5945 --- /dev/null +++ b/babel.cfg @@ -0,0 +1,6 @@ +[python: */**.py] +[jinja2: */**.jinja2] +extensions=jinja2.ext.autoescape, jinja2.ext.with_ + +[javascript: */**.js] +extract_messages = gettext, ngettext diff --git a/image/slider.JPG b/image/slider.JPG new file mode 100644 index 0000000..9eb38b2 Binary files /dev/null and b/image/slider.JPG differ diff --git a/octoprint_fanspeedslider/__init__.py b/octoprint_fanspeedslider/__init__.py new file mode 100644 index 0000000..9dfc9fc --- /dev/null +++ b/octoprint_fanspeedslider/__init__.py @@ -0,0 +1,36 @@ +# coding=utf-8 +from __future__ import absolute_import + +import octoprint.plugin + +class FanSliderPlugin(octoprint.plugin.StartupPlugin, + octoprint.plugin.TemplatePlugin, + octoprint.plugin.SettingsPlugin, + octoprint.plugin.AssetPlugin): + + def get_assets(self): + return dict( + js=["js/fanslider.js"] + ) + + def get_update_information(self): + return dict( + fanspeedslider=dict( + displayName="Fan Speed Slider", + displayVersion=self._plugin_version, + + # version check: github repository + type="github_release", + user="ntoff", + repo="OctoPrint-FanSpeedSlider", + current=self._plugin_version, + + # update method: pip + pip="https://github.com/ntoff/OctoPrint-FanSpeedSlider/archive/{target_version}.zip" + ) + ) +__plugin_name__ = "Fan Speed Slider" +__plugin_implementation__ = FanSliderPlugin() +__plugin_hooks__ = { + "octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information + } \ No newline at end of file diff --git a/octoprint_fanspeedslider/static/js/fanslider.js b/octoprint_fanspeedslider/static/js/fanslider.js new file mode 100644 index 0000000..be72e4d --- /dev/null +++ b/octoprint_fanspeedslider/static/js/fanslider.js @@ -0,0 +1,49 @@ +/* + * + * + * Author: ntoff + * License: AGPLv3 + */ +$(function() { + + function FanSliderPluginViewModel(parameters) { + var self = this; + + self.printerstate = parameters[0]; + self.loginstate = parameters[1]; + self.control = parameters[2] + + fanSpeed = ko.observable(255); + //convert 0 - 255 to 0 - 100% for the button + fanPercent = ko.pureComputed(function () { + return Math.floor(fanSpeed() /255 * 100); + }); + //set fan speed + sendFanSpeed = function () { + self.control.sendCustomCommand({ command: "M106 S" + fanSpeed() }); + }; + //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"); + + //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("\ + \ + "); + + } + OCTOPRINT_VIEWMODELS.push([ + FanSliderPluginViewModel, + + ["printerStateViewModel", "loginStateViewModel", "controlViewModel"] + ]); +}); \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a1dc463 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,9 @@ +### +# This file is only here to make sure that something like +# +# pip install -e . +# +# works as expected. Requirements can be found in setup.py. +### + +. diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..d92ead5 --- /dev/null +++ b/setup.py @@ -0,0 +1,94 @@ +# coding=utf-8 + +######################################################################################################################## +### Do not forget to adjust the following variables to your own plugin. + +# The plugin's identifier, has to be unique +plugin_identifier = "fanspeedslider" + +# The plugin's python package, should be "octoprint_", has to be unique +plugin_package = "octoprint_fanspeedslider" + +# The plugin's human readable name. Can be overwritten within OctoPrint's internal data via __plugin_name__ in the +# plugin module +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.0" + +# The plugin's description. Can be overwritten within OctoPrint's internal data via __plugin_description__ in the plugin +# module +plugin_description = """Slider to control the speed of the print cooling fan.""" + +# The plugin's author. Can be overwritten within OctoPrint's internal data via __plugin_author__ in the plugin module +plugin_author = "ntoff" + +# The plugin's author's mail address. +plugin_author_email = "" + +# The plugin's homepage URL. Can be overwritten within OctoPrint's internal data via __plugin_url__ in the plugin module +plugin_url = "https://github.com/ntoff/OctoPrint-FanSpeedSlider" + +# The plugin's license. Can be overwritten within OctoPrint's internal data via __plugin_license__ in the plugin module +plugin_license = "AGPLv3" + +# Any additional requirements besides OctoPrint should be listed here +plugin_requires = [] + +### -------------------------------------------------------------------------------------------------------------------- +### More advanced options that you usually shouldn't have to touch follow after this point +### -------------------------------------------------------------------------------------------------------------------- + +# Additional package data to install for this plugin. The subfolders "templates", "static" and "translations" will +# already be installed automatically if they exist. +plugin_additional_data = [] + +# Any additional python packages you need to install with your plugin that are not contained in .* +plugin_additional_packages = [] + +# Any python packages within .* you do NOT want to install with your plugin +plugin_ignored_packages = [] + +# Additional parameters for the call to setuptools.setup. If your plugin wants to register additional entry points, +# define dependency links or other things like that, this is the place to go. Will be merged recursively with the +# default setup parameters as provided by octoprint_setuptools.create_plugin_setup_parameters using +# octoprint.util.dict_merge. +# +# Example: +# plugin_requires = ["someDependency==dev"] +# additional_setup_parameters = {"dependency_links": ["https://github.com/someUser/someRepo/archive/master.zip#egg=someDependency-dev"]} +additional_setup_parameters = {} + +######################################################################################################################## + +from setuptools import setup + +try: + import octoprint_setuptools +except: + print("Could not import OctoPrint's setuptools, are you sure you are running that under " + "the same python installation that OctoPrint is installed under?") + import sys + sys.exit(-1) + +setup_parameters = octoprint_setuptools.create_plugin_setup_parameters( + identifier=plugin_identifier, + package=plugin_package, + name=plugin_name, + version=plugin_version, + description=plugin_description, + author=plugin_author, + mail=plugin_author_email, + url=plugin_url, + license=plugin_license, + requires=plugin_requires, + additional_packages=plugin_additional_packages, + ignored_packages=plugin_ignored_packages, + additional_data=plugin_additional_data +) + +if len(additional_setup_parameters): + from octoprint.util import dict_merge + setup_parameters = dict_merge(setup_parameters, additional_setup_parameters) + +setup(**setup_parameters)