Initial P-Touch web editor
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
# 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`
|
||||
|
||||
## 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. Wenn dein Kommando selbst Kopien unterstuetzt, kannst du zusaetzlich `{copies}` verwenden; sonst druckt die App mehrere Kopien durch mehrere Druckaufrufe.
|
||||
|
||||
## 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.
|
||||
Reference in New Issue
Block a user