diff --git a/app.py b/app.py index ed760f1c..1275f366 100644 --- a/app.py +++ b/app.py @@ -7,7 +7,15 @@ from flask import Flask, request, render_template, redirect, url_for -from config import BASE_URL, AUTO_SPEND, SPOOLMAN_BASE_URL, EXTERNAL_SPOOL_AMS_ID, EXTERNAL_SPOOL_ID, PRINTER_NAME +from config import ( + BASE_URL, + AUTO_SPEND, + SPOOLMAN_BASE_URL, + EXTERNAL_SPOOL_AMS_ID, + EXTERNAL_SPOOL_ID, + PRINTER_NAME, + CLEAR_ASSIGNMENT_WHEN_EMPTY, +) from filament import generate_filament_brand_code, generate_filament_temperatures from frontend_utils import color_is_dark from messages import AMS_FILAMENT_SETTING @@ -84,6 +92,14 @@ def _augment_tray(spool_list, tray_data, ams_id, tray_id): if tray_data.get("unmapped_bambu_tag"): spoolman_service.clear_active_spool_for_tray(ams_id, tray_id) augmentTrayDataWithSpoolMan(spool_list, tray_data, ams_id, tray_id) + empty_condition = ( + CLEAR_ASSIGNMENT_WHEN_EMPTY + and not tray_data.get("spool_material") + and not tray_data.get("unmapped_bambu_tag") + ) + if empty_condition: + spoolman_service.clear_active_spool_for_tray(ams_id, tray_id) + mqtt_bambulab.clear_ams_tray_assignment(ams_id, tray_id) @app.route("/issue") def issue(): diff --git a/mqtt_bambulab.py b/mqtt_bambulab.py index 673a12af..9be0f59d 100644 --- a/mqtt_bambulab.py +++ b/mqtt_bambulab.py @@ -8,17 +8,17 @@ import paho.mqtt.client as mqtt -from config import ( - PRINTER_ID, - PRINTER_CODE, - PRINTER_IP, - AUTO_SPEND, - EXTERNAL_SPOOL_ID, - TRACK_LAYER_USAGE, - CLEAR_ASSIGNMENT_WHEN_EMPTY, -) -from messages import GET_VERSION, PUSH_ALL, AMS_FILAMENT_SETTING -from spoolman_service import spendFilaments, setActiveTray, fetchSpools, clear_active_spool_for_tray +from config import ( + PRINTER_ID, + PRINTER_CODE, + PRINTER_IP, + AUTO_SPEND, + EXTERNAL_SPOOL_ID, + TRACK_LAYER_USAGE, + CLEAR_ASSIGNMENT_WHEN_EMPTY, +) +from messages import GET_VERSION, PUSH_ALL, AMS_FILAMENT_SETTING +from spoolman_service import spendFilaments, setActiveTray, fetchSpools, clear_active_spool_for_tray from tools_3mf import getMetaDataFrom3mf import time import copy @@ -368,32 +368,32 @@ def processMessage(data): PRINTER_STATE_LAST = copy.deepcopy(PRINTER_STATE) -def publish(client, msg): - result = client.publish(f"device/{PRINTER_ID}/request", json.dumps(msg)) - status = result[0] - if status == 0: - print(f"Sent {msg} to topic device/{PRINTER_ID}/request") - return True - - print(f"Failed to send message to topic device/{PRINTER_ID}/request") - return False - - -def clear_ams_tray_assignment(ams_id, tray_id): - if not MQTT_CLIENT: - return - - ams_message = copy.deepcopy(AMS_FILAMENT_SETTING) - ams_message["print"]["ams_id"] = int(ams_id) - ams_message["print"]["tray_id"] = int(tray_id) - ams_message["print"]["tray_color"] = "" - ams_message["print"]["nozzle_temp_min"] = None - ams_message["print"]["nozzle_temp_max"] = None - ams_message["print"]["tray_type"] = "" - ams_message["print"]["setting_id"] = "" - ams_message["print"]["tray_info_idx"] = "" - - publish(MQTT_CLIENT, ams_message) +def publish(client, msg): + result = client.publish(f"device/{PRINTER_ID}/request", json.dumps(msg)) + status = result[0] + if status == 0: + print(f"Sent {msg} to topic device/{PRINTER_ID}/request") + return True + + print(f"Failed to send message to topic device/{PRINTER_ID}/request") + return False + + +def clear_ams_tray_assignment(ams_id, tray_id): + if not MQTT_CLIENT: + return + + ams_message = copy.deepcopy(AMS_FILAMENT_SETTING) + ams_message["print"]["ams_id"] = int(ams_id) + ams_message["print"]["tray_id"] = int(tray_id) + ams_message["print"]["tray_color"] = "" + ams_message["print"]["nozzle_temp_min"] = None + ams_message["print"]["nozzle_temp_max"] = None + ams_message["print"]["tray_type"] = "" + ams_message["print"]["setting_id"] = "" + ams_message["print"]["tray_info_idx"] = "" + + publish(MQTT_CLIENT, ams_message) # Inspired by https://github.com/Donkie/Spoolman/issues/217#issuecomment-2303022970 def on_message(client, userdata, msg): @@ -459,17 +459,18 @@ def on_message(client, userdata, msg): # "remaining_weight": tray["remain"] / 100 * tray["tray_weight"] # }) - if not found and tray_uuid == "00000000000000000000000000000000": - print(" - No Spool or non Bambulab Spool!") - if CLEAR_ASSIGNMENT_WHEN_EMPTY: - clear_active_spool_for_tray(ams['id'], tray['id']) - clear_ams_tray_assignment(ams['id'], tray['id']) - elif not found: - print(" - Not found. Update spool tag!") - tray["unmapped_bambu_tag"] = tray_uuid - tray["issue"] = True - clear_active_spool_for_tray(ams['id'], tray['id']) - clear_ams_tray_assignment(ams['id'], tray['id']) + if not found and tray_uuid == "00000000000000000000000000000000": + print(" - non Bambulab Spool!") + elif not found: + print(" - Not found. Update spool tag!") + tray["unmapped_bambu_tag"] = tray_uuid + tray["issue"] = True + clear_active_spool_for_tray(ams['id'], tray['id']) + clear_ams_tray_assignment(ams['id'], tray['id']) + else: + print( + f" - [{num2letter(ams['id'])}{tray['id']}]") + print(" - No Spool!") except Exception: traceback.print_exc() diff --git a/templates/fragments/tray.html b/templates/fragments/tray.html index fd25e264..0f9c0e7c 100644 --- a/templates/fragments/tray.html +++ b/templates/fragments/tray.html @@ -96,7 +96,7 @@ - #{{ tray_data.tray_color | upper }} + #{{ tray_data.spool_color | upper }} {% endif %}