def on_parse_gcode(self, comm, line, *args, **kwargs): if "FIRMWARE_VERSION" in line: printerInfo = parse_firmware_line(line) if "FIRMWARE_VERSION" in printerInfo: self.logInfo("Firmware version: {}".format( printerInfo["FIRMWARE_VERSION"])) elif "//" in line: self._message = self._message + line.strip('/') if not self._parsing_response: self.updateStatus("info", self._message) self._parsing_response = True else: if self._parsing_response: self._parsing_response = False self.logInfo(self._message) self._message = "" if "!!" in line: self._wait_save_config = False msg = line.strip('!') self.updateStatus("error", msg) self.logError(msg) elif "ok" in line: if self._wait_save_config: self._wait_save_config = False self._logger.debug( "Got SAVE_CONFIG response. Reload Klipper config.") config = self.load_klipper_config() if config: self._settings.set(["config"], config) return line
def on_parse_gcode(self, comm, line, *args, **kwargs): if "FIRMWARE_VERSION" in line: printerInfo = parse_firmware_line(line) if "FIRMWARE_VERSION" in printerInfo: self.log_info("Firmware version: {}".format( printerInfo["FIRMWARE_VERSION"])) elif "// probe" in line or "// Failed to verify BLTouch" in line: msg = line.strip('/') self.log_info(msg) self.write_parsing_response_buffer() elif "//" in line: # add lines with // to a buffer self._message = self._message + line.strip('/') if not self._parsing_response: self.update_status("info", self._message) self._parsing_response = True elif "!!" in line: msg = line.strip('!') self.update_status("error", msg) self.log_error(msg) self.write_parsing_response_buffer() else: self.write_parsing_response_buffer() return line
def _parse_firmware_info(self, printer_message): from octoprint.util.comm import parse_firmware_line # Create a dict with all the keys/values returned by the M115 request data = parse_firmware_line(printer_message) # self._update_check_inv(data['FIRMWARE_NAME']) port = self._get_hardware_port() if port is None: return False self._logger.info("Port: " + port) machine_info = common.version_match_julia18( data['FIRMWARE_NAME']) # from firmware if machine_info is None: machine_info = common.version_match_fallback( self._plugin_manager) # from UI plugin self._logger.info("Machine data\n" + str(machine_info)) if machine_info is None: self._settings.set(["board_shortcode"], None) self._settings.set(["version_board"], None) self._settings.save() return False self._settings.set(["board_shortcode"], machine_info['VARIANT']) self._settings.set(["version_board"], machine_info['VERSION']) self._settings.save() return True
def gcode_processor(comm, line, *args, **kwargs): if "MACHINE_TYPE" not in line: return line from octoprint.util.comm import parse_firmware_line # Create a dict with all the keys/values returned by the M115 request printer_data = parse_firmware_line(line) logging.getLogger("octoprint.plugin." + __name__).info( "Machine type detected: {machine}.".format(machine=printer_data["firmware_name"])) return line
def printer_message_received_hook(self, comm, line, *args, **kwargs): if "FIRMWARE_NAME" not in line: return line from octoprint.util.comm import parse_firmware_line # Create a dict with all the keys/values returned by the M115 request printer_data = parse_firmware_line(line) self._logger.info("Firmware Name detected: {machine}.".format( machine=printer_data["FIRMWARE_NAME"])) return line
def printer_message_received_hook(self, comm, line, *args, **kwargs): if "FIRMWARE_NAME" in line: self._logger.info("FIRMWARE_NAME line: {}".format(line)) from octoprint.util.comm import parse_firmware_line # Create a dict with all the keys/values returned by the M115 request data = parse_firmware_line(line) regex = r"Marlin J18([A-Z]{2})_([0-9]{6}_[0-9]{4})_HA" matches = re.search(regex, data['FIRMWARE_NAME']) enable_babystep = matches and len(matches.groups()) == 2 and matches.group(1) in ["PT", "PE"] if self._settings.get_boolean(["enableBabystep"]) != enable_babystep: self._settings.set_boolean(["enableBabystep"], enable_babystep) self._settings.save() return line
def on_parse_gcode(self, comm, line, *args, **kwargs): if "FIRMWARE_VERSION" in line: printerInfo = parse_firmware_line(line) if "FIRMWARE_VERSION" in printerInfo: self.logInfo("Firmware version: {}".format( printerInfo["FIRMWARE_VERSION"])) elif "//" in line: self._message = self._message + line.strip('/') if not self._parsing_response: self.updateStatus("info", self._message) self._parsing_response = True else: if self._parsing_response: self._parsing_response = False self.logInfo(self._message) self._message = "" if "!!" in line: msg = line.strip('!') self.updateStatus("error", msg) self.logError(msg) return line
def detect_babystep_support(self, line): """Check if firmware has support for babystep. Use to check if babystep needs to be saved. Args: line (str): The line received from the printer. Returns: str: Modified or untouched line """ if "FIRMWARE_NAME" in line: # self._logger.info("FIRMWARE_NAME line: {}".format(line)) # Create a dict with all the keys/values returned by the M115 request data = parse_firmware_line(line) regex = r"Marlin J18([A-Z]{2})_([0-9]{6}_[0-9]{4})_HA" matches = re.search(regex, data['FIRMWARE_NAME']) enable_babystep = matches and len( matches.groups()) == 2 and matches.group(1) in ["PT", "PE"] if self.enableBabystep != enable_babystep: self._settings.set_boolean(["enableBabystep"], enable_babystep) self._settings.save() return line
def test_parse_firmware_line(self, line, expected): from octoprint.util.comm import parse_firmware_line result = parse_firmware_line(line) self.assertDictEqual(expected, result)
def on_parse_gcode(self, comm, line, *args, **kwargs): if "FIRMWARE_VERSION" in line: printerInfo = parse_firmware_line(line) if "FIRMWARE_VERSION" in printerInfo: self.logInfo("Firmware version: {}".format(printerInfo["FIRMWARE_VERSION"])) elif "//" in line: self._message = self._message + line.strip('/') if not self._parsing_response: if "Klipper state" in self._message: self.updateStatus("info", self._message) self._parsing_response = True else: if self._parsing_response: self._parsing_response = False self.logInfo(self._message) self._message = "" if "!!" in line: msg = line.strip('!') self.updateStatus("error", msg) self.logError(msg) return line def get_api_commands(self): return dict( listLogFiles=[], getStats=["logFile"], loadConfig=["configFile"] ) def on_api_command(self, command, data): if command == "listLogFiles": files = [] for f in glob.glob("/tmp/*.log*"): filesize = os.path.getsize(f) files.append(dict( name=os.path.basename(f) + " ({:.1f} KB)".format(filesize / 1000.0), file=f, size=filesize )) return flask.jsonify(data=files) elif command == "getStats": if "logFile" in data: log_analyzer = KlipperLogAnalyzer.KlipperLogAnalyzer(data["logFile"]) return flask.jsonify(log_analyzer.analyze()) elif command == "loadConfig": kc = Parser() sections = kc.load(data["configFile"]) return flask.jsonify(sections) def get_update_information(self): return dict( klipper=dict( displayName=self._plugin_name, displayVersion=self._plugin_version, type="github_release", current=self._plugin_version, user="******", repo="OctoprintKlipperPlugin", pip="https://github.com/mmone/OctoPrintKlipper/archive/{target_version}.zip" ) ) #-- Helpers def sendMessage(self, type, subtype, payload): self._plugin_manager.send_plugin_message( self._identifier, dict( time=datetime.datetime.now().strftime("%H:%M:%S"), type=type, subtype=subtype, payload=payload ) ) def pollStatus(self): self._printer.commands("STATUS") def updateStatus(self, type, status): self.sendMessage("status", type, status) def logInfo(self, message): self.sendMessage("log", "info", message) def logError(self, error): self.sendMessage("log", "error", error)