Zum Inhalt springen

Odoo PDF-Druck über Raspberry Pi und CUPS

Lieferscheine direkt am Arbeitsplatz drucken, ohne Odoo IoT, ohne zentrale Drucker-Infrastruktur und ohne komplizierte Middleware. Odoo erzeugt den PDF-Lieferschein, der Browser sendet ihn lokal an den Raspberry Pi und ein Print-Agent druckt ihn über CUPS auf dem Standarddrucker. Wie genau das funktioniert, erfährst du in diesem Blogbeitrag.
27. April 2026 durch
Odoo PDF-Druck über Raspberry Pi und CUPS
Nathanael Lee
| Noch keine Kommentare

Wenn du PDF-Dokumente wie zum Beispiel einen Lieferschein direkt aus Odoo drucken willst, gibt es normalerweise zwei Wege. Entweder druckst du das PDF über Odoo IoT (IoT Box oder Windows IoT), oder du generierst es manuell und schickst es über deinen Computer an einen Drucker.

Wenn das PDF aber nicht im Büro, sondern direkt in der Produktion oder Logistik gedruckt werden soll, gibt es eine deutlich einfachere Lösung: Ein Raspberry Pi mit Touchscreen steht direkt am Arbeitsplatz und führt Odoo im Browser aus. Zusätzlich läuft auf dem Pi ein kleiner lokaler Python-Dienst, der PDF-Dateien entgegennimmt und über CUPS an den Standarddrucker weitergibt.

In Odoo Shop Floor (oder an beliebigen anderen Kontrollpunkten) gibt es einen Quality Check vom Typ Print PDF. Wenn der Mitarbeiter diesen Schritt bestätigt, wird er zuerst informiert, dass die zugehörigen Lieferungen validiert werden. Danach validiert Odoo die offenen Lieferungen des Verkaufsauftrags, generiert den Lieferschein als PDF und sendet dieses PDF lokal an den Raspberry Pi. Der Pi druckt es über CUPS auf dem konfigurierten Standarddrucker.

Das Ziel war wie immer KISS: so wenig Code wie möglich, keine unnötigen Komponenten und eine Architektur, die man auch nach Monaten noch versteht.

Bild: Odoo Shop Floor Terminal eines Kunden druckt direkt über Shop Floor per WLAN auf einen EPSON Drucker.

Architektur für Odoo PDF-Druck über CUPS

Die Architektur ist sehr ähnlich wie beim ZPL Labeldruck, aber diesmal geht es nicht um Rohdaten für einen Zebra-Drucker, sondern um normale PDF-Dokumente. Genau dafür ist CUPS (Common Unix Printing System) ideal. CUPS ist ein Drucksystem bzw. Druckserver, der unter Linux läuft. Es erkennt Drucker im lokalen Netzwerk (LAN / WLAN), stellt Treiber für viele Drucker zur Verfügung und verwaltet die Druckprozesse.

Der konkrete Druck-Ablauf ist einfach: Der Mitarbeiter arbeitet im Shop Floor auf dem Raspberry Pi. Im Arbeitsauftrag kommt ein Qualitätskontrollpunkt vom Typ Print PDF. Beim Klick öffnet sich ein Bestätigungsfenster. Dort steht klar, dass alle offenen Lieferungen zum Verkaufsauftrag validiert und anschliessend die Lieferscheine gedruckt werden.

Nach der Bestätigung macht Odoo drei Dinge: Es sucht den Fertigungsauftrag, darüber den zugehörigen Verkaufsauftrag und darüber alle relevanten Lieferungen. Danach werden die Lieferungen validiert und der Standard-Lieferschein von Odoo als PDF gerendert. Dieses PDF wird dann vom Browser direkt an 127.0.0.1 auf dem Raspberry Pi gesendet.

Wichtig ist hier wieder das Wort lokal. Der CUPS-Agent läuft nur auf dem Raspberry Pi selbst. Odoo läuft auf Odoo.sh und muss den Drucker nicht kennen. Der Drucker muss nicht von Odoo aus erreichbar sein. Der Browser auf dem Pi ist die Brücke zwischen Odoo und dem lokalen Print-Agent.

Dadurch bleibt die Lösung klein und gut kontrollierbar. Odoo rendert das Dokument, der Pi druckt es. Mehr braucht es für diesen Use-Case nicht.

Warum du für A4-PDF-Druck CUPS benötigst

Bei ZPL Labels ist ein direkter Raw-Print an den Drucker oft die einfachste Lösung. Der Zebra-Drucker versteht ZPL direkt. Odoo erzeugt den ZPL-Code, der Raspberry Pi schickt ihn an den Drucker, fertig. Es werden keine Treiber benötigt.

