diff --git a/octoprint_CalibrationTools/__init__.py b/octoprint_CalibrationTools/__init__.py index 527c789..3b0a764 100644 --- a/octoprint_CalibrationTools/__init__.py +++ b/octoprint_CalibrationTools/__init__.py @@ -1,5 +1,5 @@ -# coding=utf-8 -from __future__ import absolute_import +# -*- coding: utf-8 -*- +from __future__ import absolute_import, division, print_function, unicode_literals import octoprint.plugin @@ -16,13 +16,14 @@ class CalibrationtoolsPlugin( models.CalibrationModel ): collectCommand = False + data = {} def initialize(self): self.collectCommand = False # self._api = api.API(self) def on_after_startup(self): - self._logger.debug("----------------[CalibrationTools]----------------") + self._logger.debug("----------------[ CalibrationTools ]----------------") self.data = self.getModel() self.collectCommand = True self._printer.commands("M92") @@ -77,7 +78,9 @@ def __plugin_load__(): global __plugin_hooks__ __plugin_hooks__ = { "octoprint.plugin.softwareupdate.check_config": __plugin_implementation__.get_update_information, - "octoprint.comm.protocol.gcode.received": __plugin_implementation__.calibrateGCodeReceived, - "octoprint.comm.protocol.gcode.sending": __plugin_implementation__.calibrateGCodeSending + "octoprint.comm.protocol.firmware.info": __plugin_implementation__.firmwareInfo, + "octoprint.comm.protocol.gcode.received": __plugin_implementation__.gCodeReceived, + "octoprint.comm.protocol.gcode.sending": __plugin_implementation__.gCodeSending, + "octoprint.comm.protocol.temperatures.received": __plugin_implementation__.processTemp # "octoprint.comm.protocol.atcommand.sending": __plugin_implementation__.comm_protocol_atcommand_sending } diff --git a/octoprint_CalibrationTools/api.py b/octoprint_CalibrationTools/api.py index 2677443..68aa47a 100644 --- a/octoprint_CalibrationTools/api.py +++ b/octoprint_CalibrationTools/api.py @@ -1,4 +1,5 @@ -from __future__ import absolute_import, division, unicode_literals +# -*- coding: utf-8 -*- +from __future__ import absolute_import, division, print_function, unicode_literals import octoprint.plugin import flask @@ -6,11 +7,16 @@ import flask CMD_LOAD_STEPS = "loadSteps" +def someTestFunc(self, temps, a, b): + self._logger.debug("a ajuns %s, %s, %s", temps, a,b) + + class API(octoprint.plugin.SimpleApiPlugin): @staticmethod def get_api_commands(): return { - CMD_LOAD_STEPS: [] + CMD_LOAD_STEPS: [], + "TEST": [] } def on_api_get(self, request): @@ -28,3 +34,6 @@ class API(octoprint.plugin.SimpleApiPlugin): return flask.jsonify({ "data": self.data["steps"] }) + if command == "TEST": + self.registerEventTemp("T0", 100, someTestFunc, 1,"test") + return diff --git a/octoprint_CalibrationTools/hooks.py b/octoprint_CalibrationTools/hooks.py index 4c475c2..19eb89c 100644 --- a/octoprint_CalibrationTools/hooks.py +++ b/octoprint_CalibrationTools/hooks.py @@ -1,8 +1,18 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, division, print_function, unicode_literals +from ast import arg + import re +import threading +import traceback + class Hooks(): - ##~~ Softwareupdate hook - def calibrateGCodeReceived(self, comm, line, *args, **kwargs): - if not self.collectCommand: return line + trackTemp = True + events = [] + + def gCodeReceived(self, comm, line, *args, **kwargs): + if not self.collectCommand: + return line self._logger.debug("collectCommand is true, collecting info") reg = re.compile("echo:\s*(?P(?PM\d{1,3}) X(?P\d{1,3}.\d{1,3}) Y(?P\d{1,3}.\d{1,3}) Z(?P\d{1,3}.\d{1,3}) E(?P\d{1,3}.\d{1,3}))") @@ -30,7 +40,46 @@ class Hooks(): self.collectCommand = False return line - def calibrateGCodeSending(self, comm, phase, cmd, cmd_type, gcode, subcode=None, tags=None, *args, **kwargs): + def gCodeSending(self, comm, phase, cmd, cmd_type, gcode, subcode=None, tags=None, *args, **kwargs): self._logger.debug("Sending GCODE [%s]", gcode) if cmd == "M92": - self.collectCommand = True \ No newline at end of file + self.collectCommand = True + + def firmwareInfo(self, comm_instance, firmware_name, firmware_data, *args, **kwargs): + self.data["info"] = { + "firmware": firmware_data + } + + ## Hook for temperature messages + ## This is active only when there are events registered to temperature changes + def processTemp(self, comm_instance, parsed_temperatures, *args, **kwargs): + if len(self.events) <= 0: return parsed_temperatures + try: + self.checkAndTriggerEvent(parsed_temperatures.copy()) + except Exception as e: + self._logger.error(traceback.format_exc()) + return parsed_temperatures + + ## Check if the current message contains changes concerning registered tool + ## if the criteria is meat then the execution function is called + def checkAndTriggerEvent(self, temps): + for tool, values in temps.items(): + (curTemp, trgTemp) = values + for event in self.events: + if event["tool"] == tool and curTemp >= event["targetTemp"]: + threading.Thread(target=event["func"], args=(self, temps, *event["args"])).start() + self.events.remove(event) + + def registerEventTemp(self, tool, targetTemp, func, *arguments): + if func is None: + self._logger.warn("registerEventTemp: Attempt to register event without a function") + return + + event = { + "tool": tool, + "targetTemp": targetTemp, + "func": func, + "args": arguments + } + self._logger.debug("Registering event [%s]", event) + self.events.append(event) diff --git a/octoprint_CalibrationTools/models.py b/octoprint_CalibrationTools/models.py index c8d2dc8..1fb590e 100644 --- a/octoprint_CalibrationTools/models.py +++ b/octoprint_CalibrationTools/models.py @@ -1,9 +1,14 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, division, print_function, unicode_literals + class CalibrationModel(): def getModel(self): self._logger.debug("getModel") steps = self.getSteps() + temps = self.getTemps() return { - "steps": steps + "steps": steps, + "temps": temps } def getSteps(self): @@ -14,3 +19,7 @@ class CalibrationModel(): "Z": 0, "E": 0 } + + def getTemps(self): + return {'B': (), 'T0': ()} + diff --git a/octoprint_CalibrationTools/static/js/CalibrationTools.js b/octoprint_CalibrationTools/static/js/CalibrationTools.js index 478448b..e33f148 100644 --- a/octoprint_CalibrationTools/static/js/CalibrationTools.js +++ b/octoprint_CalibrationTools/static/js/CalibrationTools.js @@ -66,6 +66,13 @@ $(function () { self.from_json(response); }); } + + self.test = function () { + OctoPrint.simpleApiCommand("CalibrationTools","TEST").done(function (response) { + console.log(response) + }) + } + } // This is how our plugin registers itself with the application, by adding some configuration diff --git a/octoprint_CalibrationTools/templates/CalibrationTools_tab.jinja2 b/octoprint_CalibrationTools/templates/CalibrationTools_tab.jinja2 index d9dd52f..5f060c5 100644 --- a/octoprint_CalibrationTools/templates/CalibrationTools_tab.jinja2 +++ b/octoprint_CalibrationTools/templates/CalibrationTools_tab.jinja2 @@ -7,6 +7,16 @@ +
+
+
+ +
+