179 lines
6.2 KiB
Markdown
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.
|