63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
|
from config import PRINTER_ID
|
||
|
import json
|
||
|
|
||
|
from spoolman_client import consumeSpool, patchExtraTags, fetchSpoolList
|
||
|
|
||
|
def trayUid(ams_id, tray_id):
|
||
|
return f"{PRINTER_ID}_{ams_id}_{tray_id}"
|
||
|
|
||
|
def augmentTrayDataWithSpoolMan(spool_list, tray_data, tray_id):
|
||
|
tray_data["matched"] = False
|
||
|
for spool in spool_list:
|
||
|
if spool.get("extra") and spool["extra"].get("active_tray") and spool["extra"]["active_tray"] == json.dumps(tray_id):
|
||
|
#TODO: check for mismatch
|
||
|
tray_data["remaining_weight"] = spool["remaining_weight"]
|
||
|
tray_data["matched"] = True
|
||
|
break
|
||
|
|
||
|
if tray_data.get("tray_type") and tray_data["tray_type"] != "" and tray_data["matched"] == False:
|
||
|
tray_data["issue"] = True
|
||
|
else:
|
||
|
tray_data["issue"] = False
|
||
|
|
||
|
def spendFilaments(filaments_usage):
|
||
|
print(filaments_usage)
|
||
|
ams_usage = {}
|
||
|
for tray_id, usage in filaments_usage:
|
||
|
if tray_id != -1:
|
||
|
#TODO: hardcoded ams_id
|
||
|
if ams_usage.get(trayUid(0, tray_id)):
|
||
|
ams_usage[trayUid(0, tray_id)] += float(usage)
|
||
|
else:
|
||
|
ams_usage[trayUid(0, tray_id)] = float(usage)
|
||
|
|
||
|
for spool in fetchSpools():
|
||
|
#TODO: What if there is a mismatch between AMS and SpoolMan?
|
||
|
if spool.get("extra") and spool.get("extra").get("active_tray") and ams_usage.get(json.loads(spool.get("extra").get("active_tray"))):
|
||
|
consumeSpool(spool["id"], ams_usage.get(json.loads(spool.get("extra").get("active_tray"))))
|
||
|
|
||
|
def setActiveTray(spool_id, spool_extra, ams_id, tray_id):
|
||
|
if spool_extra == None:
|
||
|
spool_extra = {}
|
||
|
|
||
|
if not spool_extra.get("active_tray") or json.loads(spool_extra.get("active_tray")) != trayUid(ams_id, tray_id):
|
||
|
patchExtraTags(spool_id, spool_extra, {
|
||
|
"active_tray": json.dumps(trayUid(ams_id, tray_id)),
|
||
|
})
|
||
|
|
||
|
# Remove active tray from inactive spools
|
||
|
for old_spool in fetchSpools(cached=True):
|
||
|
if spool_id != old_spool["id"] and old_spool.get("extra") and old_spool["extra"].get("active_tray") and json.loads(old_spool["extra"]["active_tray"]) == trayUid(ams_id, tray_id):
|
||
|
patchExtraTags(old_spool["id"], old_spool["extra"], {"active_tray": json.dumps("")})
|
||
|
else:
|
||
|
print("Skipping set active tray")
|
||
|
|
||
|
# Fetch spools from spoolman
|
||
|
def fetchSpools(cached=False):
|
||
|
global SPOOLS
|
||
|
if not cached:
|
||
|
SPOOLS = fetchSpoolList()
|
||
|
return SPOOLS
|
||
|
|
||
|
SPOOLS = fetchSpools() # Global variable storing latest spool from spoolman
|