Added data handling for Connect devices

CL-541
This commit is contained in:
Jaime van Kessel 2017-11-20 17:00:02 +01:00
parent 1167fa0a89
commit a9f52c2ad6
4 changed files with 79 additions and 3 deletions

View file

@ -12,6 +12,7 @@ class PrintJobOutputModel(QObject):
timeTotalChanged = pyqtSignal() timeTotalChanged = pyqtSignal()
timeElapsedChanged = pyqtSignal() timeElapsedChanged = pyqtSignal()
nameChanged = pyqtSignal() nameChanged = pyqtSignal()
keyChanged = pyqtSignal()
def __init__(self, output_controller: "PrinterOutputController", parent=None): def __init__(self, output_controller: "PrinterOutputController", parent=None):
super().__init__(parent) super().__init__(parent)
@ -19,7 +20,17 @@ class PrintJobOutputModel(QObject):
self._state = "" self._state = ""
self._time_total = 0 self._time_total = 0
self._time_elapsed = 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) @pyqtProperty(str, notify = nameChanged)
def name(self): def name(self):

View file

@ -20,12 +20,14 @@ class PrinterOutputModel(QObject):
activePrintJobChanged = pyqtSignal() activePrintJobChanged = pyqtSignal()
nameChanged = pyqtSignal() nameChanged = pyqtSignal()
headPositionChanged = pyqtSignal() headPositionChanged = pyqtSignal()
keyChanged = pyqtSignal()
def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None): def __init__(self, output_controller: "PrinterOutputController", number_of_extruders: int = 1, parent=None):
super().__init__(parent) super().__init__(parent)
self._bed_temperature = 0 self._bed_temperature = 0
self._target_bed_temperature = 0 self._target_bed_temperature = 0
self._name = "" self._name = ""
self._key = "" # Unique identifier
self._controller = output_controller self._controller = output_controller
self._extruders = [ExtruderOutputModel(printer=self)] * number_of_extruders self._extruders = [ExtruderOutputModel(printer=self)] * number_of_extruders
@ -40,6 +42,15 @@ class PrinterOutputModel(QObject):
self._can_pre_heat_bed = True self._can_pre_heat_bed = True
self._can_control_manually = 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() @pyqtSlot()
def homeHead(self): def homeHead(self):
self._controller.homeHead(self) self._controller.homeHead(self)

View file

@ -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): class ClusterUM3OutputDevice(NetworkedPrinterOutputDevice):
def __init__(self, device_id, address, properties, parent = None): def __init__(self, device_id, address, properties, parent = None):
super().__init__(device_id = device_id, address = address, properties=properties, parent = parent) 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): def _update(self):
super()._update() 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))

View file

@ -6,7 +6,6 @@ from UM.Logger import Logger
from PyQt5.QtNetwork import QNetworkRequest from PyQt5.QtNetwork import QNetworkRequest
import json import json