Druckserver¶
Andere Programme und KI-Assistenten können über Tavletta Etiketten drucken,
ohne das Fenster zu öffnen: tavletta serve bietet eine Web-Schnittstelle
für Programme (REST API), tavletta mcp verbindet KI-Assistenten wie
Claude.
- Den Server für eine Firma einrichten, mit Docker oder systemd, HTTPS und Schriften: Serverinstallation.
- Jede Anfrage und jeder Fehlercode: API-Referenz.
- Eine Anleitung für Programme, mit Code in Python und C#: Ein Inventarprogramm anbinden.
Starten¶
tavletta serve --labels-dir ~/Labels
- Der Server lauscht auf
http://127.0.0.1:8790, nur auf diesem Computer. - Nur Etikettendateien im Etikettenordner (und seinen Unterordnern) können
verwendet werden, mit ihren Datendateien. Ohne
--labels-dir:~/.local/share/tavletta/labels. - Druckeradresse, Sicherheitsabstand und Druckeinstellungen sind die in der App eingestellten.
--mcpfügt die Verbindung für KI-Assistenten unter/mcphinzu.- Beenden mit Ctrl+C: Wartende Aufträge werden abgebrochen, ein Etikett, das gerade gedruckt wird, wird fertig gedruckt und der Zähler gespeichert.
Drucker¶
- Die Drucker in einer Datei
printers.tomlbenennen und den Server mit--printers printers.tomlstarten. Programme wählen einen Drucker dann über seinen Namen; andere Drucker lassen sich nicht verwenden.
[printers.shipping]
backend = "cab"
host = "cab-shipping.example.com"
description = "Shipping labels"
location = "Warehouse, gate 2"
default = true
max_copies = 200
backendist das Druckermodell,hostdie Adresse des Druckers.- Die Einstellungen des Druckers, wie in den Druckereinstellungen der App, kommen in eine eigene Tabelle; nur die, die das Modell hat:
[printers.inventory]
backend = "cab"
host = "cab-it.example.com"
[printers.inventory.settings]
method = "transfer"
upside_down = true
methodist die Druckverfahren (printer,transfer,direct),upside_downKopfüber drucken; weitere sindquality,chain,high_res,feed_mm,darkness,mediaundoutlines, siehe docs/server.md.- Fehler in der Datei werden beim Start des Servers genannt.
- Die Druckerliste zeigt jeden Drucker mit seinem Zustand.
- Der Server sucht nur dann im Netzwerk nach Druckern, wenn er mit
--discovergestartet wird.
Zugangstoken¶
- Ein Token erstellen und geheim halten:
mkdir -p ~/.config/tavletta
openssl rand -hex 32 > ~/.config/tavletta/token
chmod 600 ~/.config/tavletta/token
tavletta serve --token-file ~/.config/tavletta/token
- Jede Anfrage braucht dann den Header
Authorization: Bearer <token>. - Um auf einer anderen Adresse zu lauschen (
--host 0.0.0.0), ist ein Token nötig. Für andere Computer einen Reverse Proxy mit HTTPS davorschalten. --allow-printerbeschränkt die Druckeradressen, zum Beispiel--allow-printer '*.local'.
Zugang pro Gerät¶
- Mehrere Geräte oder Personen bekommen je ein Token mit einer Rolle:
tavletta token new shipping-pc --role print --tokens ~/.config/tavletta/tokens.toml
tavletta serve --printers printers.toml --tokens ~/.config/tavletta/tokens.toml
- Das Token wird nur einmal gezeigt; die Datei speichert nur einen Fingerabdruck (Hash) davon.
previewlistet nur auf und zeigt Vorschauen,printdruckt auch und verfolgt seine eigenen Aufträge,adminsieht alle Aufträge und kann sie abbrechen.--printer shippingbeschränkt ein Token auf diesen Drucker,--expires 2027-12-31auf ein Datum.- Um ein Token zurückzuziehen, seinen Eintrag in
tokens.tomllöschen. Der Server bemerkt das sofort.
Programme (REST API)¶
- Die Beschreibung aller Anfragen: die API-Referenz, und für
Programme
http://127.0.0.1:8790/api/v1/openapi.json(OpenAPI 3.1, mit jedem gültigen Token). GET /api/v1/labelslistet die Etiketten auf,GET /api/v1/labels/<name>zeigt, was sich ausfüllen lässt: Elementnamen, Variablen und Spalten.POST /api/v1/previewgibt das Etikett als PNG-Bild zurück.POST /api/v1/printstellt einen Druckauftrag in die Warteschlange;GET /api/v1/jobs/<id>zeigt seinen Stand,DELETEbricht ihn zwischen zwei Etiketten ab.- Jeder Drucker druckt einen Auftrag nach dem anderen.
- Meldungen kommen in der Sprache des Headers
Accept-Language. - Ohne Zugangstoken brauchen Anfragen, die Drucker abfragen, den Header
X-Tavletta-Request: 1, damit keine Webseite sie senden kann.
curl -H "Authorization: Bearer $(cat ~/.config/tavletta/token)" \
-H 'Content-Type: application/json' \
-d '{"label": "serial", "data_rows": [{"Code": "B-07-1", "Name": "Tea", "Shelf": "B-07", "Box": "1"}], "copies": 2}' \
http://127.0.0.1:8790/api/v1/print
setfüllt Elemente über ihren Namen und Variablen wie{=lot}aus, wie auf der Kommandozeile.- Serienetiketten:
"data_rows", ein Objekt pro Etikett mit jeder Spalte, die das Etikett verwendet ([{"Name": "Tea", …}, {"Name": "Rice", …}]), oder"data_file"mit einer Tabelle im Etikettenordner. - Ein Etikett aus einem anderen Programm, zum Beispiel einem Inventar: die Felder als eine Datenzeile, der Drucker mit seinem Namen.
curl -H "Authorization: Bearer $(cat ~/.config/tavletta/token)" \
-H 'Content-Type: application/json' \
-d '{"label": "asset-tag", "printer": "it-cab", "copies": 1,
"data_rows": [{"AssetNumber": "100001"}]}' \
http://127.0.0.1:8790/api/v1/print
-
Die ganze Anleitung, mit Serien, Wiederholungen und Code in Python und C#: Ein Inventarprogramm anbinden.
-
{=counter}: Der Server speichert die nächste Nummer in der Etikettendatei. Ein Programm, das seine eigenen Nummern führt, schickt die Nummer in der Datenzeile oder als"counter_start"mit"no_save_counter": true.
KI-Assistenten (MCP)¶
Der Assistent kann die Etiketten und Drucker auflisten, eine Vorschau zeigen, drucken und Druckaufträge verfolgen oder abbrechen. Je nach seinen Einstellungen fragt er, bevor er ein Werkzeug verwendet.
Claude Code:
claude mcp add tavletta -- tavletta mcp --labels-dir ~/Labels
Claude Desktop, in claude_desktop_config.json:
{
"mcpServers": {
"tavletta": {
"command": "tavletta",
"args": ["mcp", "--labels-dir", "/home/me/Labels"]
}
}
}
- Über das Netzwerk:
tavletta serve --mcpund die Adressehttp://127.0.0.1:8790/mcpmit dem Zugangstoken als HeaderAuthorization: Bearer. - Drucken verbraucht echte Etiketten: zuerst nach einer Vorschau fragen.
Server und Container¶
- Auf einem Server für eine Firma: Serverinstallation,
mit Docker Compose (
packaging/docker/compose.yaml) oder als Systemdienst (packaging/systemd/tavletta-server.service). - Als Dienst Ihres Benutzers auf einem Desktop:
packaging/systemd/tavletta.service(Anleitung in der Datei). - Technische Details und Sicherheit: docs/server.md.
Container-Image¶
Der Druckserver wird als Container-Image für amd64 und arm64 veröffentlicht (auch für einen Raspberry Pi mit 64-Bit-System):
docker pull ghcr.io/joshii-h/tavletta:1.1.0
1.1.0ist eine Version,1.1die neueste Fehlerbehebungsversion von 1.1,latestdie neueste Version.edgeist der Stand der Entwicklung, keine Version.packaging/docker/compose.yamlverwendet das veröffentlichte Image:docker compose pull, danndocker compose up -d.- Um das Image stattdessen selbst zu bauen,
compose.build.yamlhinzufügen:docker compose -f compose.yaml -f compose.build.yaml up -d --build. - Das Image läuft ohne Root-Rechte und meldet Docker seinen Zustand
(
HEALTHCHECK). - Prüfen, dass ein Image aus dem Repository von Tavletta gebaut wurde, mit der GitHub CLI oder cosign:
gh attestation verify oci://ghcr.io/joshii-h/tavletta:1.1.0 --repo joshii-h/tavletta
cosign verify ghcr.io/joshii-h/tavletta:1.1.0 \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-identity-regexp '^https://github\.com/joshii-h/tavletta/\.github/workflows/docker\.yml@refs/tags/v'