Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
    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
Пример #7
0
 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
Пример #8
0
    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)
Пример #10
0
	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)
Пример #11
0
   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)