# Changelog ## [0.9.18] – 2026-05-31 ### Neu - **🎉 Filament-Material und -Farbe pro AMS-Slot aus der Bridge an den Drucker senden:** Im Slot-Edit-Dialog gewählte Werte gehen jetzt tatsächlich an den Drucker und werden persistent übernommen — am Drucker-Display siehst du sofort dieselbe Belegung wie in der Bridge-UI. In 0.9.17 wurde der Befehl über das falsche MQTT-Topic (`slicer/printer/…`) gesendet, der Drucker hat ihn stillschweigend ignoriert. Jetzt geht er über `web/printer/…` wie der Anycubic Slicer Next es macht (verifiziert via Live-MQTT-Sniff + Workbench-Vue-Source). **Achtung:** der aktiv geladene Slot kann während des Drucks nicht umgeschrieben werden — vorher ausziehen. - **Mehrsprachiges UI – spanische Übersetzung von Muttersprachler überarbeitet (PR #40 von @pezfisk):** fehlende Akzente (impresión, cámara, después, animación, …), Begriffe vereinheitlicht (Pause → Pausa, Start → Iniciar, Layer → Capa). Plus neues `README.es.md` und Cross-Links in den drei READMEs. - **Z-Höhen-Anzeige in Obico** funktioniert jetzt. Der Drucker liefert keine echte Z-Position via MQTT (per Live-Sniff bestätigt), die Bridge schätzt sie aus `curr_layer × layer_height + first_layer_height`. Layer-Heights kommen aus dem GCode-Header beim Upload, persistiert im GCode-Store; Fallback aus dem OrcaSlicer-Default-Filename (`…_0.2_…gcode`). `/server/files/metadata` liefert zusätzlich `object_height` (Gesamt-Z), damit Obicos `mmProgress`-Widget `aktuelles Z / Gesamt-Z` anzeigt. - **Slot-Karte zeigt den OrcaSlicer-Profil-Vendor** unter dem Material (z.B. „PLA / Polymaker"), mit Profil-Namen + interner ID als Tooltip. So ist auf einen Blick erkennbar welcher Slot-Override aktiv ist. ### Fixes - **Slot-Profil-Auswahl im AMS-Dialog (Issue #39 von @harrygeier):** drei separate Bugs in 0.9.17 sorgten dafür dass die gewählte Marke nach dem Speichern verschwand und beim erneuten Öffnen ein falsches Material angezeigt wurde. - `multiColorBox/setInfo` über das falsche MQTT-Topic — siehe oben. - Speichern lief in zwei parallelen Requests (Profil-Override + Material/Farbe) → Race-Bedingung. Läuft jetzt sequenziell und reloaded den lokalen State bevor der Dialog geschlossen wird. - OrcaSlicer-Filament-IDs sind nicht eindeutig — `orca_filaments.json` hat 68 duplikate IDs, `OGFL99` allein ist 136 Vendor-Profilen zugeordnet (Erkenntnis von @gangoke). Der primäre Selector ist jetzt `(vendor, name)` — über alle 1002 Profile eindeutig. - **MQTT-Reconnect (Issue #33 von @icebear):** wurde der Drucker über Nacht ausgeschaltet, schlug die Bridge nach 5 Reconnect-Versuchen (~60 s gesamt) endgültig fehl — Filament-Sync ging morgens noch (weil das HTTP ist), aber Print-Start scheiterte mit „connection refused", User musste die Bridge selbst neu starten. Reader-Thread reconnectet jetzt **endlos** (Backoff cappt bei 60 s) bis der Drucker wieder antwortet, mit DEBUG-Logging nach den ersten 5 Versuchen damit das Log nicht über Nacht zugemüllt wird. - **„Unknown child pid"-Warnungen im Log:** beim Killen der Kamera- `ffmpeg`-Prozesse fehlte das `wait()` — Children blieben als Zombies und asyncio meldete sie alle ~20 s. Gefixt im CameraCache + `/api/camera/stream`. ### UI-Aufräumen - **Pause-Button als Toggle:** druckt der Drucker → `⏸ Pause`, ist pausiert → `▶ Weiter`. Der separate „Weiter"-Button entfällt. - **Pause + Stopp komplett ausgeblendet wenn Drucker idle** — bei Standby waren beide Buttons vorher dauerhaft sichtbar, was beim Idle-Drucker verwirrend wirkte. ### Build - **GCode-Store-Migration:** neue Spalten `layer_height` + `first_layer_height` in `gcode_files` (automatisch beim ersten Start von 0.9.18 angelegt). ## [0.9.17] – 2026-05-30 ### Neu - **🧪 Obico-Anbindung (experimentell):** Die Bridge spielt jetzt einen Moonraker, der vom [moonraker-obico](https://github.com/TheSpaghettiDetective/moonraker-obico) Plugin akzeptiert wird. Damit funktionieren Time-Lapse, Layer-aligned First-Layer-Scan und WebRTC-Live-Stream gegen einen (selbst gehosteten oder Cloud-) Obico-Server. **Hinweis:** Das KI-Modell zur Spaghetti-Erkennung ist auf seitliche Kamera-Winkel (Ender/Voron) trainiert — wie zuverlässig es beim Kobra X mit Top-Down-Kamera funktioniert, muss empirisch getestet werden (bei uns ging es schon ganz gut). Stream, Time-Lapse und Telemetrie laufen, die Failure-Erkennung ist deshalb noch als experimentell markiert. - **Mehrsprachiges UI (PR #37 von @gangoke):** Inline-Translations sind raus, stattdessen wechselbares Sprach-Dropdown mit Globe-Icon. Auto-Auswahl nach Browser-Locale, manuelle Wahl wird im LocalStorage gemerkt. Sprachen: 🇩🇪 🇬🇧 🇪🇸 🇨🇳 (ES + ZH-CN sind KI-übersetzt und noch nicht von Muttersprachlern geprüft). - **OrcaSlicer-Filament-Profil pro AMS-Slot:** Im Slot-Bearbeiten-Dialog kannst du jetzt ein konkretes OrcaSlicer-Profil (z.B. „PolyTerra PLA — Polymaker") pro Slot wählen — die Bridge sendet diese Information beim AMS-Sync mit, statt nur „Generic PLA". Die Profil-Liste wird aus dem OrcaSlicer-Source generiert (~1000 Profile, 43 Hersteller). Damit OrcaSlicer den Hint vollständig respektiert, wird ein passender Patch im OrcaSlicer-KX-Build folgen. - **H.264-Direkt-Stream:** Neuer Endpunkt `/api/camera/h264` liefert den Drucker-Kamera-Stream ohne Re-Encoding als MPEG-TS — Latenz drastisch reduziert, Bridge-CPU bei Obico-Stream von ~13 % auf ~3 %. ### Fixes - **Temperatur-Setzen über Bridge-UI / Obico löste Drucker-Systemfehler aus:** Per Live-MQTT-Sniff vom Anycubic Slicer Next korrigiert — der Befehl `tempature/set` braucht ein `type`-Feld (0=Nozzle, 1=Bett, 2=beide) und muss über das `web/printer/…`-Topic, nicht `slicer/printer/…`. Nozzle/Bett über die Bridge heizen jetzt sauber. - **Große GCode-Uploads (>50 MB) brachen mit Timeout ab:** Der Connect-Timeout vom Socket lief auch während des `sendall()` — bei ~200 MB über LAN brauchte das Schieben mehr als die 30 s und wurde fälschlich als Connect-Timeout abgebrochen. Jetzt sind Connect-, Send- und Read-Phase separat getimeoutet. - **Kamera-Snapshot war langsam und konnte sich mit dem Live-Stream blockieren:** Die Bridge hält nun einen zentralen Kamera-Cache (ein einziger ffmpeg-Prozess zieht vom Drucker, alle Konsumenten teilen sich den Stream). Snapshots kommen in ~1.3 ms aus dem RAM statt nach 1-2 s per neuer ffmpeg-Instanz. Behebt außerdem das Single-Client-Limit am Drucker (HTTP 429 bei parallelen Zugriffen). - **Sprachwechsel aktualisierte den GCode-Browser nicht:** Die in die File-Karten eingebackenen Texte („Drucken", „Schätzung", „Download") blieben in der alten Sprache. Beim Sprachwechsel werden die Karten jetzt neu gerendert. - **GCode Web-Upload + Download + Verify-Dialog (PR #32 von @gangoke):** Dateien können direkt im Browser hoch/runtergeladen werden, mit Warn-Dialog wenn ein nicht durch OrcaSlicer hochgeladener GCode gestartet wird. ### CI/Build - Multi-Arch Docker-Image (amd64 + arm64) per Gitea-Actions automatisiert. - Release-Build über lokalen CodeBuilder für alle drei Targets (linux-amd64, linux-arm64, windows.exe). ## [0.9.16] – 2026-05-22 ### Neu - **Kamera bei Druckstart automatisch einschalten:** neue Einstellung „Kamera bei Druckstart einschalten" — die Bridge startet den Kamera-Stream automatisch, wenn ein Druck beginnt (für OrcaSlicer und die Bridge-UI). ### Fixes - **Einfarbiger Druck durch leeren AMS-Slot blockiert:** OrcaSlicer schreibt alle konfigurierten Filamente in den GCode-Header, auch wenn das Modell nur eines nutzt — die Bridge meldete dem Drucker dadurch alle Farben als nötig, und ein leerer ungenutzter Slot brach den Druck ab. Die Bridge mappt jetzt nur die im GCode tatsächlich genutzten Filamente. - **Filament-Sync jetzt positionstreu:** Bei einem leeren Slot in der Mitte (z.B. Slot 1 gelb, 2 leer, 3 rot, 4 weiß) zeigte OrcaSlicer die Farben auf den falschen Slots. Behoben — leere Slots behalten ihre Position, und das Sync-Farbformat folgt der Happy-Hare-Konvention (RRGGBB ohne `#`). - **Slicer-Zeit + Thumbnail fehlten nach Browser-Reload** (oder bei Druckstart direkt aus OrcaSlicer): beide werden jetzt aus dem GCode-Store anhand des Dateinamens wiederhergestellt statt aus flüchtigem State. - **Deutsche Übersetzungslücken** im ACE-Trockner-Dialog behoben. ### Logging - Wiederholte Log-Zeilen werden als Zähler („×N") zusammengefasst statt zu spammen; Status-Poll-Verkehr wird nicht mehr auf INFO geloggt. - Neuer Level-Filter (Alle / Fehler / Warnungen), Toast bei neuen Fehlern, volle Tracebacks im Browser-Log und ein Download-Dateiname mit Zeitstempel. ## [0.9.15] – 2026-05-21 ### Fixes (Issue #29) - **UI im OrcaSlicer-Device-Tab kaputt:** OrcaSlicers eingebetteter Webview lädt nur das nackte HTML und ignoriert externe `