mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 06:57:28 -06:00
Added data handling for Connect devices
CL-541
This commit is contained in:
parent
1167fa0a89
commit
a9f52c2ad6
4 changed files with 79 additions and 3 deletions
|
@ -12,6 +12,7 @@ class PrintJobOutputModel(QObject):
|
|||
timeTotalChanged = pyqtSignal()
|
||||
timeElapsedChanged = pyqtSignal()
|
||||
nameChanged = pyqtSignal()
|
||||
keyChanged = pyqtSignal()
|
||||
|
||||
def __init__(self, output_controller: "PrinterOutputController", parent=None):
|
||||
super().__init__(parent)
|
||||
|
@ -19,7 +20,17 @@ class PrintJobOutputModel(QObject):
|
|||
self._state = ""
|
||||
self._time_total = 0
|
||||
self._time_elapsed = 0
|
||||
self._name = ""
|
||||
self._name = "" # Human readable name
|
||||
self._key = "" # Unique identifier
|
||||
|
||||
@pyqtProperty(str, notify=keyChanged)
|
||||
def key(self):
|
||||
return self._key
|
||||
|
||||
def updateKey(self, key: str):
|
||||
if self._key != key:
|
||||
self._key = key
|
||||
self.keyChanged.emit()
|
||||
|
||||
@pyqtProperty(str, notify = nameChanged)
|
||||
def name(self):
|
||||
|
|
|
@ -20,12 +20,14 @@ class PrinterOutputModel(QObject):
|
|||
activePrintJobChanged = pyqtSignal()
|
||||
nameChanged = pyqtSignal()
|
||||
headPositionChanged = pyqtSignal()
|
||||
keyChanged = pyqtSignal()
|
||||
|
||||
def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None):
|
||||
super().__init__(parent)
|
||||
self._bed_temperature = 0
|
||||
self._target_bed_temperature = 0
|
||||
self._name = ""
|
||||
self._key = "" # Unique identifier
|
||||
self._controller = output_controller
|
||||
self._extruders = [ExtruderOutputModel(printer=self)] * number_of_extruders
|
||||
|
||||
|
@ -40,6 +42,15 @@ class PrinterOutputModel(QObject):
|
|||
self._can_pre_heat_bed = True
|
||||
self._can_control_manually = True
|
||||
|
||||
@pyqtProperty(str, notify=keyChanged)
|
||||
def key(self):
|
||||
return self._key
|
||||
|
||||
def updateKey(self, key: str):
|
||||
if self._key != key:
|
||||
self._key = key
|
||||
self.keyChanged.emit()
|
||||
|
||||
@pyqtSlot()
|
||||
def homeHead(self):
|
||||
self._controller.homeHead(self)
|
||||
|
|
|
@ -1,9 +1,64 @@
|
|||
from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice
|
||||
from UM.Logger import Logger
|
||||
|
||||
from cura.PrinterOutput.NetworkedPrinterOutputDevice import NetworkedPrinterOutputDevice
|
||||
from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel
|
||||
from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel
|
||||
from cura.PrinterOutput.MaterialOutputModel import MaterialOutputModel
|
||||
|
||||
import json
|
||||
|
||||
from PyQt5.QtNetwork import QNetworkRequest
|
||||
|
||||
class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
|
||||
def __init__(self, device_id, address, properties, parent = None):
|
||||
super().__init__(device_id = device_id, address = address, properties=properties, parent = parent)
|
||||
self._api_prefix = "/cluster-api/v1/"
|
||||
|
||||
self._number_of_extruders = 2
|
||||
|
||||
def _update(self):
|
||||
super()._update()
|
||||
self._get("printers/", onFinished=self._onGetPrintersDataFinished)
|
||||
|
||||
def _onGetPrintersDataFinished(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
|
||||
|
||||
for printer_data in result:
|
||||
uuid = printer_data["uuid"]
|
||||
|
||||
printer = None
|
||||
for device in self._printers:
|
||||
if device.key == uuid:
|
||||
printer = device
|
||||
break
|
||||
|
||||
if printer is None:
|
||||
printer = PrinterOutputModel(output_controller=None, number_of_extruders=self._number_of_extruders)
|
||||
self._printers.append(printer)
|
||||
|
||||
printer.updateName(printer_data["friendly_name"])
|
||||
printer.updateKey(uuid)
|
||||
|
||||
for index in range(0, self._number_of_extruders):
|
||||
extruder = printer.extruders[index]
|
||||
extruder_data = printer_data["configuration"][index]
|
||||
try:
|
||||
hotend_id = extruder_data["print_core_id"]
|
||||
except KeyError:
|
||||
hotend_id = ""
|
||||
extruder.updateHotendID(hotend_id)
|
||||
|
||||
material_data = extruder_data["material"]
|
||||
if extruder.activeMaterial is None or extruder.activeMaterial.guid != material_data["guid"]:
|
||||
material = MaterialOutputModel(guid = material_data["guid"], type = material_data["material"], brand=material_data["brand"], color=material_data["color"])
|
||||
extruder.updateActiveMaterial(material)
|
||||
|
||||
else:
|
||||
Logger.log("w",
|
||||
"Got status code {status_code} while trying to get printer data".format(status_code=status_code))
|
|
@ -6,7 +6,6 @@ from UM.Logger import Logger
|
|||
|
||||
from PyQt5.QtNetwork import QNetworkRequest
|
||||
|
||||
|
||||
import json
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue