OctoPrint-FanSpeedSlider/octoprint_fanspeedslider/__init__.py

88 lines
2.7 KiB
Python
Raw Normal View History

2017-08-28 23:10:51 +02:00
# coding=utf-8
from __future__ import absolute_import
2017-09-04 19:52:55 +02:00
from decimal import *
import re
2017-08-28 23:10:51 +02:00
import octoprint.plugin
class FanSliderPlugin(octoprint.plugin.StartupPlugin,
2017-08-30 10:28:26 +02:00
octoprint.plugin.TemplatePlugin,
octoprint.plugin.SettingsPlugin,
octoprint.plugin.AssetPlugin):
2017-09-04 19:52:55 +02:00
def on_after_startup(self):
2017-09-05 02:57:55 +02:00
self.get_settings_updates()
2017-09-04 19:52:55 +02:00
2017-08-30 10:28:26 +02:00
def get_settings_defaults(self):
2017-09-04 19:52:55 +02:00
return dict(
defaultFanSpeed=100,
2017-09-04 19:52:55 +02:00
minSpeed=0,
maxSpeed=100
)
def on_settings_save(self, data):
octoprint.plugin.SettingsPlugin.on_settings_save(self, data)
2017-09-05 02:57:55 +02:00
self.get_settings_updates()
2017-08-30 10:28:26 +02:00
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)
2017-09-04 19:52:55 +02:00
]
2017-09-05 02:57:55 +02:00
def get_settings_updates(self):
self.defaultFanSpeed = self._settings.get(["defaultFanSpeed"])
2017-09-05 02:57:55 +02:00
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?
2017-09-05 03:13:39 +02:00
self.minPWM = round( Decimal(self.minSpeed) * Decimal(2.55), 2 )
self.maxPWM = round( Decimal(self.maxSpeed) * Decimal(2.55), 2 )
2017-09-05 02:57:55 +02:00
2017-09-04 19:52:55 +02:00
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) + " (" + str(self.minSpeed) + "%)")
2017-09-04 19:52:55 +02:00
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) + " (" + str(self.maxSpeed) + "%)")
2017-09-04 19:52:55 +02:00
cmd = "M106 S" + str(self.maxPWM)
return cmd,
2017-08-30 10:28:26 +02:00
def get_update_information(self):
2017-08-28 23:10:51 +02:00
return dict(
fanspeedslider=dict(
2017-09-04 19:52:55 +02:00
displayName="Fan Speed Control",
2017-08-28 23:10:51 +02:00
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"
)
)
2017-09-04 19:52:55 +02:00
__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,
2017-08-28 23:10:51 +02:00
"octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information
}