Bei normalen A4-Dokumenten ist das anders. Ein PDF ist kein einfacher Druckerbefehl. Der Drucker muss das Dokument richtig verarbeiten können: Seitenformat, Skalierung, Ränder, Auflösung und Treiber. Genau hier kommt CUPS (Common Unix Printing System) ins Spiel. CUPS ist unter Linux der Standard für Drucker und übernimmt genau diese Aufgabe.

Der zweite Punkt ist die Druckerkonfiguration. A4-Drucker hängen oft nicht direkt per USB am Terminal, sondern irgendwo im Netzwerk. CUPS kann Netzwerkdrucker suchen, verbinden und als Standarddrucker festlegen.

Der dritte Punkt ist die dezentrale Architektur. Labelprinter stehen meistens direkt am Arbeitsplatz. A4-Drucker stehen aber oft zentral im Büro, im Versand oder in einem anderen Bereich. Deshalb ist die Lösung über CUPS einfacher, da per LAN oder WLAN und nicht nur per USB gedruckt werden kann.

CUPS hat ein intuitives Web-Interface, über das Drucker gesucht und hinzugefügt werden können. Nachfolgend findest du ein Bild der CUPS-Konfigurationsseite auf dem Odoo Shop Floor Terminal.

So sieht die Odoo-Seite aus

Auf der Odoo-Seite gibt es ein kleines Custom-Modul. Dieses Modul fügt einen neuen Quality-Check-Typ hinzu: Print PDF. Für den Mitarbeiter sieht das sehr einfach aus. Er sieht im Shop Floor den Schritt und klickt auf Print Delivery Slip.

Danach erscheint ein Popup. Das ist wichtig, weil beim Drucken nicht nur ein PDF erzeugt wird. Die zugehörigen Lieferungen werden auch validiert. Der Mitarbeiter soll also bewusst bestätigen, dass dieser Schritt jetzt ausgeführt wird.

Nach der Bestätigung validiert Odoo die offenen Lieferungen und rendert den Standard-Lieferschein. Erst danach wird das PDF an den lokalen CUPS-Agent gesendet. Wenn der Druck erfolgreich angenommen wurde, wird der Quality Check abgeschlossen.

So bleibt der Ablauf kontrolliert. Der Mitarbeiter kann nicht einfach weiterklicken, ohne dass der Druckprozess zumindest gestartet wurde.

Was auf dem Raspberry Pi läuft

Der Raspberry Pi bleibt weiterhin ein normales Pi-Terminal. Er startet direkt in Chromium im Kiosk-Modus und öffnet Odoo Shop Floor. Über den GPIO-Button kann bei Bedarf die Konfigurationsseite für die CUPS-Druckerkonfiguration, die Autostart-URL-Konfiguration und die WLAN-Konfiguration geöffnet werden.

Das CUPS-Modul ist bewusst separat. Der Basis-Teil pi-terminal bleibt generisch. Der Zusatz pi-terminal-cups ist ein eigenes Repository und ergänzt nur die Druckfunktion. Das macht die Struktur sauberer: Ein Kunde ohne PDF-Druck braucht den CUPS-Teil nicht. Ein Kunde mit PDF-Druck installiert ihn zusätzlich.

Der lokale CUPS-Agent hat nur eine Aufgabe: PDF entgegennehmen und an CUPS weitergeben. Kein Datenbankzugriff, keine Odoo-Logik, keine komplizierte Konfiguration. Der Endpunkt läuft auf localhost. Von aussen ist er nicht erreichbar.

Auch hier gilt: möglichst wenig Angriffsfläche, möglichst wenig Code, möglichst wenig Dinge, die kaputtgehen können.

Warum ich diese Lösung mag

Der grösste Vorteil ist wieder die Einfachheit.

  • Kein Odoo IoT Abo für diesen konkreten Use-Case
  • Keine Druckerfreigabe vom Odoo Server ins lokale Netzwerk
  • Keine komplizierte Print-Middleware
  • CUPS übernimmt den PDF-Druck auf dem Raspberry Pi
  • Odoo bleibt verantwortlich für Geschäftslogik und Dokumentenerzeugung
  • Der lokale Print-Agent ist nur auf 127.0.0.1 erreichbar

Für mich ist das eine gute Trennung der Verantwortlichkeiten. Odoo weiss, welche Lieferung validiert und welcher Lieferschein gedruckt werden soll. Der Raspberry Pi weiss, welcher Drucker lokal als Standarddrucker eingerichtet ist. Beide Seiten machen genau ihren Teil und nicht mehr.

In den nächsten Beiträgen werde ich noch weitere Raspberry Pi Use-Cases mit Odoo zeigen. Wenn du so etwas für deine Produktion brauchst, kontaktiere mich gerne oder schreibe einen Kommentar.

Nate

Danke für die Registrierung!



Anmelden , um einen Kommentar zu hinterlassen