Merge pull request #5 from rorosentrater/enums

Enums and status() print formatting
This commit is contained in:
Vladimir Vukicevic
2023-12-07 10:39:34 -07:00
committed by GitHub
2 changed files with 40 additions and 37 deletions

View File

@@ -14,7 +14,7 @@ import logging
import argparse import argparse
from simple_mqtt_server import SimpleMQTTServer from simple_mqtt_server import SimpleMQTTServer
from simple_http_server import SimpleHTTPServer from simple_http_server import SimpleHTTPServer
from saturn_printer import SaturnPrinter from saturn_printer import SaturnPrinter, PrintInfoStatus, CurrentStatus, FileStatus
logging.basicConfig( logging.basicConfig(
level=logging.INFO, level=logging.INFO,
@@ -55,9 +55,13 @@ def do_status(printers):
status = p.desc['Data']['Status'] status = p.desc['Data']['Status']
print_info = status['PrintInfo'] print_info = status['PrintInfo']
file_info = status['FileTransferInfo'] file_info = status['FileTransferInfo']
print(f"{p.addr[0]}: {attrs['Name']} ({attrs['MachineName']}) Status: {status['CurrentStatus']}") print(f"{p.addr[0]}:")
print(f" Print Status: {print_info['Status']} Layers: {print_info['CurrentLayer']}/{print_info['TotalLayer']} File: {print_info['Filename']}") print(f" {attrs['Name']} ({attrs['MachineName']})")
print(f" File Transfer Status: {file_info['Status']}") 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): def do_watch(printer, interval=5, broadcast=None):
status = printer.status() status = printer.status()

View File

@@ -13,38 +13,37 @@ import json
import asyncio import asyncio
import logging import logging
import random import random
from enum import Enum
SATURN_UDP_PORT = 3000 SATURN_UDP_PORT = 3000
# CurrentStatus field inside Status # CurrentStatus field inside Status
SATURN_STATUS_READY = 0 class CurrentStatus(Enum):
SATURN_STATUS_BUSY = 1 # Printer might be sitting at the "Completed" screen READY = 0
SATURN_STATUS_BUSY_2 = 1 # post-HEAD call on file transfer, along with SATURN_FILE_STATUS = 3 on error, and 2 on completion 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 # Status field inside PrintInfo
SATURN_PRINT_STATUS_EXPOSURE = 2 # TODO: double check tese class PrintInfoStatus(Enum):
SATURN_PRINT_STATUS_RETRACTING = 3 # TODO: double check these
SATURN_PRINT_STATUS_LOWERING = 4 EXPOSURE = 2
SATURN_PRINT_STATUS_COMPLETE = 16 # pretty sure this is correct RETRACTING = 3
LOWERING = 4
COMPLETE = 16 # pretty sure this is correct
# Status field inside FileTransferInfo # Status field inside FileTransferInfo
SATURN_FILE_STATUS_NONE = 0 class FileStatus(Enum):
SATURN_FILE_STATUS_DONE = 2 NONE = 0
SATURN_FILE_STATUS_ERROR = 3 DONE = 2
ERROR = 3
SATURN_PRINT_STATUS_NAMES = { class Command(Enum):
SATURN_PRINT_STATUS_EXPOSURE: "Exposure", CMD_0 = 0 # null data
SATURN_PRINT_STATUS_RETRACTING: "Retracting", CMD_1 = 1 # null data
SATURN_PRINT_STATUS_LOWERING: "Lowering", DISCONNECT = 64 # Maybe disconnect?
SATURN_PRINT_STATUS_COMPLETE: "Complete" 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
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
def random_hexstr(): def random_hexstr():
return '%032x' % random.getrandbits(128) return '%032x' % random.getrandbits(128)
@@ -135,14 +134,14 @@ class SaturnPrinter:
topic = await asyncio.wait_for(self.mqtt.client_subscribed, timeout=self.timeout) topic = await asyncio.wait_for(self.mqtt.client_subscribed, timeout=self.timeout)
logging.debug(f"Client subscribed to {topic}") logging.debug(f"Client subscribed to {topic}")
await self.send_command_and_wait(SATURN_CMD_0) await self.send_command_and_wait(Command.CMD_0)
await self.send_command_and_wait(SATURN_CMD_1) await self.send_command_and_wait(Command.CMD_1)
await self.send_command_and_wait(SATURN_CMD_SET_MYSTERY_TIME_PERIOD, { 'TimePeriod': 5000 }) await self.send_command_and_wait(Command.SET_MYSTERY_TIME_PERIOD, { 'TimePeriod': 5000 })
return True return True
async def disconnect(self): 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): async def upload_file(self, filename, start_printing=False):
try: try:
@@ -175,7 +174,7 @@ class SaturnPrinter:
"URL": f"http://${{ipaddr}}:{self.http.port}/{httpname}" "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 # now process status updates from the printer
while True: while True:
@@ -194,10 +193,10 @@ class SaturnPrinter:
# We assume that the printer immediately goes into BUSY status after it processes # We assume that the printer immediately goes into BUSY status after it processes
# the upload command # the upload command
if status['CurrentStatus'] == SATURN_STATUS_READY: if status['CurrentStatus'] == CurrentStatus.READY:
if file_info['Status'] == SATURN_FILE_STATUS_DONE: if file_info['Status'] == FileStatus.DONE:
self.file_transfer_future.set_result((total_size, total_size, file_name)) 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!") logging.error("Transfer error!")
self.file_transfer_future.set_result((-1, total_size, file_name)) self.file_transfer_future.set_result((-1, total_size, file_name))
else: else:
@@ -244,7 +243,7 @@ class SaturnPrinter:
"StartLayer": 0 "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 # process status updates from the printer, enough to know whether printing
# started or failed to start # started or failed to start
@@ -264,7 +263,7 @@ class SaturnPrinter:
current_status = status['CurrentStatus'] current_status = status['CurrentStatus']
print_status = print_info['Status'] 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 return True
logging.debug(status) logging.debug(status)