def _createPrinterList(self):
     printer = PrinterOutputModel(
         output_controller=self._output_controller,
         number_of_extruders=self._number_of_extruders)
     printer.updateName(self.name)
     self._printers = [printer]
     self.printersChanged.emit()
    def connect(self):
        self._firmware_name = None  # after each connection ensure that the firmware name is removed

        if self._baud_rate is None:
            if self._use_auto_detect:
                auto_detect_job = AutoDetectBaudJob(self._serial_port)
                auto_detect_job.start()
                auto_detect_job.finished.connect(self._autoDetectFinished)
            return
        if self._serial is None:
            try:
                self._serial = Serial(str(self._serial_port),
                                      self._baud_rate,
                                      timeout=self._timeout,
                                      writeTimeout=self._timeout)
            except SerialException:
                Logger.log(
                    "w",
                    "An exception occured while trying to create serial connection"
                )
                return
        container_stack = CuraApplication.getInstance(
        ).getGlobalContainerStack()
        num_extruders = container_stack.getProperty("machine_extruder_count",
                                                    "value")
        # Ensure that a printer is created.
        self._printers = [
            PrinterOutputModel(output_controller=GenericOutputController(self),
                               number_of_extruders=num_extruders)
        ]
        self._printers[0].updateName(container_stack.getName())
        self.setConnectionState(ConnectionState.connected)
        self._update_thread.start()
 def createOutputModel(
         self, controller: PrinterOutputController) -> PrinterOutputModel:
     model = PrinterOutputModel(controller,
                                len(self.configuration),
                                firmware_version=self.firmware_version)
     self.updateOutputModel(model)
     return model
Beispiel #4
0
def test_getAndUpdate(data):
    model = PrinterOutputModel(MagicMock())

    # Convert the first letter into a capital
    attribute = list(data["attribute"])
    attribute[0] = attribute[0].capitalize()
    attribute = "".join(attribute)

    # mock the correct emit
    setattr(model, data["attribute"] + "Changed", MagicMock())

    # Attempt to set the value
    getattr(model, "update" + attribute)(data["value"])

    # Check if signal fired.
    signal = getattr(model, data["attribute"] + "Changed")
    assert signal.emit.call_count == 1

    # Ensure that the value got set
    assert getattr(model, data["attribute"]) == data["value"]

    # Attempt to set the value again
    getattr(model, "update" + attribute)(data["value"])
    # The signal should not fire again
    assert signal.emit.call_count == 1
Beispiel #5
0
 def _createPrinterModel(self, data: Dict[str, Any]) -> PrinterOutputModel:
     printer = PrinterOutputModel(
         output_controller=ClusterUM3PrinterOutputController(self),
         number_of_extruders=self._number_of_extruders)
     printer.setCameraUrl(
         QUrl("http://" + data["ip_address"] + ":8080/?action=stream"))
     self._printers.append(printer)
     return printer
 def _onGlobalContainerStackChanged(self):
     container_stack = CuraApplication.getInstance().getGlobalContainerStack()
     num_extruders = container_stack.getProperty("machine_extruder_count", "value")
     # Ensure that a printer is created.
     controller = GenericOutputController(self)
     controller.setCanUpdateFirmware(True)
     self._printers = [PrinterOutputModel(output_controller = controller, number_of_extruders = num_extruders)]
     self._printers[0].updateName(container_stack.getName())
Beispiel #7
0
 def _createPrinterList(self):
     printer = PrinterOutputModel(
         output_controller=self._output_controller,
         number_of_extruders=self._number_of_extruders)
     if self._camera_url != "":
         printer.setCamera(NetworkCamera(self._camera_url))
     printer.updateName(self.name)
     self._printers = [printer]
     self.printersChanged.emit()
Beispiel #8
0
    def _onGetPrinterDataFinished(self, reply):
        status_code = reply.attribute(QNetworkRequest.HttpStatusCodeAttribute)
        if status_code == 200:
            try:
                result = json.loads(bytes(reply.readAll()).decode("utf-8"))
            except json.decoder.JSONDecodeError:
                Logger.log("w", "Received an invalid printer state message: Not valid JSON.")
                return

            if not self._printers:
                # Quickest way to get the firmware version is to grab it from the zeroconf.
                firmware_version = self._properties.get(b"firmware_version", b"").decode("utf-8")
                self._printers = [PrinterOutputModel(output_controller=self._output_controller, number_of_extruders=self._number_of_extruders, firmware_version=firmware_version)]
                self._printers[0].setCamera(NetworkCamera("http://" + self._address + ":8080/?action=stream"))
                for extruder in self._printers[0].extruders:
                    extruder.activeMaterialChanged.connect(self.materialIdChanged)
                    extruder.hotendIDChanged.connect(self.hotendIdChanged)
                self.printersChanged.emit()

            # LegacyUM3 always has a single printer.
            printer = self._printers[0]
            printer.updateBedTemperature(result["bed"]["temperature"]["current"])
            printer.updateTargetBedTemperature(result["bed"]["temperature"]["target"])
            printer.updateState(result["status"])

            try:
                # If we're still handling the request, we should ignore remote for a bit.
                if not printer.getController().isPreheatRequestInProgress():
                    printer.updateIsPreheating(result["bed"]["pre_heat"]["active"])
            except KeyError:
                # Older firmwares don't support preheating, so we need to fake it.
                pass

            head_position = result["heads"][0]["position"]
            printer.updateHeadPosition(head_position["x"], head_position["y"], head_position["z"])

            for index in range(0, self._number_of_extruders):
                temperatures = result["heads"][0]["extruders"][index]["hotend"]["temperature"]
                extruder = printer.extruders[index]
                extruder.updateTargetHotendTemperature(temperatures["target"])
                extruder.updateHotendTemperature(temperatures["current"])

                material_guid = result["heads"][0]["extruders"][index]["active_material"]["guid"]

                if extruder.activeMaterial is None or extruder.activeMaterial.guid != material_guid:
                    # Find matching material (as we need to set brand, type & color)
                    containers = ContainerRegistry.getInstance().findInstanceContainers(type="material",
                                                                                        GUID=material_guid)
                    if containers:
                        color = containers[0].getMetaDataEntry("color_code")
                        brand = containers[0].getMetaDataEntry("brand")
                        material_type = containers[0].getMetaDataEntry("material")
                        name = containers[0].getName()
                    else:
                        # Unknown material.
                        color = "#00000000"
                        brand = "Unknown"
                        material_type = "Unknown"
                        name = "Unknown"
                    material = MaterialOutputModel(guid=material_guid, type=material_type,
                                                   brand=brand, color=color, name = name)
                    extruder.updateActiveMaterial(material)

                try:
                    hotend_id = result["heads"][0]["extruders"][index]["hotend"]["id"]
                except KeyError:
                    hotend_id = ""
                printer.extruders[index].updateHotendID(hotend_id)

        else:
            Logger.log("w",
                       "Got status code {status_code} while trying to get printer data".format(status_code = status_code))
        "value": ["yay"]
    },
]

test_validate_data_get_update = [
    {
        "attribute": "configuration",
        "value": ConfigurationModel()
    },
    {
        "attribute": "owner",
        "value": "WHOO"
    },
    {
        "attribute": "assignedPrinter",
        "value": PrinterOutputModel(MagicMock())
    },
    {
        "attribute": "key",
        "value": "YAY"
    },
    {
        "attribute": "name",
        "value": "Turtles"
    },
    {
        "attribute": "timeTotal",
        "value": 10
    },
    {
        "attribute": "timeElapsed",