# P-Touch Web fuer Brother PT-P700 Kleine Flask-Weboberflaeche zum Erstellen von Etiketten und Drucken auf einem Brother P-Touch P700, der per USB an einem Unraid-Host haengt. Die Weboberflaeche bildet die wichtigsten P-touch-Editor-Funktionen nach: - Bandbreite, automatische Laenge, Rand und Ausrichtung - frei positionierbare Objekte auf einem Etiketten-Canvas - Textfelder, Symbole, Rahmen/Formen, Linien und Tabellen - Bildimport mit Schwarz/Weiss-Konvertierung - QR-Code und Code128-Barcode - Layout speichern/laden im Browser - serverseitige Vorschau und Druck ueber `ptouch-print` - vereinfachte Mobile-Webansicht unter `/mobile` - Schnittmodi: normal, Kettendruck/Streifen, Schnittmarke und Streifen mit Schnittmarke ## Wichtig fuer den PT-P700 Der PT-P700 muss im normalen Druckermodus laufen, nicht im "Editor Lite" Massenspeicher-Modus. Falls er im Host als USB-Laufwerk erscheint, Editor Lite am Geraet deaktivieren bzw. das Laufwerk auswerfen und den Drucker neu verbinden. Wenn `lsusb` so etwas zeigt, ist der Drucker noch im falschen Modus: ```text Brother Industries, Ltd PT-P700 P-touch Label Printer RemovableDisk ``` Dann am PT-P700 die `Editor Lite`-Taste druecken, bis die Editor-Lite-LED aus ist. Danach USB kurz abziehen und wieder einstecken. Erst wenn der Drucker nicht mehr als `RemovableDisk` erscheint, kann `ptouch-print` drucken. Der Container braucht Zugriff auf USB. In Unraid geht das am einfachsten mit: - `/dev/bus/usb:/dev/bus/usb` - `privileged: true` ## Start lokal ```bash docker compose up --build ``` Danach: Mobile Ansicht: Beim Dockerfile-Image startet der Container ueber `/usr/local/bin/ptouch-web-start`. Bei der Unraid-GUI-Variante ohne eigenes Image wird stattdessen `sh /srv/ptouch-web/start.sh` als Container-Befehl gesetzt. ## Unraid Docker-GUI ohne eigenes Image Diese Variante nutzt ein fertiges Alpine/Python-Basisimage und mountet dieses Projekt in den Container. `start.sh` installiert beim Start Flask, Pillow und baut `ptouch-print`. Nachteil: Beim ersten Start braucht der Container Internet und der Start dauert laenger. Nach einem Container-Neuerstellen kann das erneut passieren. Dateien auf Unraid ablegen: ```text /mnt/user/appdata/ptouch-web/app /mnt/user/appdata/ptouch-web/start.sh /mnt/user/appdata/ptouch-web/requirements.txt /mnt/user/appdata/ptouch-web/labels ``` In Unraid: Docker -> Add Container. 1. `Name`: `ptouch-web` 2. `Repository`: `python:3.12-alpine` 3. `Network Type`: `bridge` 4. `Privileged`: `On` 5. `Post Arguments`: `sh /srv/ptouch-web/start.sh` 6. `Console shell command` ist egal 7. Bei `Command` oder `Entrypoint`, falls sichtbar: - `Command`: leer lassen, wenn `Post Arguments` gesetzt ist - `Entrypoint`: leer 8. Port hinzufuegen: - Container Port: `8080` - Host Port: `8080` - Protocol: `TCP` 9. Path hinzufuegen fuer die App: - Container Path: `/srv/ptouch-web` - Host Path: `/mnt/user/appdata/ptouch-web` - Access Mode: `Read/Write` 10. Path hinzufuegen: - Container Path: `/data/labels` - Host Path: `/mnt/user/appdata/ptouch-web/labels` - Access Mode: `Read/Write` 11. Path hinzufuegen fuer USB: - Container Path: `/dev/bus/usb` - Host Path: `/dev/bus/usb` - Access Mode: `Read/Write` 12. Variablen hinzufuegen: - `APP_DIR=/srv/ptouch-web` - `FLASK_APP=app.app` - `PRINT_ENABLED=1` - `PRINT_COMMAND=ptouch-print --image {image}` - `LABEL_DIR=/data/labels` - `LABEL_DPI=180` Wichtig: `/srv/ptouch-web` muss den Inhalt dieses Projektordners enthalten, also direkt `app/`, `start.sh` und `requirements.txt`. ## Konfiguration Umgebungsvariablen: - `PRINT_ENABLED=1` druckt wirklich. Mit `0` wird nur ein PNG erzeugt. - `PRINT_COMMAND=ptouch-print --image {image}` ist das Druckkommando. - `LABEL_DPI=180` passt zum PT-P700. - `LABEL_DIR=/data/labels` speichert erzeugte PNG-Dateien. Wenn `ptouch-print` auf deinem Setup andere Optionen braucht, nur `PRINT_COMMAND` anpassen. Der Platzhalter `{image}` wird von der App ersetzt. Fuer Schnittoptionen kannst du optional `{cut_args}` im Kommando platzieren; ohne Platzhalter haengt die App die Schnittargumente automatisch an. Hinweis: Der PT-P700 unterstuetzt laut Brother Auto Cut und Kettendruck, aber keinen Halbschnitt. Die Option `Kettendruck / Streifen` rendert mehrere Kopien als ein langes Druckbild, damit keine Vollschnitte zwischen den Labels entstehen. Die automatische Laenge entfernt leeres Band am Ende des Etiketts. Links bzw. oben bleibt das Layout unveraendert, damit die Positionen im Editor nachvollziehbar bleiben. ## USB testen Im laufenden Container: ```bash ptouch-print --info ``` Wenn kein Drucker gefunden wird, zuerst pruefen: - Ist Editor Lite deaktiviert? - Sieht Unraid den Drucker unter USB? - Ist `/dev/bus/usb` im Container sichtbar? - Laeuft der Container privilegiert? Wenn `ptouch-print` meldet: ```text PT-P700 (PLite Mode) found ``` ist Editor Lite noch aktiv. Das ist kein Containerproblem, sondern der USB-Modus des Druckers. Wenn `ptouch-print` meldet: ```text PT-P700 found on USB bus ..., device ... libusb_open error :LIBUSB_ERROR_IO ``` sieht der Container den Drucker, kann ihn aber nicht oeffnen. Dann pruefen: - Container in Unraid wirklich mit `Privileged: On` starten. - `/dev/bus/usb` als Pfad `Read/Write` nach `/dev/bus/usb` mounten. - Keine zusaetzliche Device-Zeile nur fuer `/dev/usb/lp0` verwenden. - Auf dem Unraid-Host pruefen, ob `usblp` geladen ist: `lsmod | grep usblp` - Falls `usblp` geladen ist, testweise entladen: `modprobe -r usblp` - USB-Kabel danach kurz abziehen und wieder einstecken. Wenn das Entladen von `usblp` hilft, sollte `usblp` auf dem Host dauerhaft fuer diesen Drucker deaktiviert werden, weil `ptouch-print` direkt ueber libusb druckt. Wenn `usblp` entladen ist und `LIBUSB_ERROR_IO` trotzdem bleibt: 1. Im Container-Terminal pruefen: ```bash lsusb ls -l /dev/bus/usb/001/020 ptouch-print --info ``` Die Bus-/Device-Nummer muss zur Ausgabe von `lsusb` passen. 2. Auf dem Unraid-Host pruefen, ob ein Prozess das USB-Device offen hat: ```bash fuser -v /dev/bus/usb/001/020 lsof /dev/bus/usb/001/020 2>/dev/null ``` 3. Unraid-Container-Konfiguration pruefen: - `Privileged: On` - `/dev/bus/usb` als `Path`, nicht nur als Datei, nach `/dev/bus/usb` - Access Mode `Read/Write` - keine extra `/dev/usb/lp0`-Device-Zuordnung 4. Wenn die Device-Nummer nach USB-Neustecken anders ist, die Befehle mit der neuen Nummer wiederholen.