Files
grotti/docs/internal/ACE-Live.md
T

4.3 KiB
Raw Permalink Blame History

ACE-Farben in Grotti (Moonraker)

Stand 12.10.2026: An Kobra 3 da26 (10.10.1.60) liefert Moonraker die ACE-Spulenfarben unter mmu, nicht unter filament_hub (steht oft nicht in objects/list).

  • Relevante Felder: gate_color (Hex AARRGGBB oder RRGGBB), gate_material, optional gate_status bzw. Listen pro Platz.
  • Grotti liest das in grotti/moonraker.py (extract_slots) und zeigt die Farben als Swatches auf der Druckerwand.
  • Fallback: filament_hub / filament_hubs[].slots mit color und type, falls vorhanden.

Senden: welches Material welcher Slot

12.10.2026: In Dateien bei Druckern mit Slots die Slice-Farbe (paint_index) einem ACE-Platz (ams_index, 0-basiert) zuordnen. Grotti schreibt Dateiname.gcode.acm und lädt sie vor print/start hoch. Ohne Sidecar: auf da26 oft HTTP 400 „cannot parse the file“. Siehe Grotti-Senden-Queue.

Beobachtung: Material ging initial zum Extruder, ACE-Slot blinkte nicht, kein Nachschub vom ACE. Andere Kobra 3 (92ee/6e41) drucken dieselbe Datei von der externen Spule weiter; nicht angefasst.

Ursache (Moonraker-Log da26, lesend):

  • Job 000009 (tot-printing, 0 mm Filament) und 00000A (~695 s Druck, ~658 mm) beide cancelled auf 10.10.1.60.
  • Bei jedem MQTT-Start: mmu_ace.patch_print_data → detected_tools unknown … skipping auto-feed (no trailer found). Ohne Trailer/Tools kein Auto-Feed → kein Slot-Blinken, kein ACE-Nachschub.
  • Metadaten-Extrakt für die Datei scheitert (Unable to extract metadata / mmu_ace_metadata abgebrochen).
  • Grotti-Sidecar tulip pla.gcode.acm: paint_index 0 → ams_index 1 (Farbe Datei #000000, Slot-Farbe 002B49). Parallel liegt tulip pla.acm mit Identity-Map T0–T3 → Plätze 0–3. MQTT-Payload nutzte die 4er-Map, nicht Grotti-1er-Map.
  • Start ohne bed_leveling: Grotti übergibt ams_settings nur als .acm; Moonraker baut die MQTT-ams_settings selbst. auto_leveling: 0.
  • Initialer Extruder-Feed ohne Blink: Restfilament im Pfad / Extrusion aus dem Schlauch, nicht ACE-Auswahl. Nach Abbruch: mmu.gate/tool = −1, active_filament leer; vier Plätze weiter belegt.

Grotti-DB sends: da26 zweimal tulip pla.gcode (ohne persistiertes ace_map; Mapping nur in der Queue im Speicher und in der .acm auf dem Drucker). Queue-API leer nach Abschluss.

Nächster Start auf da26: gewünschten ACE-Platz in Grotti setzen (bei schwarzer Slice-Farbe zuletzt Platz 1 = dunkelblau). Alte tulip pla.acm nicht mit Grotti-.gcode.acm vermischen. Ohne erfolgreichen Trailer/Metadaten bleibt Auto-Feed aus — dann blinkt der ACE weiterhin nicht.

Fix Grotti (12.10.2026, nach Diagnose)

Anycubic erwartet die Sidecar als gleichen Basename + .acm: Start tulip pla.gcode → tulip pla.gcode.acm. Grotti lädt Grotti-Map zusätzlich nach tulip pla.acm hoch (Überschreiben), damit eine alte Identity-Map nicht gewinnt.

Mit gesetzter ACE-Zuordnung startet Grotti den Druck per MQTT und setzt ams_box_mapping aus Grotti-Map — nicht mehr nur über Moonraker-print/start (dort Identity-Fallback / falsche .acm). Bettnetz-Checkbox steuert weiter nur auto_leveling.

13.10.2026: Fehlt ; referenced_tools beim Senden mit ACE-Zuordnung, hängt Grotti ihn an — aus T-Befehlen, sonst aus paint_info / der gewählten paint_index-Map (Einzelfarbe oft 0). Zusätzlich die Rinkhals-Kopfzeile ; processed by MmuAcePatcher. Warnung nur noch, wenn danach immer noch kein Trailer da ist.

13.10.2026 — MQTT 10101 trotz Moonraker cancelled (da26 / Gridfinity)

Nach Grotti-Send Gridfinity_bin_1x1x6u_PLA_0.2_49m32s.gcode an da26 (10.10.1.60): Moonraker print_stats.state = cancelled, Anycubic-MQTT-Task blieb aktiv → nachfolgender Start mit code 10101 („已存在打印任务“ / Print task already exists). Grotti abbrechen traf nur Moonraker /printer/print/cancel, nicht den Anycubic-Task.

Klärung: MQTT action: stop, taskid: "-1" auf Topic …/slicer/printer/{modelId}/{deviceId}/print (Rinkhals-Docs). Report state: stopping, code 200; danach MQTT-Info data.state: free. Grotti abbrechen macht seither Moonraker-cancel und best-effort MQTT-stop (anycubic_lan.cancel_print). Wenn MQTT-stop nicht greift: Display abbrechen oder Reboot als letzte Option.