Imprimante : bandeau erreur tous écrans + reset USB + statut détaillé

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-04 21:17:27 +02:00
parent 2b204ddb5e
commit 843762b6d7
5 changed files with 103 additions and 2 deletions

View File

@@ -566,6 +566,38 @@ async def api_evacuer_bourrage():
return {"succes": True, "message": msg}
@app.post("/api/imprimante/reset-usb")
async def api_reset_usb():
"""Réinitialise la connexion USB de l'imprimante (unbind/rebind driver)."""
import subprocess, glob
try:
# Trouver le device USB Mitsubishi K60 (VID 06d3)
devs = glob.glob("/sys/bus/usb/devices/*/idVendor")
path = None
for f in devs:
if open(f).read().strip() == "06d3":
path = f.replace("/idVendor", "")
break
if not path:
return {"succes": False, "message": "Imprimante USB non trouvée — vérifiez la connexion"}
dev_id = path.split("/")[-1]
# Annuler les jobs d'abord
nom = charger_config().get("impression", {}).get("imprimante", "Mitsubishi")
subprocess.run(["sudo", "cancel", "-a", nom], capture_output=True)
# Unbind/rebind USB
subprocess.run(["sudo", "sh", "-c", f"echo '{dev_id}' > /sys/bus/usb/drivers/usb/unbind"],
capture_output=True)
await asyncio.sleep(1)
subprocess.run(["sudo", "sh", "-c", f"echo '{dev_id}' > /sys/bus/usb/drivers/usb/bind"],
capture_output=True)
await asyncio.sleep(2)
subprocess.run(["sudo", "cupsenable", nom], capture_output=True)
return {"succes": True, "message": "Imprimante réinitialisée — prête dans quelques secondes"}
except Exception as e:
return {"succes": False, "message": str(e)}
@app.post("/api/imprimer")
async def api_imprimer(donnees: dict):
nom = donnees.get("photo", "")