Files
P-Touch-Web/README.md
T

179 lines
6.2 KiB
Markdown

# 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, 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: <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:
```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.
## 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.