Upload per ZIP-Tool (1/3)

This commit is contained in:
olli1986 committed 2026-10-25 10:59:40 +01:00
1 parent 14a4880a09
commit 9e7561b040
20 files changed
+1403 -14

No files matched your search

+142
View File
@@ -0,0 +1,142 @@
# LabelPi – User guide
## 1. Basics
**Top bar:** printer (only shown if several are connected) · roll · length (continuous rolls only) · *rotated* · copies · dithering · auto-cut (models with a cutter only) · cut mark · **Print**.
- **The roll selected here must match the roll that is loaded.** LabelPi asks if you change the roll compared with the last print.
- **rotated:** On continuous rolls the length is shown horizontally and the label is rotated by 90° when printing, so you read it like on screen.
- **Dithering:** Only useful for photos/greys. Keep it **off** for text, QR codes and barcodes.
- **Cut mark** (continuous rolls without a cutter): prints a dashed line at the end of the label so you cut in the right place by hand (e.g. QL-500).
**Working in the designer**
- **View:** By default only the most important functions are shown. **Advanced view** (bar at the top right) adds rotate, dithering, auto-cut, cut mark, series, grid and zoom. More elements (PDF, shapes, symbols) are in the **+ More …** menu, saving/export under **File ▾**.
- Add elements from the toolbar, **tap** = select, **drag** = move, **bottom-right corner** = resize.
- The **properties** are in the bar at the bottom, which always stays visible. It also has buttons to align the element to the label.
- Elements **snap** to the edge, centre and other elements while moving (pink guide lines).
- **↶ / ↷** undo and redo (last 25 steps).
## 2. Elements
| Element | Notes |
|---|---|
| **Text** | Multi-line. *Auto size* fills the box with the largest possible font (set the box height). |
| **Symbol** | Warning, hazard, recycling signs etc. – they are text in a symbol font, so freely scalable. |
| **QR code** | Any text or link; placeholders allowed. The *QR assistant* builds Wi-Fi, vCard, email … for you. |
| **Barcode** | Choose a type (see below). With invalid content a red warning appears and **nothing is printed**. |
| **Image** | Photo/logo from your device. Switch dithering on for photos. |
| **PDF** | The page size selects the matching roll. Multi-page PDFs can be printed as a series (one page per label). |
| **Shapes** | Circle, line, arrow, triangle – filled or outline, rotatable in 45° steps (properties → Rotation). |
| **Table** | See section 3. |
**Barcode types**
| Type | Input |
|---|---|
| Code 128 | Any characters |
| EAN-13 | 12 digits (check digit is added) |
| EAN-8 | 7 digits |
| Code 39 | Capital letters, digits, `- . $ / + %` and space |
| GS1-128 | With brackets, e.g. `(01)09501101530003(17)271231(10)AB12` |
| Data Matrix | Any text, square |
## 3. Tables
- **Tap a cell** = select it (blue). **Double-click or double-tap** = type directly into the cell. *Enter* accepts, *Tab* jumps to the next cell, *Esc* cancels.
- In the properties: add/remove rows and columns, font, line width, *first row bold*.
- **Table border:** all lines · outside only · row lines · none.
- **Border of a single cell:** select the cell and tick *top / bottom / left / right*. This is in addition to the table border – with “none (cell borders only)” just the marked cells get lines (e.g. a single underline).
- Texts that are too long shrink automatically to fit the cell.
- You can also edit the content as text: one line per table row, columns separated by `;`.
## 4. Placeholders
Placeholders work in **text, QR codes, barcodes and table cells**. The names are German; English short forms exist.
| Placeholder | Meaning | Example |
|---|---|---|
| `{n}` | Counter within the series | 1, 2, 3 … |
| `{n:5}` | Counter, 5 digits with leading zeros | 00001 |
| `{gesamt}` / `{total}` | Number of labels in the series | `{n}/{gesamt}` → 3/10 |
| `{lfd}`, `{lfd:5}` | **Running counter that remembers** (stored on the Pi, survives restarts and device changes) | 1001, 1002 … |
| `{lfd.invoice}` | Named counter, as many as you like | independent of `{lfd}` |
| `{datum}` / `{date}` | Today's date | 24.10.2026 |
| `{datum:JJJJ-MM-TT}` | Date with a custom format (`JJJJ`/`YYYY`, `JJ`/`YY`, `MM`, `TT`/`DD`) | 2026-10-24 |
| `{datum+30}` | Date plus 30 days (also `-7`; units `d` days, `w` weeks, `m` months, `j`/`y` years) | 23.11.2026 · `{datum+6m:MM/JJJJ}` → 04/2027 |
| `{zeit}`, `{zeit:HH:MM:SS}` | Time | 14:35 |
| `{jahr}` `{monat}` `{tag}` | Single date parts (also with offset, e.g. `{jahr+1j}`) | 2026 · 10 · 24 |
| `{kw}` / `{cw}` | ISO calendar week (e.g. `{kw+2w}` = week in two weeks) | 43 |
| `{wochentag}` `{monatname}` | Name in the interface language | Saturday |
| `{zufall:8}` / `{random:8}` | Random code (8 characters, without easily confused ones like 0/O and 1/I); every label of a series gets a different one | K7HT3QWZ |
| `{uuid}` | Random UUID | 3f2a9c1e-… |
| `{ColumnName}` | Value from the CSV column (CSV series only) | `{Name}` |
**English short forms:** `{date}` `{time}` `{year}` `{month}` `{day}` `{weekday}` `{cw}` `{random}` `{total}` `{seq}`.
**Filters** (append with `|`, combinable): `{Name|gross}` UPPERCASE · `{Name|klein}` lowercase · `{Name|titel}` Title Case (English: `|upper` `|lower` `|title`) · `{n:8|luhn}` appends a Luhn check digit · `{n:12|gtin}` appends the EAN/GTIN check digit.
**Notes**
- Date and time come from the device you print from. Unknown placeholders are left unchanged.
- `{lfd}` reserves the numbers when printing. If printing fails the counter is reset (no gaps). You see the next value in the preview and under *Settings → Counter*, where you can also change it.
- Examples: `SN-{jahr}-{lfd:4}` → `SN-2026-0001` · `Best before {datum+30}` · `CW {kw}/{jahr}` · `{n:11|gtin}` as EAN content.
## 5. Series (“Series…”)
- **Counter:** set start, step and count. Example: start 100, step 5, count 10 → 100, 105, …, 145.
- **CSV file:** first row = column names, then one label per row. Separator `;` or `,`, UTF-8.
```
Name;Item;Number
Miller;Screw M4;1001
Smith;Nut M4;1002
```
Use `{Name}`, `{Item}`, `{Number}` in the designer.
- **PDF pages:** created when you import a multi-page PDF.
- **Copies** apply per label of the series. Printing happens in blocks; the history only shows the first label of the series.
- The preview first shows label 1; use **‹ ›** next to “Series…” to page through all labels.
## 6. Grid (“Grid…”)
Continuous rolls only. Several labels side by side and below each other on one strip:
1. Set the *label width* in mm (e.g. 28 mm on a 62 mm roll for two columns).
2. Set *columns × rows* and *gap*.
3. When printing, consecutive labels (copies or series) fill the grid. If the grid does not fit the roll an error appears.
## 7. Templates, history, export, backup
- **Templates:** save with “Save as template”, sort into **folders**, edit (name/folder) and export.
- **History:** every print and every “Save” ends up here. *Print again*, *Edit*, or use *Select* to delete/export several.
- **Export/import:** labels and templates as a JSON file, e.g. to share. **⬇ PNG/PDF** exports the current label as an image or PDF.
- **Backup:** *Settings → Save database* stores everything (including printers and password), *Restore backup* puts it back.
## 8. Printers and security
- **USB printers** are detected automatically. Several identical models are told apart by their USB port.
- **Network printers** (LAN/Wi-Fi): *Settings → Add network printer* (name, IP, model).
- **Password protection:** *Settings → Password protection*. Without it anyone on the network can print – use it only in trusted networks.
## 9. Form mode, QR assistant
- **Form mode:** every template has an **Form** button. It shows only a small form with one field per custom placeholder (e.g. `{Name}`, `{Room}`), a preview and the number of copies – no designer. Ideal for colleagues who only need to print.
- **QR assistant:** select the QR code and click *QR assistant…* in the properties. Types: link, Wi-Fi access, contact (vCard), email, phone, SMS, location, free text. You fill in the fields and the content is built correctly. Placeholders are allowed here too.
## 9a. Keyboard shortcuts
| Key | Action |
|---|---|
| `Del` | Delete the selected element |
| `Ctrl+Z` | Undo |
| `Ctrl+Y` or `Ctrl+Shift+Z` | Redo |
| `Enter` / `Tab` / `Esc` | In a table cell: accept / next cell / cancel |
## 10. Common problems
| Problem | Solution |
|---|---|
| Label cut off or misplaced | Is the roll in the app the same as the loaded one? Check “rotated”. |
| Barcode is not printed | Check the input (e.g. EAN-13 needs 12 digits). |
| Text looks different on paper | Dithering off; font not too small (below about 6 pt). |
| Page not reachable | Pi and device on the same network? Use the IP instead of `labelpi.local`. |
| More help | `docs/INSTALL.md` (installation, troubleshooting) |
## 11. Languages
The interface is available in German and English. Choose the language in the bar at the top right; it is remembered per device (the browser language is used on first start).
**Adding a new language**
1. *Settings → Languages → Download template for a new language* (`neue-sprache.json`).
2. Open the file: the German text on the left must not be changed, enter your translation on the right. `{}` are placeholders for numbers/names and must stay in the same number and order. Empty entries are shown in German.
3. Set `"_name"` at the top to the name of the language, e.g. `"Français"`.
4. Save the file as **languagecode.json**, e.g. `fr.json`.
5. *Add language file (.json)* – or put the file into the `lang/` folder on the Pi. Custom files survive updates and take precedence over built-in ones.
**Translating this guide (optional):** put it into the `lang/` folder (or `docs/`) as `ANLEITUNG.fr.md` – it is then shown under *Help* when that language is active. Without a translation the German guide is shown.
Placeholders such as `{datum}` keep their names; English short forms exist (`{date}` …). Dates, weekdays and month names appear in the selected language. If you would like to share your translation, the project welcomes a pull request.
+142
View File
@@ -0,0 +1,142 @@
# LabelPi – Anleitung
## 1. Grundlagen
**Obere Leiste:** Drucker (nur sichtbar, wenn mehrere angeschlossen sind) · Rolle · Länge (nur bei Endlosrollen) · *gedreht* · Kopien · Dithering · Autoschnitt (nur bei Modellen mit Cutter) · **Drucken**.
- **Die gewählte Rolle muss zur eingelegten Rolle passen.** Die App fragt nach, wenn du die Rolle gegenüber dem letzten Druck wechselst.
- **gedreht:** Bei Endlosrollen wird die Länge waagerecht dargestellt und das Etikett beim Druck um 90° gedreht – so liest du es später wie am Bildschirm. Ohne Haken entspricht die Anzeige der Richtung quer zur Rolle.
- **Dithering:** Nur für Fotos/Graustufen sinnvoll (Rasterpunkte). Für Text, QR- und Barcodes **aus** lassen.
- **Schnittmarke** (nur Endlosrollen ohne Cutter): druckt eine gestrichelte Linie ans Etikettenende, damit du beim manuellen Abschneiden (z. B. QL-500) die richtige Stelle triffst.
**Bedienung im Designer**
- **Ansicht:** Standardmäßig sind nur die wichtigsten Funktionen sichtbar. Mit **Erweiterte Ansicht** (Leiste oben rechts) kommen Drehen, Dithering, Autoschnitt, Schnittmarke, Serie, Raster und Zoom dazu. Weitere Elemente (PDF, Formen, Symbole) findest du im Menü **+ Mehr …**, Speichern/Export unter **Datei ▾**.
- Element hinzufügen über die Werkzeugleiste, **antippen** = auswählen, **ziehen** = verschieben, **Ecke unten rechts** = Größe ändern.
- Die **Eigenschaften** stehen in der Leiste unten und bleiben immer sichtbar. Dort gibt es auch Buttons zum Ausrichten am Etikett (links, Mitte, rechts, oben, unten).
- Beim Verschieben **rasten** Elemente an Rand, Mitte und Kanten anderer Elemente ein (rosa Hilfslinien).
- **↶ / ↷** machen Schritte rückgängig bzw. stellen sie wieder her (die letzten 25).
## 2. Elemente
| Element | Hinweise |
|---|---|
| **Text** | Mehrzeilig möglich. *Auto-Größe* füllt die Box mit der größtmöglichen Schrift (Box-Höhe festlegen). |
| **Symbol** | Warn-, Gefahren-, Recycling-Zeichen u. a. – sind Text in einer Symbolschrift, also frei skalierbar. |
| **QR-Code** | Beliebiger Text oder Link; Platzhalter erlaubt. |
| **Barcode** | Typ wählen (siehe unten). Bei ungültigem Inhalt erscheint eine rote Warnung und es wird **nicht** gedruckt. |
| **Bild** | Foto/Logo vom Gerät. Für Fotos Dithering einschalten. |
| **PDF** | Seitengröße wählt die passende Rolle. Mehrseitige PDFs können als Serie gedruckt werden (eine Seite pro Etikett). |
| **Formen** | Kreis, Linie, Pfeil, Dreieck – gefüllt oder als Umriss, in 45°-Schritten drehbar (Eigenschaften → Drehung). |
| **Tabelle** | Siehe Abschnitt 3. |
**Barcode-Typen**
| Typ | Eingabe |
|---|---|
| Code 128 | Beliebige Zeichen (Buchstaben, Ziffern, Sonderzeichen) |
| EAN-13 | 12 Ziffern (Prüfziffer wird ergänzt) |
| EAN-8 | 7 Ziffern |
| Code 39 | Großbuchstaben, Ziffern, `- . $ / + %` und Leerzeichen |
| GS1-128 | Mit Klammern, z. B. `(01)09501101530003(17)271231(10)AB12` |
| Datamatrix | Beliebiger Text, quadratisch |
## 3. Tabellen
- **Zelle antippen** = Zelle auswählen (blau markiert). **Doppelklick bzw. doppelt antippen** = direkt in der Zelle tippen. *Enter* übernimmt, *Tab* springt zur nächsten Zelle, *Esc* bricht ab.
- In den Eigenschaften: Zeilen/Spalten hinzufügen oder entfernen, Schrift, Linienstärke, *1. Zeile fett*.
- **Rahmen der Tabelle:** alle Linien · nur außen · Zeilenlinien · keiner.
- **Rahmen einer einzelnen Zelle:** Zelle auswählen und *oben / unten / links / rechts* ankreuzen. Das geht zusätzlich zum Tabellenrahmen – mit „keiner (nur Zellrahmen)“ bekommen nur die markierten Zellen Linien (z. B. nur eine Unterstrichlinie).
- Zu lange Texte werden automatisch kleiner, damit sie in die Zelle passen.
- Alternativ lässt sich der Inhalt als Text bearbeiten: eine Zeile pro Tabellenzeile, Spalten mit `;` getrennt.
## 4. Platzhalter
Platzhalter funktionieren in **Text, QR-Code, Barcode und Tabellenzellen**.
| Platzhalter | Bedeutung | Beispiel |
|---|---|---|
| `{n}` | Zähler innerhalb der Serie | 1, 2, 3 … |
| `{n:5}` | Zähler, 5-stellig mit führenden Nullen | 00001 |
| `{gesamt}` | Anzahl der Etiketten der Serie | `{n}/{gesamt}` → 3/10 |
| `{lfd}`, `{lfd:5}` | **Fortlaufender Zähler, der sich merkt** (auf dem Pi gespeichert, auch nach Neustart/Gerätewechsel) | 1001, 1002 … |
| `{lfd.rechnung}` | Benannter Zähler, beliebig viele möglich | unabhängig von `{lfd}` |
| `{datum}` | heutiges Datum | 24.10.2026 |
| `{datum:JJJJ-MM-TT}` | Datum mit eigenem Format (`JJJJ` `JJ` `MM` `TT`) | 2026-10-24 |
| `{datum+30}` | Datum plus 30 Tage (auch `-7`; Einheiten `d` Tage, `w` Wochen, `m` Monate, `j` Jahre) | 23.11.2026 · `{datum+6m:MM/JJJJ}` → 04/2027 |
| `{zeit}`, `{zeit:HH:MM:SS}` | Uhrzeit | 14:35 |
| `{jahr}` `{monat}` `{tag}` | einzelne Datumsteile (auch mit Versatz, z. B. `{jahr+1j}`) | 2026 · 10 · 24 |
| `{kw}` | ISO-Kalenderwoche (z. B. `{kw+2w}` = Woche in zwei Wochen) | 43 |
| `{wochentag}` `{monatname}` | Name in der Sprache der Oberfläche | Samstag / Saturday |
| `{zufall:8}` | Zufallscode (hier 8 Zeichen, ohne leicht verwechselbare wie 0/O und 1/I); jedes Etikett einer Serie bekommt einen anderen | K7HT3QWZ |
| `{uuid}` | zufällige UUID | 3f2a9c1e-… |
| `{Spaltenname}` | Wert aus der CSV-Spalte (nur bei CSV-Serie) | `{Name}` |
**Englische Kurzformen:** `{date}` `{time}` `{year}` `{month}` `{day}` `{weekday}` `{cw}` `{random}` `{total}` `{seq}`.
**Filter** (mit `|` anhängen, auch kombinierbar): `{Name|gross}` GROSSBUCHSTABEN · `{Name|klein}` kleinbuchstaben · `{Name|titel}` Wortanfänge groß · `{n:8|luhn}` hängt eine Luhn-Prüfziffer an · `{n:12|gtin}` hängt die EAN/GTIN-Prüfziffer an.
**Hinweise**
- Datum und Uhrzeit kommen vom Gerät, mit dem du druckst. Unbekannte Platzhalter bleiben unverändert stehen.
- `{lfd}` reserviert die Nummern erst beim Drucken. Schlägt der Druck fehl, wird der Zähler zurückgesetzt (keine Lücken). Den nächsten Wert siehst du in der Vorschau und unter *Einstellungen → Zähler*, dort kannst du ihn auch ändern.
- Beispiele: `SN-{jahr}-{lfd:4}` → `SN-2026-0001` · `Haltbar bis {datum+30}` · `KW {kw}/{jahr}` · `{n:11|gtin}` als EAN-Inhalt.
## 5. Serien („Serie…“)
- **Zähler:** Start, Schritt und Anzahl festlegen. Beispiel: Start 100, Schritt 5, Anzahl 10 → 100, 105, …, 145.
- **CSV-Datei:** Erste Zeile = Spaltennamen, danach pro Zeile ein Etikett. Trennzeichen `;` oder `,`, Kodierung UTF-8.
```
Name;Artikel;Nummer
Müller;Schraube M4;1001
Schmidt;Mutter M4;1002
```
Im Designer dann `{Name}`, `{Artikel}`, `{Nummer}` verwenden.
- **PDF-Seiten:** entstehen beim Import eines mehrseitigen PDFs.
- **Kopien** gelten pro Etikett der Serie. Gedruckt wird in Blöcken; im Verlauf erscheint nur das erste Etikett der Serie.
- Die Vorschau zeigt zuerst das erste Etikett; mit **‹ ›** neben „Serie…“ blätterst du durch alle Etiketten der Serie.
## 6. Raster („Raster…“)
Nur bei Endlosrollen. Mehrere Etiketten nebeneinander und untereinander auf einem Streifen:
1. *Etikettenbreite* in mm festlegen (z. B. 28 mm bei einer 62-mm-Rolle für zwei Spalten).
2. *Spalten × Zeilen* und *Abstand* einstellen.
3. Beim Drucken füllen aufeinanderfolgende Etiketten (Kopien oder Serie) das Raster. Passt das Raster nicht auf die Rolle, erscheint eine Fehlermeldung.
## 7. Vorlagen, Verlauf, Export, Backup
- **Vorlagen:** Mit „Als Vorlage speichern“ ablegen, in **Ordnern** sortieren, bearbeiten (Name/Ordner) und exportieren.
- **Verlauf:** Jeder Druck und jedes „Speichern“ landet hier. *Nochmal drucken*, *Bearbeiten* oder per *Auswählen* mehrere löschen/exportieren.
- **Export/Import:** Etiketten und Vorlagen als JSON-Datei, z. B. zum Weitergeben. **⬇ PNG/PDF** exportiert das aktuelle Etikett als Bild bzw. PDF.
- **Backup:** *Einstellungen → Datenbank sichern* speichert alles (inkl. Drucker und Passwort), *Wiederherstellen* spielt es zurück.
## 8. Drucker und Sicherheit
- **USB-Drucker** werden automatisch erkannt. Mehrere gleiche Modelle werden über den USB-Port unterschieden.
- **Netzwerkdrucker** (LAN/WLAN): *Einstellungen → Netzwerkdrucker hinzufügen* (Name, IP, Modell).
- **Passwortschutz:** *Einstellungen → Passwortschutz*. Ohne Schutz kann jeder im Netzwerk drucken – nur in vertrauenswürdigen Netzen betreiben.
## 9. Eingabe-Modus, QR-Assistent
- **Eingabe-Modus:** Auf jeder Vorlage gibt es den Button **Eingabe**. Er zeigt nur ein kleines Formular mit einem Feld für jeden eigenen Platzhalter (z. B. `{Name}`, `{Raum}`), eine Vorschau und die Kopienzahl – ohne den Designer. Ideal für Kolleginnen und Kollegen, die nur drucken sollen.
- **QR-Assistent:** Beim QR-Code in den Eigenschaften auf *QR-Assistent…* klicken. Typen: Link, WLAN-Zugang, Kontakt (vCard), E-Mail, Telefon, SMS, Standort, Freitext. Du füllst nur die Felder aus, der Inhalt wird richtig aufgebaut. Platzhalter sind auch hier erlaubt.
## 9a. Tastenkürzel
| Taste | Aktion |
|---|---|
| `Entf` | Ausgewähltes Element löschen |
| `Strg+Z` | Rückgängig |
| `Strg+Y` oder `Strg+Shift+Z` | Wiederholen |
| `Enter` / `Tab` / `Esc` | In der Tabellenzelle: übernehmen / nächste Zelle / abbrechen |
## 10. Häufige Probleme
| Problem | Lösung |
|---|---|
| Etikett wird abgeschnitten oder falsch positioniert | Rolle im Programm gleich der eingelegten Rolle? „gedreht“ prüfen. |
| Barcode wird nicht gedruckt | Eingabe prüfen (z. B. EAN-13 braucht 12 Ziffern). |
| Text sieht auf dem Papier anders aus | Dithering aus; Schrift nicht zu klein (unter ca. 6 pt). |
| Seite nicht erreichbar | Pi und Gerät im gleichen Netz? Alternativ per IP statt `labelpi.local`. |
| Weitere Hilfe | `docs/INSTALL.md` (Installation, Fehlerbehebung) |
## 11. Sprachen
Die Oberfläche gibt es in Deutsch und Englisch. Oben rechts in der Leiste wählst du die Sprache; sie wird pro Gerät gemerkt (beim ersten Start gilt die Browsersprache).
**Neue Sprache hinzufügen**
1. *Einstellungen → Sprachen → Vorlage für neue Sprache herunterladen* (`neue-sprache.json`).
2. Datei öffnen: links steht der deutsche Text (nicht ändern), rechts trägst du die Übersetzung ein. `{}` sind Platzhalter für Zahlen/Namen und müssen in gleicher Anzahl und Reihenfolge erhalten bleiben. Leere Einträge werden auf Deutsch angezeigt.
3. Ganz oben `"_name"` auf den Namen der Sprache setzen, z. B. `"Français"`.
4. Datei als **Sprachcode.json** speichern, z. B. `fr.json`.
5. *Sprachdatei hinzufügen (.json)* – oder die Datei in den Ordner `lang/` auf dem Pi legen. Eigene Dateien überstehen Updates und haben Vorrang vor eingebauten.
**Anleitung übersetzen (optional):** Diese Anleitung als `ANLEITUNG.fr.md` im Ordner `lang/` (oder `docs/`) ablegen – sie erscheint dann unter *Hilfe*, wenn die Sprache aktiv ist. Ohne Übersetzung wird die deutsche Anleitung gezeigt.
Platzhalter wie `{datum}` behalten ihre Namen; für Englisch gibt es Kurzformen (`{date}` …). Datum, Wochentag und Monatsnamen erscheinen in der gewählten Sprache. Möchtest du deine Übersetzung teilen, freut sich das Projekt über einen Pull Request.
+83
View File
@@ -0,0 +1,83 @@
# LabelPi – Installationsanleitung (Raspberry Pi + Brother QL)
Kurzfassung und Funktionsübersicht: [README](../README.md). Beispiel hier: Raspberry Pi 2 B + QL-500.
## 0. Was du brauchst
- Raspberry Pi 2 B, Netzteil (5 V / 2 A), microSD (8 GB+)
- **USB-WLAN-Stick** (der Pi 2 B hat kein WLAN eingebaut; am besten ein 2,4-GHz-Stick, der unter Raspberry Pi OS ohne Zusatztreiber läuft, z. B. mit Realtek-/MediaTek-Chip)
- Brother QL-500 per USB, 62-mm-Rolle eingelegt
## 1. SD-Karte vorbereiten
1. **Raspberry Pi Imager** starten → Gerät: *Raspberry Pi 2* → OS: *Raspberry Pi OS (other) → Raspberry Pi OS Lite (32-bit)*.
2. Zahnrad / „Einstellungen bearbeiten“:
- Hostname: `labelpi`
- Benutzer + Passwort festlegen
- WLAN: SSID und Passwort deines **Hotspots** (ggf. zusätzlich dein Heim-WLAN), Land `DE`
- SSH aktivieren (Passwort oder Schlüssel)
- Zeitzone `Europe/Berlin`
3. Schreiben, SD in den Pi, WLAN-Stick einstecken, Strom an. Erster Start dauert 1–2 Minuten.
> Hotspot-Tipp (iPhone): *Einstellungen → Persönlicher Hotspot → „Kompatibilität maximieren“* einschalten, damit er 2,4 GHz nutzt. Der Hotspot muss beim Einschalten des Pi bereits aktiv sein.
## 2. Per SSH verbinden
```
ssh DEIN_BENUTZER@labelpi.local
```
Klappt `.local` nicht, die IP in den Geräteinfos des Hotspots nachsehen.
## 3. Dateien auf den Pi bringen
**Variante A (ein Befehl, empfohlen):** direkt auf dem Pi
```
curl -fsSL https://raw.githubusercontent.com/DEIN-USER/labelpi/main/install.sh | bash
```
Damit sind Schritt 3 und 4 erledigt, weiter mit Schritt 5.
**Variante B (manuell):**
Vom PC aus (Ordner `labelpi` aus dem ZIP entpackt):
```
scp -r labelpi DEIN_BENUTZER@labelpi.local:~
```
## 4. Installieren
```
cd ~/labelpi
bash install.sh
```
Das Skript installiert Python-Pakete in einer venv, legt die USB-Rechte für Brother-Drucker an und richtet den Dienst `labelpi` ein (startet automatisch beim Booten, Port 80). Die Installation dauert auf dem Pi 2 einige Minuten.
## 5. Drucker prüfen
QL-500 einschalten, dann:
```
lsusb | grep 04f9 # sollte "Brother Industries" zeigen
sudo systemctl status labelpi
```
Falls der Drucker nicht erkannt wird: einmal aus- und wieder einschalten bzw. `sudo reboot`.
## 6. Benutzen
Im Browser (PC, iPad, iPhone, gleiches Netz/Hotspot): **http://labelpi.local**
- Grüner Punkt oben = Drucker gefunden.
- iPhone/iPad: Teilen → „Zum Home-Bildschirm“ für ein App-Symbol.
- Modelle mit Autoschnitt zeigen oben die Option „Autoschnitt“. Der QL-500 schneidet **nicht** automatisch: nach dem Druck Etikett am Cutter manuell abtrennen. Bei mehreren Kopien kommen die Etiketten hintereinander raus.
- Die Schrift wird auf dem jeweiligen Gerät gerendert (WYSIWYG: gedruckt wird, was du siehst). Auf iPad/PC können Schriftarten leicht abweichen.
Oben rechts gibt es Buttons zum **Neustarten** und **Herunterfahren** des Pi. Nach dem Herunterfahren erst Strom trennen, wenn die grüne LED nicht mehr blinkt.
## 7. Wartung
- Logs: `journalctl -u labelpi -f`
- Neustart: `sudo systemctl restart labelpi`
- **Backup:** Vorlagen und Verlauf liegen in `~/labelpi/labels.db` (einfach kopieren).
- Weiteres WLAN hinzufügen: `sudo nmcli device wifi connect "SSID" password "PASSWORT"`
- Update: neue Dateien drüberkopieren, dann `sudo systemctl restart labelpi`.
## 8. Fehlerbehebung
| Problem | Lösung |
|---|---|
| `ImportError: libopenjp2.so.7` (Dienst startet nicht) | `bash install.sh` erneut ausführen (installiert die fehlenden Bibliotheken), Prüfen mit `journalctl -u labelpi -n 30` |
| „Drucker nicht gefunden“ | Strom/USB prüfen, `lsusb`, Dienst neu starten |
| „Resource busy“ / „Access denied“ | `echo 'blacklist usblp' \| sudo tee /etc/modprobe.d/blacklist-usblp.conf`, dann `sudo reboot` |
| Fehler zur Rollen-/Etikettengröße | Im Designer dieselbe Rolle wählen wie im Drucker eingelegt (QL-500 erkennt sie nicht selbst) |
| WLAN-Stick verbindet nicht mit Hotspot | `nmcli device wifi list` (sieht der Stick das Netz?), WLAN-Land `DE` setzen (`sudo raspi-config`), Hotspot auf **2,4 GHz** und **WPA2** stellen (viele Sticks können kein 5 GHz/WPA3) |
| Seite nicht erreichbar | Hotspot aktiv? Gleiches Netz? Alternativ per IP statt `labelpi.local` |
## 9. Sicherheit
Optional: Passwortschutz unter *Einstellungen*. Ohne Passwort gibt es **keinen Login**. Nutze die Seite nur im eigenen Hotspot/Heimnetz mit starkem WLAN-Passwort, nicht im Firmen-WLAN.