From deede91fe356cdb76536bc00860f0d955d5c7863 Mon Sep 17 00:00:00 2001 From: rorosentrater Date: Thu, 7 Dec 2023 01:08:43 -0500 Subject: [PATCH 1/2] Turned vars into proper enums. Using enums in status prints. Added more newlines to status prints --- cassini.py | 13 +++++++--- saturn_printer.py | 65 +++++++++++++++++++++++------------------------ 2 files changed, 41 insertions(+), 37 deletions(-) diff --git a/cassini.py b/cassini.py index 2e7d61b..70f5698 100755 --- a/cassini.py +++ b/cassini.py @@ -14,7 +14,7 @@ import logging import argparse from simple_mqtt_server import SimpleMQTTServer from simple_http_server import SimpleHTTPServer -from saturn_printer import SaturnPrinter +from saturn_printer import SaturnPrinter, PrintInfoStatus, CurrentStatus, FileStatus logging.basicConfig( level=logging.INFO, @@ -55,9 +55,14 @@ def do_status(printers): status = p.desc['Data']['Status'] print_info = status['PrintInfo'] file_info = status['FileTransferInfo'] - print(f"{p.addr[0]}: {attrs['Name']} ({attrs['MachineName']}) Status: {status['CurrentStatus']}") - print(f" Print Status: {print_info['Status']} Layers: {print_info['CurrentLayer']}/{print_info['TotalLayer']} File: {print_info['Filename']}") - print(f" File Transfer Status: {file_info['Status']}") + print(f"{p.addr[0]}:") + print(f" {attrs['Name']} ({attrs['MachineName']})") + # print(f" Status: {status['CurrentStatus']}") + print(f" Machine Status: {CurrentStatus(status['CurrentStatus']).name}") + print(f" Print Status: {PrintInfoStatus(print_info['Status']).name}") + print(f" Layers: {print_info['CurrentLayer']}/{print_info['TotalLayer']}") + print(f" File: {print_info['Filename']}") + print(f" File Transfer Status: {FileStatus(file_info['Status']).name}") def do_watch(printer, interval=5, broadcast=None): status = printer.status() diff --git a/saturn_printer.py b/saturn_printer.py index 6b2df7d..ac1bb49 100644 --- a/saturn_printer.py +++ b/saturn_printer.py @@ -13,38 +13,37 @@ import json import asyncio import logging import random +from enum import Enum SATURN_UDP_PORT = 3000 # CurrentStatus field inside Status -SATURN_STATUS_READY = 0 -SATURN_STATUS_BUSY = 1 # Printer might be sitting at the "Completed" screen -SATURN_STATUS_BUSY_2 = 1 # post-HEAD call on file transfer, along with SATURN_FILE_STATUS = 3 on error, and 2 on completion +class CurrentStatus(Enum): + READY = 0 + BUSY = 1 # Printer might be sitting at the "Completed" screen + # SATURN_STATUS_BUSY_2 = 1 # post-HEAD call on file transfer, along with SATURN_FILE_STATUS = 3 on error, and 2 on completion # Status field inside PrintInfo -SATURN_PRINT_STATUS_EXPOSURE = 2 # TODO: double check tese -SATURN_PRINT_STATUS_RETRACTING = 3 -SATURN_PRINT_STATUS_LOWERING = 4 -SATURN_PRINT_STATUS_COMPLETE = 16 # pretty sure this is correct +class PrintInfoStatus(Enum): + # TODO: double check these + EXPOSURE = 2 + RETRACTING = 3 + LOWERING = 4 + COMPLETE = 16 # pretty sure this is correct # Status field inside FileTransferInfo -SATURN_FILE_STATUS_NONE = 0 -SATURN_FILE_STATUS_DONE = 2 -SATURN_FILE_STATUS_ERROR = 3 +class FileStatus(Enum): + NONE = 0 + DONE = 2 + ERROR = 3 -SATURN_PRINT_STATUS_NAMES = { - SATURN_PRINT_STATUS_EXPOSURE: "Exposure", - SATURN_PRINT_STATUS_RETRACTING: "Retracting", - SATURN_PRINT_STATUS_LOWERING: "Lowering", - SATURN_PRINT_STATUS_COMPLETE: "Complete" -} - -SATURN_CMD_0 = 0 # null data -SATURN_CMD_1 = 1 # null data -SATURN_CMD_DISCONNECT = 64 # Maybe disconnect? -SATURN_CMD_START_PRINTING = 128 # "Filename": "X", "StartLayer": 0 -SATURN_CMD_UPLOAD_FILE = 256 # "Check": 0, "CleanCache": 1, "Compress": 0, "FileSize": 3541068, "Filename": "_ResinXP2-ValidationMatrix_v2.goo", "MD5": "205abc8fab0762ad2b0ee1f6b63b1750", "URL": "http://${ipaddr}:58883/f60c0718c8144b0db48b7149d4d85390.goo" }, -SATURN_CMD_SET_MYSTERY_TIME_PERIOD = 512 # "TimePeriod": 5000 +class Command(Enum): + CMD_0 = 0 # null data + CMD_1 = 1 # null data + DISCONNECT = 64 # Maybe disconnect? + START_PRINTING = 128 # "Filename": "X", "StartLayer": 0 + UPLOAD_FILE = 256 # "Check": 0, "CleanCache": 1, "Compress": 0, "FileSize": 3541068, "Filename": "_ResinXP2-ValidationMatrix_v2.goo", "MD5": "205abc8fab0762ad2b0ee1f6b63b1750", "URL": "http://${ipaddr}:58883/f60c0718c8144b0db48b7149d4d85390.goo" }, + SET_MYSTERY_TIME_PERIOD = 512 # "TimePeriod": 5000 def random_hexstr(): return '%032x' % random.getrandbits(128) @@ -135,14 +134,14 @@ class SaturnPrinter: topic = await asyncio.wait_for(self.mqtt.client_subscribed, timeout=self.timeout) logging.debug(f"Client subscribed to {topic}") - await self.send_command_and_wait(SATURN_CMD_0) - await self.send_command_and_wait(SATURN_CMD_1) - await self.send_command_and_wait(SATURN_CMD_SET_MYSTERY_TIME_PERIOD, { 'TimePeriod': 5000 }) + await self.send_command_and_wait(Command.CMD_0) + await self.send_command_and_wait(Command.CMD_1) + await self.send_command_and_wait(Command.SET_MYSTERY_TIME_PERIOD, { 'TimePeriod': 5000 }) return True async def disconnect(self): - await self.send_command_and_wait(SATURN_CMD_DISCONNECT) + await self.send_command_and_wait(Command.DISCONNECT) async def upload_file(self, filename, start_printing=False): try: @@ -175,7 +174,7 @@ class SaturnPrinter: "URL": f"http://${{ipaddr}}:{self.http.port}/{httpname}" } - await self.send_command_and_wait(SATURN_CMD_UPLOAD_FILE, cmd_data) + await self.send_command_and_wait(Command.UPLOAD_FILE, cmd_data) # now process status updates from the printer while True: @@ -194,10 +193,10 @@ class SaturnPrinter: # We assume that the printer immediately goes into BUSY status after it processes # the upload command - if status['CurrentStatus'] == SATURN_STATUS_READY: - if file_info['Status'] == SATURN_FILE_STATUS_DONE: + if status['CurrentStatus'] == CurrentStatus.READY: + if file_info['Status'] == FileStatus.DONE: self.file_transfer_future.set_result((total_size, total_size, file_name)) - elif file_info['Status'] == SATURN_FILE_STATUS_ERROR: + elif file_info['Status'] == FileStatus.ERROR: logging.error("Transfer error!") self.file_transfer_future.set_result((-1, total_size, file_name)) else: @@ -244,7 +243,7 @@ class SaturnPrinter: "StartLayer": 0 } - await self.send_command_and_wait(SATURN_CMD_START_PRINTING, cmd_data) + await self.send_command_and_wait(Command.START_PRINTING, cmd_data) # process status updates from the printer, enough to know whether printing # started or failed to start @@ -264,7 +263,7 @@ class SaturnPrinter: current_status = status['CurrentStatus'] print_status = print_info['Status'] - if current_status == SATURN_STATUS_BUSY and print_status > 0: + if current_status == CurrentStatus.BUSY and print_status > 0: return True logging.debug(status) From d97239d019dedc6b3c7439df557ab0b4083f4c87 Mon Sep 17 00:00:00 2001 From: rorosentrater Date: Thu, 7 Dec 2023 01:14:19 -0500 Subject: [PATCH 2/2] Remove comment --- cassini.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cassini.py b/cassini.py index 70f5698..5794e1a 100755 --- a/cassini.py +++ b/cassini.py @@ -57,7 +57,6 @@ def do_status(printers): file_info = status['FileTransferInfo'] print(f"{p.addr[0]}:") print(f" {attrs['Name']} ({attrs['MachineName']})") - # print(f" Status: {status['CurrentStatus']}") print(f" Machine Status: {CurrentStatus(status['CurrentStatus']).name}") print(f" Print Status: {PrintInfoStatus(print_info['Status']).name}") print(f" Layers: {print_info['CurrentLayer']}/{print_info['TotalLayer']}")