6.4 KiB
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 - einfache Text-only 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:
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/usbprivileged: true
Start lokal
docker compose up --build
Danach: http://localhost:8080
Mobile Ansicht: http://localhost:8080/mobile
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:
/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.
Name:ptouch-webRepository:python:3.12-alpineNetwork Type:bridgePrivileged:OnPost Arguments:sh /srv/ptouch-web/start.shConsole shell commandist egal- Bei
CommandoderEntrypoint, falls sichtbar:Command: leer lassen, wennPost Argumentsgesetzt istEntrypoint: leer
- Port hinzufuegen:
- Container Port:
8080 - Host Port:
8080 - Protocol:
TCP
- Container Port:
- Path hinzufuegen fuer die App:
- Container Path:
/srv/ptouch-web - Host Path:
/mnt/user/appdata/ptouch-web - Access Mode:
Read/Write
- Container Path:
- Path hinzufuegen:
- Container Path:
/data/labels - Host Path:
/mnt/user/appdata/ptouch-web/labels - Access Mode:
Read/Write
- Path hinzufuegen fuer USB:
- Container Path:
/dev/bus/usb - Host Path:
/dev/bus/usb - Access Mode:
Read/Write
- Variablen hinzufuegen:
APP_DIR=/srv/ptouch-webFLASK_APP=app.appPRINT_ENABLED=1PRINT_COMMAND=ptouch-print --image {image}LABEL_DIR=/data/labelsLABEL_DPI=180
Wichtig: /srv/ptouch-web muss den Inhalt dieses Projektordners enthalten, also direkt app/, start.sh und requirements.txt.
Konfiguration
Umgebungsvariablen:
PRINT_ENABLED=1druckt wirklich. Mit0wird nur ein PNG erzeugt.PRINT_COMMAND=ptouch-print --image {image}ist das Druckkommando.LABEL_DPI=180passt zum PT-P700.LABEL_DIR=/data/labelsspeichert 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:
ptouch-print --info
Wenn kein Drucker gefunden wird, zuerst pruefen:
- Ist Editor Lite deaktiviert?
- Sieht Unraid den Drucker unter USB?
- Ist
/dev/bus/usbim Container sichtbar? - Laeuft der Container privilegiert?
Wenn ptouch-print meldet:
PT-P700 (PLite Mode) found
ist Editor Lite noch aktiv. Das ist kein Containerproblem, sondern der USB-Modus des Druckers.
Wenn ptouch-print meldet:
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: Onstarten. /dev/bus/usbals PfadRead/Writenach/dev/bus/usbmounten.- Keine zusaetzliche Device-Zeile nur fuer
/dev/usb/lp0verwenden. - Auf dem Unraid-Host pruefen, ob
usblpgeladen ist:lsmod | grep usblp - Falls
usblpgeladen 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:
-
Im Container-Terminal pruefen:
lsusb ls -l /dev/bus/usb/001/020 ptouch-print --infoDie Bus-/Device-Nummer muss zur Ausgabe von
lsusbpassen. -
Auf dem Unraid-Host pruefen, ob ein Prozess das USB-Device offen hat:
fuser -v /dev/bus/usb/001/020 lsof /dev/bus/usb/001/020 2>/dev/null -
Unraid-Container-Konfiguration pruefen:
Privileged: On/dev/bus/usbalsPath, nicht nur als Datei, nach/dev/bus/usb- Access Mode
Read/Write - keine extra
/dev/usb/lp0-Device-Zuordnung
-
Wenn die Device-Nummer nach USB-Neustecken anders ist, die Befehle mit der neuen Nummer wiederholen.