704 lines
38 KiB
Markdown
704 lines
38 KiB
Markdown
# Changelog
|
||
|
||
## [0.9.20] – 2026-06-08
|
||
|
||
### Neu
|
||
- **Französische Sprachunterstützung (PR #45 von @Nathacks)**
|
||
- **Z-Höhe in der Print-UI (PR #49 von @Nathacks).** Zeigt die aktuelle
|
||
Z-Position in mm unterhalb des Layer-Zählers.
|
||
|
||
### Behoben
|
||
- **Kamera-Autostart ignorierte das "Kamera bei Druckstart einschalten"-
|
||
Setting nach einem Bridge-Restart (Issue #50).** Das Setting wurde in
|
||
der Prozessumgebung gecacht — nach dem Speichern in der UI überlebte
|
||
der alte Wert den Restart und der neue Wert aus `config.ini` wurde
|
||
nicht gelesen.
|
||
- **Kamera startete nach manuellem Stopp während eines Drucks automatisch
|
||
neu (Issue #50).** Ein neues `_camera_user_stopped`-Flag unterdrückt
|
||
den Autostart für die aktuelle Drucksitzung. Es wird beim Druckende
|
||
zurückgesetzt.
|
||
- **Falscher "Stream nicht verfügbar"-Fehler-Toast beim manuellen
|
||
Kamera-Stopp.** Der Bild-Fehler-Handler war noch registriert als
|
||
`img.src` geleert wurde.
|
||
- **JS-Fehler (`ReferenceError: br is not defined`) beim Licht-Toggle.**
|
||
Variable wurde aus dem falschen Scope referenziert.
|
||
- Webcam-URLs sind jetzt absolut, damit Mobileraker/Obico-Clients sie
|
||
erreichen können.
|
||
|
||
## [0.9.19.1] – 2026-06-04
|
||
|
||
### Behoben
|
||
- Standalone-Binaries (Linux/Windows) zeigten `vunknown` als Version.
|
||
Die `VERSION`-Datei ist jetzt ins PyInstaller-Onefile eingebettet.
|
||
- Bei fehlenden TLS-Zertifikaten (`anycubic_slicer.crt`/`.key`) gab
|
||
es nur den rohen Fehler `[Errno 2] No such file or directory`. Die
|
||
Bridge meldet jetzt klar, wo die Dateien hingelegt werden müssen
|
||
und dass `anycubic-certs.zip` aus dem Gitea-Release stammt.
|
||
|
||
### Geändert
|
||
- Filament-Profil-Liste neu kuratiert: 209 statt 399 Einträge.
|
||
Profile die nur für drucker-spezifische Vendor-Bundles existieren
|
||
(z.B. Eryone Thinker X400, Artillery M1 Pro, WonderMaker ZR,
|
||
Tiertime, Cubicon, CoLiDo, Afinia, Snapmaker) sind rausgeflogen
|
||
— OrcaSlicer hätte sie im Standard-Kobra-X-Setup beim Sync
|
||
ohnehin nicht gefunden, weil die jeweiligen Vendor-Bundles nur
|
||
bei aktivem Drucker-Vendor geladen werden. Für solche Filamente
|
||
bleibt der Custom-Profile-Import (Issue #41) der Weg.
|
||
|
||
## [0.9.19] – 2026-06-02
|
||
|
||
### Neu
|
||
- **🎯 Filament-Sync mit OrcaSlicer matched jetzt das richtige Preset**
|
||
statt immer auf „Generic PLA" zu landen. Voraussetzung: ein
|
||
OrcaSlicer-Build mit dem
|
||
[PR #13719](https://github.com/SoftFever/OrcaSlicer/pull/13719)
|
||
Empfangs-Patch (im OrcaSlicer-KX-Build dabei). Die Bridge sendet pro
|
||
AMS-Slot jetzt `name` + `vendor_name` im Lane-Pfad UND
|
||
`gate_filament_name` im Happy-Hare-MMU-Pfad (OrcaSlicer wechselt bei
|
||
AMS-Setups automatisch auf den HH-Pfad).
|
||
- **Eigene OrcaSlicer-Profile in die Bridge importieren (Issue #41).**
|
||
Settings-Tab → „OrcaSlicer-Profile" oder direkt im Slot-Edit-Dialog
|
||
(„★ Eigene Profile importieren…") lädst du deine `.json`-Files aus
|
||
`~/.config/OrcaSlicer/user/<id>/filament/` hoch — einzeln oder als
|
||
ZIP. Erscheint dann im Slot-Dropdown unter „★ Eigene Profile" und
|
||
wird beim Sync an Orca als User-Match weitergegeben. Funktioniert
|
||
über HTTP, also auch wenn die Bridge im Docker auf Raspi/NAS läuft
|
||
und OrcaSlicer auf dem Desktop. Auch reine Override-Profile mit nur
|
||
`inherits: "Generic PLA @System"` + ein paar Tweaks werden korrekt
|
||
erkannt — die Bridge resolved die vererbten Felder aus dem
|
||
System-Parent.
|
||
|
||
### Fixes
|
||
- **AMS-Sync landete hartnäckig auf „Generic PLA":** das Orca-
|
||
Datenmodell hat 68 duplikate `filament_id`-Werte (`OGFL99` allein
|
||
136 mal), und die Bridge wählte oft eine ID die für den Kobra X
|
||
nicht `is_compatible` war (z.B. `GFL92` aus dem Kobra-2-Profil →
|
||
Orca verwarf es). Generator priorisiert jetzt Kobra-X-Varianten und
|
||
filtert Phantom-Profile (Cross-Vendor-Overrides) raus —
|
||
`orca_filaments.json` von 1035 → 400 saubere Profile.
|
||
- **Slot ohne expliziten Override sendet jetzt `Generic <Typ>`** statt
|
||
einer impliziten Vendor-Annahme. Library-Generic-Profile haben
|
||
`compatible_printers: []` (= alle Drucker), sind also immer sichtbar
|
||
und matchen verlässlich.
|
||
- **Slot-Karte zeigt den Hersteller direkt nach dem Speichern** —
|
||
ohne Browser-Reload. `poll()` war async, das Re-Render kam erst
|
||
beim nächsten Tick.
|
||
- **ACE-Trockner-Toggle warf 502-Fehler obwohl der Trockner ein-/aus-
|
||
ging (PR #42 von @gangoke):** `setDry` jetzt fire-and-forget wie
|
||
`setAutoFeed`. Der Drucker antwortet auf diesem Push-Topic mit
|
||
`code: 0` statt `code: 200`, das hat die Bridge fälschlich als
|
||
Fehler interpretiert.
|
||
|
||
### Datenmodell / API
|
||
- `orca_filaments.json` regeneriert: nur echte Vendor-Profile und
|
||
OrcaFilamentLibrary-Profile bleiben drin. Bambu/Polymaker/SUNLU-
|
||
Library-Profile dabei, Qidi-Cross-Bundles raus.
|
||
- Neue Endpoints: `POST /kx/filament/profiles/user` (ZIP/JSON-Upload),
|
||
`GET /kx/filament/profiles/user` (Liste der User-Imports),
|
||
`DELETE /kx/filament/profiles/user[?vendor=…&name=…]`. Persistenz
|
||
in `<KX_DATA_DIR>/orca_filaments.user.json` (Volume — überlebt
|
||
Image-Updates).
|
||
|
||
### Build
|
||
- Neues Modul `bridge/orca_filaments.py` (gemeinsame Parser-Helfer
|
||
für Generator und Import-Endpoint).
|
||
- Dockerfile + release.sh um `orca_filaments.py` erweitert.
|
||
|
||
## [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 Drucker muss im Idle-Zustand
|
||
sein, und leere Slots lassen sich nicht beschriften.
|
||
- **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 `<script>`/`<link>`-Tags — nach der
|
||
v0.9.14-Theme-Auslagerung funktionierte dort kein Button mehr. Die Bridge
|
||
bettet CSS + JS jetzt inline in die Seite ein — funktioniert in Browser UND
|
||
OrcaSlicer-Webview.
|
||
- **Dropdowns unlesbar (weiß auf weiß) im OrcaSlicer-Webview:** `color-scheme` +
|
||
explizite `select`/`option`-Farben ergänzt, damit die nativen Dropdowns in
|
||
Hell- und Dunkel-Theme korrekt dargestellt werden.
|
||
- **„Select slots"-Button tat direkt nach Upload nichts:** eine fehlende
|
||
Variablen-Deklaration (`storeFiles`) warf einen `ReferenceError`, wenn vor dem
|
||
Laden des Browser-Tabs geklickt wurde. Behoben.
|
||
- **Upload-Banner kam nach abgeschlossenem Druck zurück:** der „file ready"-Status
|
||
wurde nur bei Stop/Abbruch geleert, nicht bei `finished`. Jetzt auch nach
|
||
erfolgreichem Druckende geleert.
|
||
|
||
## [0.9.14] – 2026-05-21
|
||
|
||
### Neu
|
||
- **Theme-System (Community-Beitrag von @hirnwunde, PR #27):** Die Web-UI liegt
|
||
jetzt in echten Dateien unter `web/themes/<name>/` (`index.html` + `style.css`
|
||
+ `app.js`) statt im Python-Quelltext eingebettet. Theme umschalten mit
|
||
`--ui-theme <name>`. Für Theme-Autoren gibt es eine dokumentierte Hook-Referenz
|
||
(`web/DOC/THEME-CSS-HOOKS.md`, `THEME-JS-ID-HOOKS.md`). Das Default-Theme
|
||
enthält die komplette aktuelle UI (ACE2, Objekte überspringen, Filament-Dialog).
|
||
Für Nutzer keine Änderung — Binaries/Docker-Image liefern das Theme eingebettet.
|
||
- **Neustart über API (Community-Beitrag von @gangoke, PR #28):** neuer Endpoint
|
||
`POST /api/restart`, um die Bridge per API neu zu starten — z. B. für einen
|
||
Neustart-Button in der Home-Assistant-Integration.
|
||
|
||
### Intern
|
||
- Vereinheitlichter PyInstaller-Build (`kx-bridge.spec`) für Linux, Windows und
|
||
Docker — bindet `web/` (Themes) ins Onefile-Binary ein, zur Laufzeit aus
|
||
`sys._MEIPASS` gelesen. Theme-Einbettung in Linux-Binary und Windows-EXE verifiziert.
|
||
- `data/` in `.gitignore` aufgenommen.
|
||
|
||
## [0.9.13] – 2026-05-20
|
||
|
||
============================================================
|
||
STOPP — VOR DEM DRÜCKEN VON "UPDATE" LESEN
|
||
============================================================
|
||
|
||
Der "Update"-Button ist in 0.9.11 und 0.9.12 KAPUTT.
|
||
NICHT benutzen. Stattdessen einmalig manuell updaten —
|
||
ab 0.9.13 funktioniert er wieder.
|
||
|
||
>> WINDOWS-.EXE / LINUX-BINARY-Nutzer — GEFAHR:
|
||
Update ÜBERSCHREIBT deine kx-bridge.exe / kx-bridge mit
|
||
einer Textdatei. Das Programm STARTET DANN NICHT MEHR
|
||
und kann sich nicht selbst reparieren.
|
||
--> Manuell updaten: die 0.9.13
|
||
kx-bridge-windows.zip / kx-bridge-linux.zip von der
|
||
Releases-Seite laden und die alte Datei ersetzen.
|
||
Deine config/- und data/-Ordner bleiben erhalten.
|
||
|
||
>> DOCKER-Nutzer:
|
||
Update führt zur Crash-Loop des Containers
|
||
(ModuleNotFoundError: No module named '_web_assets').
|
||
--> Manuell updaten:
|
||
docker compose pull (oder docker compose up -d --build)
|
||
config- + data-Volumes bleiben erhalten.
|
||
|
||
Ab 0.9.13 ist der In-App-Updater repariert und wieder sicher.
|
||
============================================================
|
||
|
||
### Fixes
|
||
- **Self-Update war in 0.9.11 und 0.9.12 kaputt (kritisch):** Der In-App-Updater
|
||
ersetzte nur `kobrax_moonraker_bridge.py`. Zwei Probleme:
|
||
- **Binary/EXE-Modus:** Er überschrieb die laufende Programmdatei
|
||
(`sys.executable`) mit einer Python-Textdatei — übrig blieb ein nicht mehr
|
||
startbares Programm, das sich nicht selbst reparieren kann (manueller
|
||
Re-Download nötig).
|
||
- **Python/Docker-Modus:** Seit 0.9.12 importiert die Hauptdatei das
|
||
ausgelagerte `_web_assets.py` (gebündeltes Frontend), das der Updater nicht
|
||
mitlud → `ModuleNotFoundError: No module named '_web_assets'` → Crash-Loop.
|
||
Der Updater lädt jetzt **alle** Bridge-Module (Hauptdatei + `_web_assets.py` +
|
||
Client + Loader) erst vollständig herunter, ersetzt sie dann atomar und
|
||
**verweigert das Self-Update im Binary-Modus** (mit Verweis auf den manuellen
|
||
Download).
|
||
|
||
## [0.9.12] – 2026-05-20
|
||
|
||
### Fixes
|
||
- **Pause-Status** wird jetzt korrekt erkannt: Die Bridge las den Geräte-State
|
||
statt des verschachtelten Druckauftrags-States, dadurch wurde ein pausierter
|
||
Druck teils noch als „druckend" angezeigt. Layer/Fortschritt/Restzeit kommen
|
||
jetzt ebenfalls aus dem Auftrags-Report.
|
||
|
||
### Intern
|
||
- Frontend (HTML/CSS/JS) aus der Python-Datei nach `web/index.html` ausgelagert,
|
||
zur Build-Zeit wieder eingebettet — besser wartbar, für Nutzer keine Änderung.
|
||
|
||
### Doku
|
||
- Community-**Home-Assistant-Integration** von @gangoke verlinkt.
|
||
|
||
## [0.9.11] – 2026-05-20
|
||
|
||
### Neu
|
||
- **ACE Pro 2 Support (experimentell, Community-Beitrag von @gangoke, PR #26):** Die Bridge erkennt jetzt die Filament-Hardware automatisch und passt sich an:
|
||
- **Modi:** `toolhead` (kein ACE, Standard-4-Slot-Box), `ace_direct` (ein ACE Pro 2 direkt am Toolhead), `ace_hub` (bis zu 4 ACE-Units am Slot-4-Hub) — insgesamt bis zu **19 Slots**.
|
||
- **AMS Auto-Refill** Umschalter.
|
||
- **Trockner:** Temperatur-/Luftfeuchte-Monitor, Start/Stop/Temp/Dauer-Steuerung, mit Material-Presets in einer neuen Config-Sektion `[ace_dry_presets]` (PLA, PLA+, PETG, TPU, ABS/ASA, PA/PC + 3 Custom).
|
||
- **UI:** Filament-Sektion skaliert auf 19 Slots, Modus-Label, geladener Slot grün umrandet mit Lade-/Entlade-Puls-Animation, Unload/Load direkt aus dem Slot-Edit-Dialog.
|
||
- **GCode-Farb-Mapping:** ACE2-fähig, Farbe-aus-GCode-Fix, Hinweis bei Inkonsistenz zwischen Mapping und Objekten, besseres Default-Mapping.
|
||
|
||
> **⚠️ Experimentell:** Die ACE-Pro-2-Hardware-Pfade wurden vom Contributor mit einer einzelnen ACE2-Unit entwickelt und getestet; die 2–4-Unit-Hub-Konfigurationen sind theoretisch und auf echter Hardware ungetestet. Wir haben hier ebenfalls keine ACE2-Hardware zur Verifikation. Der Standard-`toolhead`-Pfad (ohne ACE) wurde live gegen einen echten Kobra X getestet. Wer ein Multi-ACE-Setup betreibt: bitte per Issue Rückmeldung geben.
|
||
|
||
### Fixes
|
||
- **Happy-Hare-MMU-Emulation:** Es werden nur belegte Slots gesynct — kein Placeholder für leere Slots (kompatibel mit OrcaSlicer PR #13372).
|
||
- **GCode-Farb-Dialog** zeigt nach einem neuen Upload nicht mehr die Daten der vorherigen Datei.
|
||
|
||
---
|
||
|
||
## [0.9.10] – 2026-05-17
|
||
|
||
> **Hinweis:** Mit diesem Release wird der Fokus von neuen Features auf
|
||
> **Stabilisierung und Bugfixing** verlagert. Die Kern-Workflows
|
||
> (Multi-Printer, Drucker hinzufügen/entfernen, Filament-Dialog,
|
||
> Skip-Objekte, Standalone-Binaries) sind funktional ausreichend — ab jetzt
|
||
> steht Robustheit vor neuen Features. Größere Feature-Wünsche (ACE Pro 2,
|
||
> Home-Assistant-Integration vervollständigen, …) bleiben vorerst im Backlog.
|
||
|
||
### Neu
|
||
- **Objekte überspringen (vor und während des Drucks):** Aus dem AnycubicSlicerNext-Workbench-Bundle rekonstruiert — der Kobra X kann das nativ über sein Protokoll, der Anycubic-Slicer bietet es bloß nicht im UI an. Die Bridge schon, in zwei Varianten:
|
||
- **Vor dem Druck:** beim Starten eines Multi-Object-Drucks aus dem Browser-Tab hat der Filament-Dialog jetzt einen zusätzlichen Abschnitt „Objekte". Einzelne Objekte abwählen (oder Polygon direkt im Build-Plate-SVG anklicken) — sie werden vor dem Druck herausgenommen.
|
||
- **Während des Drucks:** neuer ✂-Button im Dashboard (nur während eines laufenden Drucks sichtbar). Öffnet einen Dialog mit derselben interaktiven SVG-Vorschau — Teil anklicken, bestätigen, der Drucker druckt es nicht weiter. Bereits übersprungene Teile bleiben ausgegraut, der Dialog aktualisiert sich live damit man sieht welche schon weg sind.
|
||
- **Filament-Dialog – farbige Kanal- und Slot-Marker (Issue #23):** Die GCode-Kanal-Nummer sitzt jetzt in einer farbigen Box links (Hintergrund = Kanal-Farbe, Auto-Kontrast-Text statt des alten kleinen Punktes), der zugewiesene AMS-Slot bekommt rechts neben dem Dropdown denselben Look — aktualisiert sich live wenn man die Auswahl ändert. Funktioniert mit 4 Kanälen; das Layout iteriert sauber für mehr, aber >4 echte Filament-Slots brauchen eine ACE-Pro-2-Box und sind ohne entsprechende Hardware nicht durchgängig testbar (geparkt als Feature-Request, Issues #22 und #23).
|
||
|
||
### Intern
|
||
- Neue Helfer `kobrax_client.skip_objects(names)` / `query_skip_objects()`.
|
||
- Neue Endpunkte: `GET /kx/files/{id}/objects`, `POST /kx/skip`, `POST /kx/skip/query`, `GET /kx/skip/state`.
|
||
- SQLite-Schema: `gcode_files` bekommt die Spalten `objects_skip_parts` und `svg_image` (Auto-Migration auf bestehenden DBs).
|
||
- `_on_file` extrahiert die vom Drucker gelieferte Objektliste + SVG-Vorschau und speichert sie pro Datei.
|
||
- `_on_skip`-Callback verfolgt, welche Objekte der Drucker aktuell als übersprungen meldet.
|
||
|
||
---
|
||
|
||
## [0.9.9] – 2026-05-14
|
||
|
||
### Fixes
|
||
- **„Failed to fetch"-Schleife in der UI (Issue #21):** Wenn die Web-UI über die LAN-IP geöffnet wurde, lieferte `/kx/printers` `bridge_url: http://localhost:7125` zurück. Der Browser machte daraufhin Cross-Origin-Requests von der LAN-IP nach `localhost` — die wurden vom Browser blockiert und produzierten eine Flut aus `TypeError: Failed to fetch`-Poll-Fehlern. Die Bridge liefert jetzt im Einzel-Drucker-Modus eine leere `bridge_url`, sodass das Frontend relative Pfade gegen dieselbe Origin wie die UI nutzt. Im Multi-Printer-Modus werden `localhost`/`127.0.0.1` als Bridge-Hosts herausgefiltert.
|
||
- **Windows-EXE crasht beim Start (Issue #21):** Die v0.9.8-`kx-bridge.exe` wurde mit einer veralteten `config_loader.py` aus einem früheren Release gebaut und stürzte mit `AttributeError: module 'config_loader' has no attribute 'list_printers'` ab. `release.sh` synct jetzt `config_loader.py` zusammen mit den anderen Quellen ins Windows-Build-Repository.
|
||
|
||
---
|
||
|
||
## [0.9.8] – 2026-05-12
|
||
|
||
### Neu
|
||
- **Multi-Printer in einer Bridge-Instanz:** Ein Prozess verwaltet jetzt mehrere Drucker gleichzeitig — N MQTT-Verbindungen + N HTTP-Listener (Ports 7125, 7126, …), geteilte SQLite + GCode-Store. Konfiguration über `[printer_1]`-, `[printer_2]`-… Sektionen in `config.ini`. Einzel-Modus (`[connection]`) funktioniert unverändert weiter. `docker-compose.yml` exposed einen Port-Range `7125-7130`.
|
||
- **Drucker per UI hinzufügen:** „+ Drucker hinzufügen"-Button im Drucker-Tab — nur die IP eingeben, Zugangsdaten (Username, Passwort, Device-ID) werden automatisch vom Drucker geholt und entschlüsselt. Weitere Drucker bekommen den nächsten freien Port (7126, 7127, …).
|
||
- **Drucker per UI entfernen:** „✕"-Button auf jeder Drucker-Karte mit Bestätigung — entfernt die `[printer_N]`-Sektion und nummeriert die übrigen um. Beim Entfernen des letzten Druckers wird auch `[connection]` geleert (leerer Zustand).
|
||
- **GCode Store:** Hochgeladene Dateien werden in SQLite gespeichert, inkl. Thumbnail-Extraktion. Neue `/kx/files`-API.
|
||
- **Browser-Tab:** Grid-Ansicht aller hochgeladenen Dateien — Thumbnail, Status-Badge (✓/✗), letzte Druckdauer, plus Suche, Filter und Sortierung.
|
||
- **Druckhistorie:** Druckaufträge (Start/Ende/Status) werden in SQLite protokolliert, Status pro Datei im Browser-Tab sichtbar.
|
||
- **Filament-Dialog:** Per-Kanal-Remapping vor dem Druckstart — jeder GCode-Farbkanal wird einem physischen AMS-Slot zugewiesen (wie im Anycubic Slicer). Verfügbar im Browser-Tab und im Upload-Banner.
|
||
- **MMU-Emulation:** `GET /printer/objects/query?mmu` liefert eine Happy-Hare-kompatible Struktur, damit OrcaSlicers Filament-Sync die AMS-Slots erkennt.
|
||
- **Drucker-Tab:** Live-Status aller Drucker-Instanzen, IP auf jeder Karte, „Wechseln →"-Button.
|
||
- **Editierbarer Drucker-Name:** Eigener Name in den Einstellungen (gespeichert in `[bridge] printer_name`, hat Vorrang vor dem vom Drucker gemeldeten Namen).
|
||
- **Standalone-tauglich:** Linux-Binary / Windows-EXE laufen ohne Docker — `config/` und `data/` liegen neben dem Programm (portabel). Erststart ohne konfigurierten Drucker zeigt den Drucker-Tab mit „+ Drucker hinzufügen" statt des Einstellungs-Dialogs.
|
||
- **i18n:** Alle neuen UI-Elemente auf Deutsch und Englisch.
|
||
|
||
### Fixes
|
||
- **CORS:** CORS-Middleware auf allen Endpunkten — Cross-Instance-Fetches in der Multi-Printer-UI funktionieren zuverlässig.
|
||
- **Einstellungen / Update-Check** zeigen im Multi-Printer-Modus jetzt die aktive Bridge-Instanz (via `_apiUrl`).
|
||
- **Bridge-Neustart:** Config-abhängige Umgebungsvariablen werden vor einem Neustart gelöscht (der Config-Loader cachte sie, wodurch Config-Änderungen erst nach einem Kaltstart sichtbar wurden). Der Neustart ist jetzt plattformabhängig: Docker/systemd → Prozess-Exit (Supervisor startet neu), Linux standalone → `os.execv`, Windows → detachter Subprozess.
|
||
- **`--data-dir`-Default** ist jetzt plattformabhängig — der `/app/data`-Default greift nur in Docker (per `ENV` gesetzt), Standalone-Binaries nutzen `<exe-dir>/data`. Behebt einen Startup-Crash beim Ausführen ohne Docker.
|
||
|
||
---
|
||
|
||
## [0.9.7] – 2026-05-08
|
||
|
||
### Neu
|
||
- **fetch_credentials-Tool:** Ruft MQTT-Credentials direkt vom Drucker per HTTP ab — kein laufender Anycubic Slicer nötig, nur die Drucker-IP. Linux-Binary und Windows-EXE im Release enthalten. (Beitrag von bebu, PR #19)
|
||
|
||
### Fixes
|
||
- **Upload großer GCode-Dateien:** Dateien >1 MB wurden mit HTTP 413 abgelehnt — aiohttp `client_max_size` auf 256 MB erhöht
|
||
- **Upload-Timeout:** Socket-Timeout nach GCode-Upload von 10s auf 120s erhöht — große Dateien führten zu einem Absturz der Bridge mit leerer Antwort während der Drucker noch verarbeitete
|
||
|
||
---
|
||
|
||
## [0.9.6] – 2026-05-02
|
||
|
||
### Neu
|
||
- **Licht-Status-Synchronisierung:** Ein/Aus-Zustand und Helligkeit des Druckerlichts werden jetzt live über `light/report` MQTT gelesen — der Licht-Toggle in der UI spiegelt den echten Druckerstatus wider
|
||
- **Zeit-Minicards:** Fortschritts-Panel zeigt jetzt drei Karten — Verstrichen, Restzeit und Slicer-Schätzung — sowie einen Layer-Badge neben dem Fortschrittsbalken
|
||
- **Slicer-Schätzzeit aus GCode:** Geschätzte Druckzeit wird direkt aus der hochgeladenen GCode-Datei gelesen (OrcaSlicer: `; total estimated time:` am Dateiende, PrusaSlicer: `; estimated printing time` im Header)
|
||
- **Erweiterte Druckerstatus-Strings:** `pausing`, `paused`, `resuming`, `resumed`, `stopping`, `stopped` hinzugefügt — fehlten bisher und ließen die UI rohe Status-Codes bei Pause/Fortsetzen/Stopp anzeigen
|
||
|
||
### Fixes
|
||
- **file_ready-Banner:** Upload-Banner wird nach Stopp oder Abbruch eines Drucks nicht mehr angezeigt
|
||
- **Zeitanzeige bei Stopp/Abbruch:** Verstrichen-, Restzeit- und Slicer-Schätzung werden auf null zurückgesetzt wenn ein Druck gestoppt oder abgebrochen wird
|
||
- **start.sh:** `config/`-Verzeichnis und `config.ini.example` werden beim ersten Start automatisch angelegt wenn sie fehlen (Issue #15)
|
||
|
||
---
|
||
|
||
## [0.9.5] – 2026-05-01
|
||
|
||
### Neu
|
||
- **Upload-Banner:** Nach „Nur hochladen" erscheint ein grüner Banner mit Dateiname — „▶ Druck starten" startet den Druck direkt, „✕ Abbrechen" schließt den Banner
|
||
|
||
### Fixes
|
||
- **Auto-Print:** `auto_print` wurde nach dem Multipart-Loop immer auf `False` zurückgesetzt — OrcaSlicer „Hochladen und drucken" startete den Druck nie automatisch
|
||
- **Thumbnail:** Vorschaubild wird jetzt auch bei „Nur hochladen" angezeigt — Bridge fragt `fileDetails` direkt nach dem Upload an
|
||
- **Log Auto-Scroll:** Scroll-Position bleibt erhalten wenn Auto-Scroll deaktiviert ist — kein ungewollter Sprung nach oben mehr
|
||
|
||
---
|
||
|
||
## [0.9.4] – 2026-05-01
|
||
|
||
### Neu
|
||
- **AMS-Slot-Editor:** Slot im AMS-Panel anklicken → Dialog mit Farbpicker und Material-Auswahl (Schnellbuttons: PLA/PETG/ABS/ASA/TPU/PA/PC/HIPS oder Freitext) direkt im Browser
|
||
- **Verbessertes Log-Panel:** Vollständige MQTT-Payloads (keine Kürzung mehr), Richtungsfilter (Alle/RX/TX) und Topic-Schnellfilter (AMS / print / info / status)
|
||
|
||
### Fixes
|
||
- **i18n:** Kamera-Placeholder-Text und Log-Richtungs-Button „Alle" werden jetzt korrekt beim Sprachwechsel übersetzt
|
||
|
||
---
|
||
|
||
## [0.9.3] – 2026-05-01
|
||
|
||
### Fixes
|
||
- **Update-Check:** Stable-User erhalten keine Dev-Pre-Releases mehr — `STABLE_RELEASE_API` hatte `pre-release=true`, wodurch stabile Installationen Dev-Builds statt stabiler Releases fanden (Issue #14)
|
||
- **Version nach Update:** `VERSION`-Datei wird jetzt im Docker-Image mitgeliefert (`COPY VERSION .`) — `_write_version()` benötigt eine vorhandene Datei, ohne die wurde die Version nach dem Self-Update nie aktualisiert (Issue #14)
|
||
|
||
### Neu
|
||
- **Version im Header:** Laufende Version wird im Web-UI-Header neben dem Druckernamen angezeigt — kein Öffnen der Einstellungen nötig (Issue #14)
|
||
|
||
---
|
||
|
||
## [0.9.2] – 2026-04-29
|
||
|
||
### ⚠️ Breaking Change: Konfiguration wechselt von `.env` zu `config/config.ini`
|
||
|
||
**Migration erfolgt automatisch** beim ersten Start — keine manuelle Aktion nötig.
|
||
|
||
- Einstellungen werden ab sofort aus `config/config.ini` gelesen statt aus `.env`
|
||
- Beim ersten Start ohne `config.ini` wird die Datei automatisch aus `.env` erstellt
|
||
- **Docker:** Volume `./config:/app/config` in `docker-compose.yml` ist der persistente Speicherort — Einstellungen überleben `docker-compose restart` und Updates
|
||
- **Standalone:** `config/config.ini` liegt neben der Binary und wird bei Updates nicht überschrieben
|
||
- `.env` bleibt als read-only Fallback gemountet — kann liegen bleiben
|
||
- Zum manuellen Anlegen einer `config.ini`: Vorlage unter `config/config.ini.example`
|
||
|
||
### Neu
|
||
- **Persistente Einstellungen:** `config/config.ini` ersetzt `.env` — Einstellungen gehen nach `docker-compose restart` nicht mehr verloren (Issue #9)
|
||
- **Verbindungsfehler-Banner:** Roter Banner oben in der Web-UI wenn MQTT-Verbindung fehlschlägt (z.B. falsches Passwort, Drucker nicht erreichbar) (Issue #11)
|
||
- **Slicer-Schätzzeit:** Geschätzte Gesamtdruckzeit aus dem GCode-Header wird im Fortschritts-Panel angezeigt
|
||
|
||
### Fixes
|
||
- README: OrcaSlicer-Verbindung explizit mit `http://` und Port `:7125` dokumentiert (Issue #12)
|
||
- README: Direkter Download-Link für `extract_credentials` auf Gitea-Releases (Issue #13)
|
||
|
||
---
|
||
|
||
## [0.9.1-dev] – laufend (dev-Branch)
|
||
|
||
### Neu
|
||
- **Dev-Branch-Infrastruktur:** Versionsschema `0.9.1-dev+<hash>` — jeder Build eindeutig identifizierbar
|
||
- **Separater Update-Kanal:** Dev-Versionen prüfen auf Gitea Pre-Releases mit `-dev+` im Tag
|
||
- **AMS-Slot-Auswahl:** Einstellung „Standard-Slot (Einfarbdruck)" im Settings-Modal — fixiert einen bestimmten AMS-Kanal oder Auto (alle belegten Slots)
|
||
- **Auto-Leveling:** Checkbox im Settings-Modal — steuert `task_settings.auto_leveling` beim Druckstart
|
||
- **MQTT-Logging:** Strukturiertes TX/RX-Log mit Duplikat-Filter (`kobrax.mqtt` Logger)
|
||
- **Server-Log im Browser:** Live-Stream via SSE (`/api/log/stream`) — alle Server-Logs erscheinen im Log-Tab der UI
|
||
- **Log-Tab Verbesserungen:**
|
||
- Auto-Scroll ein/aus — deaktiviert sich beim manuellen Hochscrollen, Button zum Reaktivieren
|
||
- Textfilter — Live-Filterung der Log-Einträge
|
||
- Error-Badge — roter Zähler im Tab-Button bei Fehlern/Warnungen
|
||
- Clear-Button — Buffer leeren
|
||
- Download-Button — letzte 500 Einträge als `kx-bridge.log`
|
||
- Log-Fenster füllt den gesamten verfügbaren Platz (statt fester Höhe 160px)
|
||
- **Log-Buffer:** 500 Einträge (Server + Browser vereinheitlicht)
|
||
- **Changelog im Update-Dialog:** Release-Notes aus Gitea werden direkt im Update-Dialog angezeigt
|
||
- **Slicer-Schätzzeit:** Geschätzte Gesamtdruckzeit aus dem GCode-Header im Fortschritts-Panel
|
||
|
||
---
|
||
|
||
## [0.9.1-beta15] – 2026-04-26
|
||
|
||
### Fixes
|
||
- AMS: Leere Slots werden beim Druckstart übersprungen — kein `filament runout` mehr bei unbelegten Kanälen (Issue #5)
|
||
- AMS: Material-Typ wird jetzt korrekt aus dem Drucker-Protokoll gelesen (Feld `type` statt `material_type`)
|
||
- AMS UI: Leere Slots werden grau/transparent mit „Leer"-Label dargestellt
|
||
|
||
---
|
||
|
||
## [0.9.1-beta14] – 2026-04-26
|
||
|
||
### Fixes
|
||
- Z-Achse: ▲ fährt jetzt aufwärts (Z+), ▼ abwärts (Z−) — Pfeile waren vertauscht (Issue #4)
|
||
- Home All: korrekter Achsen-Code 5 — homed alle Achsen XYZ (Issue #4)
|
||
- Neuer Button „Home XY" (axis=4) in der UI
|
||
- Neuer Button „Motoren aus" (axis turnOff) in der UI
|
||
|
||
---
|
||
|
||
## [0.9.1-beta13] – 2026-04-26
|
||
|
||
### Fixes (Windows)
|
||
- Self-Update / Settings-Neustart: `os.execv` funktioniert jetzt korrekt in der PyInstaller-Binary
|
||
- Kamera: `ffmpeg nicht gefunden` crasht nicht mehr — saubere 503-Antwort wenn ffmpeg fehlt
|
||
- Reconnect-Loop: Kurze leere TCP-Reads unter Windows lösen keine sofortigen Reconnects mehr aus
|
||
|
||
### Struktur
|
||
- `bridge/`: Bridge-Dateien aus `05_scripts/` herausgelöst
|
||
- `tools/`: `extract_credentials.py` als eigenständiges Tool mit eigenem README
|
||
- `_archive/`: RE-Forschungsordner, Analyse-Tools und alte Release-Checksums archiviert
|
||
- README komplett neu: klarer 3-Schritte-Schnellstart
|
||
|
||
---
|
||
|
||
## [0.9.1-beta12] – 2026-04-25
|
||
|
||
### Fixes
|
||
- Falsche MQTT-Zugangsdaten zeigen jetzt eine verständliche Fehlermeldung statt des kryptischen `CONNACK failed: 20020005`
|
||
|
||
---
|
||
|
||
## [0.9.1-beta11] – 2026-04-25
|
||
|
||
### Fixes
|
||
- Drucker-IP wird automatisch bereinigt wenn der Nutzer versehentlich den Port miteingibt (z.B. `192.168.1.102:9883` → `192.168.1.102`)
|
||
- Settings-Modal: Hinweis erscheint wenn ein `:` in der IP erkannt wird
|
||
- `docker-compose.yml`: `.env` als Volume gemountet — Einstellungen bleiben nach `docker-compose restart` erhalten
|
||
|
||
---
|
||
|
||
## [0.9.1-beta10] – 2026-04-25
|
||
|
||
### Neu
|
||
- `start.sh` — startet die Bridge per Docker, baut das Image automatisch beim ersten Aufruf
|
||
- Tests: pytest-Suite (19 Tests) für API-State, Moonraker-Endpunkte, Settings; Installations-Smoke-Test (`test_install.sh`)
|
||
- Settings-Modal öffnet sich beim ersten Start automatisch wenn keine Zugangsdaten hinterlegt sind
|
||
|
||
### Geändert
|
||
- README: Schnellstart zeigt jetzt `./start.sh` statt manuellem `docker build`
|
||
- README: LAN-Modus korrekt als Drucker-Menüoption beschrieben
|
||
- README: Versionsnummer wird ab jetzt automatisch bei jedem Release aktualisiert
|
||
- `extract_credentials`: `--write-env` nicht mehr empfohlen — Werte im ⚙-Menü eintragen
|
||
- Dockerfile im Release-Repo: Pfade ohne `05_scripts/`-Präfix
|
||
- `release.sh`: Dockerfile für Release-Repo automatisch per `sed` angepasst
|
||
|
||
### Fixes
|
||
- Restdruckzeit (`remain_time`) wird jetzt korrekt aus `print/report` übernommen und in der UI angezeigt
|
||
- Übersetzungen: „Schrittweite" und „Ziel"-Placeholder in Temperatureingaben korrekt übersetzt
|
||
|
||
---
|
||
|
||
## [0.9.1-beta9] – 2026-04-25
|
||
|
||
### Neu
|
||
- OrcaSlicer-Profil (`kobra_x_orcaslicer_preset.zip`) als Release-Asset
|
||
- `release.sh`: OrcaSlicer-Profil wird automatisch ins Release-Repo kopiert und hochgeladen
|
||
|
||
### Geändert
|
||
- README: `extract_credentials` ohne `--write-env`, Werte manuell im ⚙-Menü eintragen
|
||
- README: Docker-Schnellstart vereinfacht
|
||
|
||
---
|
||
|
||
## [0.9.1-beta8] – 2026-04-25
|
||
|
||
### Neu
|
||
- Restdruckzeit-Anzeige in der UI (≈ Xh Ym verbleibend) aus `remain_time`-Feld
|
||
- Settings-Modal: Verbindungseinstellungen und Self-Update direkt im Browser
|
||
- Self-Update: Bridge prüft Gitea-Release-API auf neue Versionen und aktualisiert sich selbst
|
||
|
||
### Geändert
|
||
- Bridge startet im Offline-Modus wenn Drucker nicht erreichbar (kein Absturz)
|
||
- Verbinden/Trennen-Button im Header
|
||
|
||
---
|
||
|
||
## [0.9.1-beta7] – 2026-04-22
|
||
|
||
### Neu
|
||
- Offline-Start: Bridge läuft auch ohne MQTT-Verbindung, verbindet automatisch sobald Drucker erreichbar
|
||
- Verbinden/Trennen-Button im Header
|
||
|
||
---
|
||
|
||
## [0.9.1-beta6] – 2026-04-20
|
||
|
||
### Neu
|
||
- Release-ZIPs: `kx-bridge-linux.zip`, `kx-bridge-windows.zip`, `anycubic-certs.zip` mit Zertifikaten
|
||
|
||
### Fixes
|
||
- PyInstaller frozen-Binary: `__file__` durch `sys.executable`-Pfad ersetzt (Cert-Pfad-Fix)
|
||
|
||
---
|
||
|
||
## [0.9.1-beta5] – 2026-04-19
|
||
|
||
### Neu
|
||
- `kx-bridge.exe` (Windows) wird automatisch via GitHub Actions gebaut
|
||
|
||
---
|
||
|
||
## [0.9.1-beta4] – 2026-04-18
|
||
|
||
### Neu
|
||
- `release.sh`: baut Linux-Binary und Windows-EXE, lädt alle Assets auf Gitea hoch
|
||
- Englische README (`README.en.md`)
|
||
|
||
### Fixes
|
||
- `progress` und `filename` werden bei `stoped`/`canceled` korrekt auf 0 zurückgesetzt
|
||
|
||
---
|
||
|
||
## [0.9.1-beta3] – 2026-04-17
|
||
|
||
### Neu
|
||
- Druckgeschwindigkeit-Karte (Leise / Normal / Sport)
|
||
- Übersetzungen (DE/EN) vervollständigt
|
||
|
||
---
|
||
|
||
## [0.9.1-beta2] – 2026-04-17
|
||
|
||
### Fixes
|
||
- Temperatursteuerung während eines laufenden Drucks
|
||
|
||
---
|
||
|
||
## [0.9.1-beta1] – 2026-04-17
|
||
|
||
### Neu
|
||
- UI-Komplettüberarbeitung: Settings-Modal, Self-Update, Dashboard, Responsive Design
|
||
- Neue Drucker-Zustände: `pausing`, `paused`, `resuming`, `resumed`, `stopping`
|
||
- `release.sh`: Version-Bump und Release-Sync Skript
|
||
|
||
---
|
||
|
||
## [0.9.0-beta1] – 2026-04-10
|
||
|
||
### Neu
|
||
- Erster öffentlicher Release
|
||
- Docker-Deployment, Linux-Binary, `extract_credentials`-Tool
|
||
- Moonraker-kompatible HTTP/WebSocket-Bridge für den Anycubic Kobra X
|
||
- AMS Einziehen/Ausziehen, Licht- und Lüftersteuerung
|
||
- Web-UI mit Dashboard, Temperaturkarten, Achsensteuerung
|