Print job status reporting
This commit is contained in:
@@ -8,7 +8,7 @@ This is a Docker-based MQTT client that listens for print requests, generates ve
|
|||||||
- `MQTT_HOST`: MQTT broker hostname
|
- `MQTT_HOST`: MQTT broker hostname
|
||||||
- `MQTT_PORT`: MQTT broker port
|
- `MQTT_PORT`: MQTT broker port
|
||||||
- `MQTT_TOPIC_SUB`: Topic to subscribe for print requests
|
- `MQTT_TOPIC_SUB`: Topic to subscribe for print requests
|
||||||
- `MQTT_TOPIC_PUB_ERRORS`: Topic to publish errors
|
- `MQTT_TOPIC_PUB_STATUS`: Topic to publish status messages (success and errors)
|
||||||
- `PRINTER_DEVICE`: Printer device path (e.g., /dev/usb/lp0)
|
- `PRINTER_DEVICE`: Printer device path (e.g., /dev/usb/lp0)
|
||||||
- `PRINTER_MODEL`: Printer model (e.g., QL-800)
|
- `PRINTER_MODEL`: Printer model (e.g., QL-800)
|
||||||
- `LABEL_SIZE_DEFAULT`: Default label size (e.g., 29x90)
|
- `LABEL_SIZE_DEFAULT`: Default label size (e.g., 29x90)
|
||||||
|
|||||||
34
client.py
34
client.py
@@ -14,7 +14,7 @@ from templates import TEMPLATES
|
|||||||
MQTT_HOST = os.getenv('MQTT_HOST', 'localhost')
|
MQTT_HOST = os.getenv('MQTT_HOST', 'localhost')
|
||||||
MQTT_PORT = int(os.getenv('MQTT_PORT', 1883))
|
MQTT_PORT = int(os.getenv('MQTT_PORT', 1883))
|
||||||
MQTT_TOPIC_SUB = os.getenv('MQTT_TOPIC_SUB', 'vet/labels/print')
|
MQTT_TOPIC_SUB = os.getenv('MQTT_TOPIC_SUB', 'vet/labels/print')
|
||||||
MQTT_TOPIC_PUB_ERRORS = os.getenv('MQTT_TOPIC_PUB_ERRORS', 'vet/labels/errors')
|
MQTT_TOPIC_PUB_STATUS = os.getenv('MQTT_TOPIC_PUB_STATUS', 'vet/labels/status')
|
||||||
MQTT_TOPIC_HEARTBEAT = os.getenv('MQTT_TOPIC_HEARTBEAT', 'vet/labels/heartbeat')
|
MQTT_TOPIC_HEARTBEAT = os.getenv('MQTT_TOPIC_HEARTBEAT', 'vet/labels/heartbeat')
|
||||||
PRINTER_DEVICE = os.getenv('PRINTER_DEVICE', '/dev/usb/lp0')
|
PRINTER_DEVICE = os.getenv('PRINTER_DEVICE', '/dev/usb/lp0')
|
||||||
PRINTER_MODEL = os.getenv('PRINTER_MODEL', 'QL-800')
|
PRINTER_MODEL = os.getenv('PRINTER_MODEL', 'QL-800')
|
||||||
@@ -60,10 +60,12 @@ def on_message(client, userdata, msg):
|
|||||||
return
|
return
|
||||||
|
|
||||||
print(f"Raw message received on topic '{msg.topic}': {raw_payload}")
|
print(f"Raw message received on topic '{msg.topic}': {raw_payload}")
|
||||||
|
job_id = None
|
||||||
try:
|
try:
|
||||||
payload = json.loads(raw_payload)
|
payload = json.loads(raw_payload)
|
||||||
print(f"Parsed payload: {payload}")
|
print(f"Parsed payload: {payload}")
|
||||||
|
|
||||||
|
job_id = payload.get('job_id')
|
||||||
template_id = payload.get('template_id', 'vet_label')
|
template_id = payload.get('template_id', 'vet_label')
|
||||||
label_size = payload.get('label_size', LABEL_SIZE_DEFAULT)
|
label_size = payload.get('label_size', LABEL_SIZE_DEFAULT)
|
||||||
variables = payload.get('variables', {})
|
variables = payload.get('variables', {})
|
||||||
@@ -85,6 +87,17 @@ def on_message(client, userdata, msg):
|
|||||||
|
|
||||||
if test:
|
if test:
|
||||||
print(f"Test mode: PNG saved as {filename}")
|
print(f"Test mode: PNG saved as {filename}")
|
||||||
|
# Publish success status for test mode
|
||||||
|
success_details = {
|
||||||
|
"status": "success",
|
||||||
|
"job_id": job_id,
|
||||||
|
"template_id": template_id,
|
||||||
|
"label_size": label_size,
|
||||||
|
"test_mode": True,
|
||||||
|
"filename": filename,
|
||||||
|
"timestamp": time.time()
|
||||||
|
}
|
||||||
|
client.publish(MQTT_TOPIC_PUB_STATUS, json.dumps(success_details))
|
||||||
else:
|
else:
|
||||||
print("Printing label...")
|
print("Printing label...")
|
||||||
status = print_label(image, label=label_size)
|
status = print_label(image, label=label_size)
|
||||||
@@ -99,6 +112,8 @@ def on_message(client, userdata, msg):
|
|||||||
errors = printer_state.get('errors', [])
|
errors = printer_state.get('errors', [])
|
||||||
|
|
||||||
error_details = {
|
error_details = {
|
||||||
|
"status": "error",
|
||||||
|
"job_id": job_id,
|
||||||
"error": f"Print failed: {status_type}",
|
"error": f"Print failed: {status_type}",
|
||||||
"status_type": status_type,
|
"status_type": status_type,
|
||||||
"media_type": media_type,
|
"media_type": media_type,
|
||||||
@@ -110,17 +125,28 @@ def on_message(client, userdata, msg):
|
|||||||
|
|
||||||
error_msg = f"Print failed: {status_type}. Media: {media_type} ({media_width}mm)"
|
error_msg = f"Print failed: {status_type}. Media: {media_type} ({media_width}mm)"
|
||||||
print(error_msg)
|
print(error_msg)
|
||||||
client.publish(MQTT_TOPIC_PUB_ERRORS, json.dumps(error_details))
|
client.publish(MQTT_TOPIC_PUB_STATUS, json.dumps(error_details))
|
||||||
raise Exception(error_msg)
|
raise Exception(error_msg)
|
||||||
|
else:
|
||||||
|
# Print successful - publish success status
|
||||||
|
success_details = {
|
||||||
|
"status": "success",
|
||||||
|
"job_id": job_id,
|
||||||
|
"template_id": template_id,
|
||||||
|
"label_size": label_size,
|
||||||
|
"timestamp": time.time()
|
||||||
|
}
|
||||||
|
print(f"Print successful: {template_id}")
|
||||||
|
client.publish(MQTT_TOPIC_PUB_STATUS, json.dumps(success_details))
|
||||||
|
|
||||||
except json.JSONDecodeError as e:
|
except json.JSONDecodeError as e:
|
||||||
error_msg = f"Invalid JSON in message: {e}. Raw payload: {raw_payload}"
|
error_msg = f"Invalid JSON in message: {e}. Raw payload: {raw_payload}"
|
||||||
print(error_msg)
|
print(error_msg)
|
||||||
client.publish(MQTT_TOPIC_PUB_ERRORS, json.dumps({"error": error_msg, "topic": msg.topic}))
|
client.publish(MQTT_TOPIC_PUB_STATUS, json.dumps({"status": "error", "job_id": job_id, "error": error_msg, "topic": msg.topic}))
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error_msg = f"Error processing message: {str(e)}"
|
error_msg = f"Error processing message: {str(e)}"
|
||||||
print(error_msg)
|
print(error_msg)
|
||||||
client.publish(MQTT_TOPIC_PUB_ERRORS, json.dumps({"error": error_msg, "original_payload": raw_payload}))
|
client.publish(MQTT_TOPIC_PUB_STATUS, json.dumps({"status": "error", "job_id": job_id, "error": error_msg, "original_payload": raw_payload}))
|
||||||
|
|
||||||
def heartbeat(client):
|
def heartbeat(client):
|
||||||
while True:
|
while True:
|
||||||
|
|||||||
Reference in New Issue
Block a user