Aviation Helper

26. Boarding-Pass-Druck

Hinweis zur Lizenz: Der Boarding-Pass-Druck ist ein zubuchbares Modul. Ist es für deinen Klub nicht freigeschaltet, erscheinen weder die Druckgeräte-Verwaltung noch der Druck-Knopf bei den Gutscheinen.

Gutscheine lassen sich als echte Boarding-Pässe auf einem Ticketdrucker ausgeben. Der Drucker steht dabei nicht im Rechenzentrum, sondern bei dir zu Hause oder am Flugplatz: ein kleiner Rechner (Raspberry Pi) holt die Druckaufträge beim AviationHelper ab und gibt sie an den angeschlossenen Drucker weiter. Dadurch braucht dein Netzwerk keine offenen Zugänge von aussen.

Druckgerät registrieren

Ein Druckgerät legt der Klub-Eigentümer in den Klub-Einstellungen im Schritt Druckgeräte an:

  1. Gerät registrieren wählen und einen Namen vergeben (zum Beispiel «Raspberry Pi Hangar»).
  2. Der Zugangsschlüssel erscheint danach genau einmal. Er lässt sich später nicht mehr anzeigen - der AviationHelper speichert nur seinen Fingerabdruck. Kopiere ihn oder lade gleich die Datei agent-config.json herunter; sie enthält Adresse und Schlüssel bereits fertig; unter printers steht nichts, denn einen Zebra am USB erkennt der Pi selbst.
  3. Lade mit Pi-Image herunterladen (direkt unter dem Schlüssel) das fertige SD-Karten-Image und schreibe es mit dem Raspberry Pi Imager auf die Karte - nur schreiben, seine OS-Anpassung bietet der Imager für eigene Images nicht an. Die Angaben, die du dort machen würdest, erzeugt stattdessen das Formular Startdatei für die SD-Karte direkt unter der Registrierung: Pi-Passwort, bei Bedarf WLAN (Name, Passwort, Ländercode) und Hostname. agent-config.json mit diesen Einstellungen herunterladen liefert eine einzige Datei - die agent-config.json dieses Geräts, ergänzt um diese Einstellungen (das Passwort nur als Hash). Das Image stellt der Betreiber im AviationHelper bereit - erscheint der Knopf grau, ist noch keines veröffentlicht.
  4. Die heruntergeladene agent-config.json kommt auf die Boot-Partition der Karte - das ist die kleine Partition, die jeder Rechner lesen kann; die dort vorhandene Datei ersetzen. Unter printers steht nichts - ein Zebra am USB braucht keinen Eintrag, den erkennt der Pi selbst. Nur für einen Bürodrucker (Name seiner Druckerwarteschlange), einen Zebra im Netzwerk oder einen IER kopierst du den passenden Eintrag aus dem Block _beispiele derselben Datei nach printers und passt ihn an; _beispiele selbst liest der Pi nicht. Dann den Pi einschalten: er richtet Passwort, WLAN und Namen selbst ein - ohne Tastatur und Bildschirm - und meldet sich nach zwei bis drei Minuten beim AviationHelper. Was eingerichtet wurde und welche Adresse der Pi hat, steht danach in der Datei agent-setup-status.txt auf der Karte (Karte kurz in den Rechner stecken). Die Druckerverwaltung für den Bürodrucker erreichst du unter http://aviationhelper-agent.local:631 mit dem Benutzer pi und dem Passwort aus dem Formular.
  5. Kein Raspberry Pi zur Hand? Mit ZIP für Laptop/PC bekommst du den Agenten samt fertiger Konfiguration für einen Laptop oder PC mit Java 21 - entpacken, start.sh (macOS/Linux) bzw. start.cmd (Windows) starten, fertig. Der Rechner muss laufen, solange gedruckt werden soll.

Pi_Boot_Files_Image

In der Liste steht danach, ob sich das Gerät gemeldet hat und welche Drucker es anbietet. Geht ein Schlüssel verloren oder soll er nicht mehr gelten, entfernst du das Gerät und registrierst es neu. Der Agent meldet nur Drucker, die es auf dem Gerät wirklich gibt. Erscheint eine neue Version des Agenten, holt er sie sich beim nächsten Abruf selbst - in der Liste steht dann kurz «Aktualisierung folgt».

Ticketdrucker anschliessen (Zebra)

Ein Zebra-Etikettendrucker (ZD220 und Verwandte) wird per USB an den Pi gesteckt - mehr nicht. Der Pi erkennt ihn selbst und meldet ihn innert einer halben Minute als «Zebra … (USB)»; in der agent-config.json steht dafür nichts. Nur ein Zebra im Netzwerk braucht einen Eintrag mit Adresse und Port 9100 (Muster im Block _beispiele derselben Datei). Es braucht weder eine Druckerwarteschlange noch einen Treiber: der AviationHelper schickt das fertige Ticket als Grafik direkt an den Drucker, und alles, was der Drucker wissen muss, reist im Auftrag mit. Voraussetzung ist ein Agent ab Version 1.2.1 - die Version steht auf der Gerätekarte hinter «Online», und ist der Agent zu alt, sagt die Karte das und was zu tun ist.

Print_Devices_Zebra_Image

Drei Schritte, einmalig:

  1. Rolle einlegen und die Papierführung anlegen; den Sensor über die schwarze Marke bzw. das Loch der Tickets schieben (Anleitung des Druckers).
  2. Ticketpapier wählen: In den Klub-Einstellungen unter Druckgeräte erscheint der zugeklappte Bereich Ticketpapier, sobald ein Ticketdrucker gemeldet ist; seine Kopfzeile zeigt die aktuelle Einstellung, zum Ändern klappst du ihn auf. Wähle, wie der Drucker den Ticketanfang findet - schwarze Marke auf der Rückseite (das übliche ATB-Papier), Lücke oder Loch zwischen den Tickets, oder Endlosrolle - und stelle Schwärzung und Geschwindigkeit ein. Kommt das Ticket kopfüber heraus, weil das Papier andersherum eingelegt ist, schaltest du um 180° gedreht drucken ein. Darunter stehen die Ticketgrösse (Breite und Länge in Millimetern; leer heisst: die Grösse aus der Vorlage, bei ATB-Tickets 82.5 × 203.2 mm - der Ausdruck wird in die eingetragene Grösse eingepasst), Druckbeginn verschieben (der ganze Ausdruck rückt um so viele Millimeter nach hinten oder, mit Minus, nach vorne) und die Abrisskante (wie weit der Drucker das Ticket nach dem Druck herausschiebt, damit es sich an der Kante abreissen lässt). Dass der Drucker das Ticket vor dem Druck ein Stück zurückzieht, ist normal: er holt den Anfang wieder unter den Druckkopf, nachdem er ihn zum Abreissen vorgeschoben hatte. Die Einstellung gilt für alle Ticketdrucker des Klubs und reist mit jedem Auftrag mit.
  3. Kalibrieren und Testdruck in der Druckerzeile des Geräts: beim Kalibrieren schiebt der Drucker zwei, drei Tickets durch, bis er die Marke findet; der Testdruck druckt die Standard-Vorlage mit Beispieldaten über genau denselben Weg wie ein echter Gutschein. Beides taucht in der Warteschlange unter Druckaufträge auf.

Jede Druckerzeile zeigt ausserdem den Zustand des Geräts, wie es ihn dem Pi nach jedem Auftrag meldet: bereit, kein Papier, Deckel offen, Pause oder nicht erreichbar. Ein Zebra ohne Papier nimmt den Auftrag trotzdem an und druckt, sobald wieder Papier da ist - der Auftrag gilt dann als gedruckt, die Druckerzeile zeigt «Kein Papier».

Wenn der Zebra rot ist oder nicht erscheint: Ein Drucker verschwindet nie einfach - ist er eingesteckt, aber nicht benutzbar, steht er mit rotem Zustand und dem Grund in der Zeile: «Kein Gerätezugang» (aus- und wieder einstecken, sonst den Pi neu starten), «Keine Berechtigung» (der Agent darf das USB-Gerät nicht öffnen - Hinweis in der Zeile), «Falsche Druckersprache» (der Drucker steht auf EPL statt ZPL - mit den Zebra Setup Utilities umstellen) oder «Nicht erreichbar» (ein eingetragener Drucker, dessen Adresse oder Warteschlange nicht stimmt). Erscheint gar kein Drucker, obwohl das Gerät online ist, fehlt Strom oder Kabel - oder der Agent ist zu alt (siehe oben). Für einen Drucker in einem solchen Zustand nimmt der AviationHelper keinen Auftrag an, sondern nennt den Grund.

Aktualisierung des Agenten: Aktiviert der Betreiber im Admin-Bereich eine neue Agent-Version, holt sie sich jedes Gerät beim nächsten Abruf selbst; die Gerätekarte zeigt «Update läuft», danach die neue Version. Geht etwas schief, steht es ebenfalls dort: «Update fehlgeschlagen» mit dem Grund (der Agent versucht es alle 30 Minuten erneut) oder «Update zurückgenommen», wenn die neue Version nicht startete und der Pi zur alten zurückgekehrt ist - dann muss der Betreiber eine andere Version aktivieren.

Zebra über CUPS: Wer den Zebra bisher als Druckerwarteschlange auf dem Pi eingerichtet hat, kann diesen Weg weiter nutzen; er erscheint dann zusätzlich als eigener Drucker. Für den direkten Weg darf keine Warteschlange auf denselben Zebra drucken, solange der AviationHelper druckt - am einfachsten ist es, die Warteschlange zu entfernen.

Einen Gutschein drucken

Bei jedem Gutschein steht in der Aktionsspalte ein Drucker-Symbol. Es fehlt, wenn das Modul für deinen Klub nicht freigeschaltet ist. Ohne aktives Druckgerät bleibt davon nur die PDF-Vorschau; Rechnung und Gutschein-PDF brauchen den Bürodrucker. Ein Klick öffnet ein kleines Menü mit den Druckmöglichkeiten; Boarding-Pass drucken öffnet den Druck-Dialog:

  • Oben wählst du den Drucker, falls mehrere angeschlossen sind.
  • Zuoberst in dieser Liste steht PDF – Vorschau im AviationHelper: statt zu drucken, zeigt der AviationHelper das fertige Ticket als PDF an – zum Prüfen, ob ein langer Name ins Feld passt, und zum Herunterladen. Das spart Papier und braucht keinen laufenden Drucker; bei einer ATB-Vorlage erscheinen statt des PDFs die Druckerbefehle als Text.
  • Darunter erscheinen die Angaben, die auf dem Ticket stehen, aber nicht im Gutschein hinterlegt sind - zum Beispiel die Dauer oder ein Zusatz wie «Pizza in Locarno». Sie sind mit sinnvollen Werten vorbelegt und lassen sich pro Ausdruck anpassen.
  • Unten unter Auf dem Bürodrucker mitdrucken kreuzt du die Rechnung (und bei Bedarf das Gutschein-PDF im A4-Format) an - sie geht als eigener Auftrag an den Bürodrucker. Hat der Klub dafür einen Standard-Drucker gesetzt, ist die Rechnung bereits angekreuzt: Ticket und Rechnung sind dann ein Klick.

Alles Übrige übernimmt der AviationHelper automatisch aus dem Gutschein: die Gutschein-Nummer, den Namen der beschenkten Person, die Gültigkeit und das Klub-Logo. Die Gutschein-Nummer lässt sich im Dialog bewusst nicht ändern.

Mit In die Druck-Warteschlange wird der Auftrag eingereiht. Läuft der Rechner am Drucker gerade, holt er ihn innert weniger Sekunden ab; ist er ausgeschaltet, wartet der Auftrag, bis er wieder da ist.

Druckstatus

Das Drucker-Symbol beim Gutschein färbt sich nach dem letzten Auftrag - bei mehreren Aufträgen zählt der dringlichste (Fehler vor wartend vor gedruckt); im Menü zeigt jede Druckmöglichkeit ihren eigenen Stand:

  • blau - der Auftrag wartet oder ist gerade unterwegs
  • grün - gedruckt, mit Zeitpunkt im Tooltip
  • rot - der Druck ist fehlgeschlagen; der Tooltip nennt den Grund

Erneut drucken ist jederzeit möglich - einfach den Eintrag im Menü nochmals wählen.

Was «gedruckt» genau heisst: Der Rechner meldet Erfolg, sobald der Drucker den Auftrag angenommen hat. Bei einem direkt angeschlossenen Zebra fragt er danach den Zustand ab und zeigt ihn in der Druckerzeile der Klub-Einstellungen - etwa «Kein Papier» oder «Deckel offen». Bei einem Drucker über die Druckerwarteschlange des Rechners (Bürodrucker) hält das Betriebssystem den Auftrag zurück, bis der Drucker wieder bereit ist. Kommt kein Ticket heraus, obwohl der Status grün ist, lohnt sich also der Blick auf den Drucker selbst.

Rechnung und Gutschein-PDF auf dem Bürodrucker

Der Rechner am Ticketdrucker kann auch einen normalen Drucker bedienen - zum Beispiel den Laserdrucker im Büro. Damit druckst du unterwegs nicht nur das Ticket, sondern gleich die Rechnung zum Gutschein mit, und verpackst am Abend alles zusammen.

Die Rechnung wird dabei nicht neu erzeugt: Es ist genau das PDF, das der AviationHelper beim Speichern eines Gutscheins mit angekreuzter Rechnung anlegt. Dasselbe gilt für das Gutschein-PDF im A4-Format. Beides lässt sich auch einzeln drucken - über Rechnung / Gutschein-PDF auf dem Bürodrucker im Druck-Menü des Gutscheins. Der Eintrag ist ausgegraut, wenn zum Gutschein weder Rechnung noch PDF vorliegt, und zeigt darunter den Stand des letzten Auftrags.

Standard-Drucker legst du in den Klub-Einstellungen im Schritt Druckgeräte fest: einen für Boarding-Pässe, einen als Bürodrucker. Beide sind im Druck-Dialog vorausgewählt - vom Handy aus bleibt der Druck damit ein Klick. Ein Ticket- oder ATB-Drucker lässt sich nicht als Bürodrucker wählen; ein A4-Dokument gehört dort nicht hin.

Automatisch drucken: Mit dem Schalter Rechnung automatisch drucken stellt der AviationHelper die Rechnung jedes Mal in die Warteschlange, wenn ein Gutschein mit Rechnung gespeichert wird - auch bei einer Korrektur, denn dann entsteht die Rechnung neu. Der Schalter ist standardmässig aus. Wartet für den Gutschein bereits eine Rechnung in der Warteschlange, entsteht kein zweiter Auftrag.

Den Bürodrucker anschliessen: Er wird auf dem Rechner am Ticketdrucker als normaler Drucker eingerichtet (CUPS). Ein Netzwerkdrucker, der AirPrint bzw. IPP Everywhere kann - das gilt für die meisten neueren Laserdrucker -, braucht dafür keinen Treiber. Danach steht er in der Druckerliste des Geräts und kann als Bürodrucker gewählt werden.

Eigene Vorlagen hochladen

Die mitgelieferte Rundflug-Vorlage lässt sich durch eine eigene ersetzen, und für Tickets ohne Gutschein (Lufttaufe, Anlass-Stand) legst du beliebig viele weitere an. Das geschieht in den Klub-Einstellungen im Schritt Druckvorlagen — es gibt bewusst keinen Design-Editor: du lädst deine XSL-FO-Datei hoch.

Beim Speichern wird die Vorlage sofort probeweise gerendert. Ist etwas kaputt, erscheint die Fehlermeldung sofort und die Vorlage wird gar nicht erst gespeichert — eine unbrauchbare Vorlage erreicht so nie den Drucker. Über PDF-Vorschau siehst du das Ergebnis jederzeit mit Beispieldaten.

Mit dem Vorschau-Knopf in der Vorlagenliste zeigt der AviationHelper die Vorlage mit Beispieldaten an (Gutschein F4F-RF-0001 für Martina Muster) – als PDF im Dialog, bei einer ATB-Vorlage als Druckerbefehle. So siehst du das Layout, bevor der erste echte Gutschein gedruckt wird.

Der Schlüssel einer Vorlage steht später in jedem Druckauftrag. Ordnest du eine Vorlage einem Gutschein-Typ zu, wird sie beim Drucken dieses Gutscheins automatisch verwendet.

Bilder bindest du mit asset:name ein; die Datei lädst du unten auf derselben Seite hoch. Das Klub-Logo steht ohne Upload als asset:club-logo bereit. Andere Quellen — Dateipfade oder Internet-Adressen — weist der AviationHelper ab: nur so ist es überhaupt möglich, eigene Vorlagen gefahrlos hochzuladen.

Vorlagen im Editor gestalten

Statt eine XSL-FO-Datei hochzuladen, lässt sich eine Vorlage direkt im AviationHelper gestalten. Der Editor gehört zum Modul Externes Drucken und wird zusätzlich pro Klub freigeschaltet — ist er nicht aktiv, bleibt nur der Weg über den Upload.

In den Klub-Einstellungen im Schritt Druckvorlagen stehen dafür zwei Knöpfe: Neue Vorlage gestalten beginnt mit einem leeren Ticket, Aus Standard-Layout übernimmt einen fertigen Aufbau als Ausgangspunkt («Boarding-Pass klassisch» bildet das bekannte Rundflug-Ticket nach, «Gutschein schlicht» ist ein Gutschein ohne Vordruck). Eine im Editor gestaltete Vorlage trägt in der Liste die Markierung Editor und öffnet sich mit dem Stift-Knopf wieder dort; hochgeladene XSLT-Vorlagen bleiben unverändert und tragen XSLT.

Der Editor zeigt das Ticket liegend, so wie es aus dem Drucker kommt. Elemente werden mit Element hinzufügen angelegt und mit der Maus verschoben; die Ecke unten rechts ändert die Grösse, die Pfeiltasten verschieben um einen halben Millimeter (mit Umschalttaste um fünf). Rechts daneben stehen die Eigenschaften des gewählten Elements — Position und Grösse in Millimetern, Schriftgrösse, Ausrichtung, Drehung. Der Knopf neben dem Feld Drehung dreht das Element mit jedem Klick um eine Vierteldrehung weiter — das geht bei jeder Art von Element, auch beim Strichcode, beim QR-Code und beim Bild. Andere Winkel als 0, 90, 180 und 270 Grad kann der Drucker nicht setzen. Der Kasten des Elements bleibt beim Drehen an seinem Platz und behält seine Grösse; nur sein Inhalt dreht sich darin.

Sechs Arten von Elementen gibt es:

  • Text für freie Zeilen, wahlweise fett, in Grossbuchstaben, umbrechend oder um 90, 180 oder 270 Grad gedreht.
  • Feld für eine kleine Beschriftung über einem grossen Wert, wie NAME oder DAUER auf dem Ticket — auf Wunsch mit Rahmen und runden Ecken.
  • Bild für das Klub-Logo oder ein hochgeladenes Bild. «Weglassen, wenn das Bild fehlt» sorgt dafür, dass ein Klub ohne Logo trotzdem drucken kann.
  • QR-Code und Strichcode (Code 128) mit beliebigem Inhalt, beim Strichcode auf Wunsch mit Klartext darunter.
  • Rahmen für eine Linie oder einen Kasten.

Platzhalter füllen die Angaben des Gutscheins ein: {{gutschein.nummer}}, {{gutschein.name}}, {{gutschein.gueltig_bis}} und weitere; {{klub.name}} und die übrigen Klub-Angaben kommen aus den Klub-Einstellungen. Mit {{frage:Dauer|~ 1h}} entsteht ein Feld, das beim Drucken erfragt wird — der Text vor dem senkrechten Strich ist die Beschriftung in der Druck-Maske, der Text dahinter die Vorgabe. Du musst sie nicht auswendig wissen: der Knopf + neben dem Textfeld öffnet eine Liste aller Felder mit Suche, und der gewählte Platzhalter landet dort, wo der Cursor zuletzt stand.

Zwei Vorschauen zeigen das Ergebnis, ohne Papier zu verbrauchen: PDF-Vorschau rendert die Vorlage genau so, wie sie der Drucker bekäme, und Druckpunkte zeigt das Bild in der Auflösung eines Etikettendruckers — dort sieht man, ob eine feine Schrift noch lesbar bleibt.

Zwei Hilfslinien erleichtern das Ausrichten: die gestrichelte Linie quer über das Ticket markiert die Abrisskante, ein blau gestrichelter Rahmen die Grösse des Ticketpapiers, falls sie von der Vorlage abweicht. Ist bei den Bildern ein Vordruck hinterlegt, lässt er sich als Hintergrund einblenden — er hilft beim Ausrichten auf vorgedrucktem Papier und wird nie gedruckt.

Speichern prüft die Vorlage und rendert sie probeweise, genau wie beim Upload; Als Kopie speichern legt eine zweite Vorlage an, statt die bestehende zu ändern.

Tickets ohne Gutschein drucken

Für eine Lufttaufe oder den Stand am Flugplatzfest braucht es keinen Gutschein. Unter Druckaufträge (eigener Menüpunkt) wählst du eine Vorlage, füllst die Felder aus, gibst die Anzahl an und stellst den Auftrag in die Warteschlange. Die Felder entstehen automatisch aus der Vorlage — kommt später ein Feld dazu, erscheint es hier von selbst.

Die Warteschlange im Blick

Dieselbe Seite zeigt oben die Geräte mit ihrem Zustand und unten alle Aufträge des Klubs: was gedruckt wurde, was wartet und was fehlgeschlagen ist, mit der Meldung des Geräts - auch Testdrucke und Kalibrierungen stehen hier. Jede Zeile nennt auch, wer den Auftrag ausgelöst hat. Drei Aktionen gibt es dort:

  • Erneut drucken legt einen neuen Auftrag mit denselben Angaben an; der alte bleibt als Nachweis stehen.
  • Abbrechen geht nur, solange der Auftrag noch wartet. Hat der Rechner ihn bereits geholt, druckt er schon.
  • Löschen nimmt den Auftrag aus der Liste - einen wartenden ebenso wie einen gedruckten, fehlgeschlagenen oder abgebrochenen. Nur während der Rechner gerade druckt, bleibt der Eintrag stehen. Mit Erledigte Aufträge löschen über der Liste räumst du alles Gedruckte, Fehlgeschlagene und Abgebrochene auf einmal weg; wartende Aufträge bleiben.

Tickets auf einem ATB-Drucker (IER)

Neben normalen Druckern unterstützt der AviationHelper ATB-Ticketdrucker — die Geräte, mit denen an Flughäfen Boarding-Pässe gedruckt werden (zum Beispiel ein IER 557). Sie sprechen kein PDF, sondern das AEA-Protokoll über eine serielle Schnittstelle.

Der Weg ist derselbe wie beim normalen Drucker: Vorlage, Warteschlange, Agent. Unterschiedlich ist nur, was am Ende auf welche Leitung geht. Zwei Dinge sind beim Einrichten anders:

  • Die Vorlage hat das Ausgabeformat AEA. Ihr Inhalt ist reiner Text mit ${name}-Platzhaltern statt XSL-FO — was darin steht, gibt die AEA-Spezifikation deines Druckers vor (Feldpositionen, Schriftgrössen). Der AviationHelper transportiert die Nachricht, gestalten musst du sie selbst.
  • AEA kennt nur ASCII. Umlaute in der Vorlage werden beim Speichern abgewiesen; Umlaute in den Werten (echte Namen) schreibt der AviationHelper automatisch um — aus «Jürg Müller» wird «Juerg Mueller».

Auf dem Rechner am Drucker wird der serielle Anschluss konfiguriert: Port, Baudrate, Datenbits, Parität und Stoppbits. Diese Werte stehen auf dem Selbsttest-Ausdruck des Druckers — die meisten Geräte drucken ihn, wenn man sie im Offline-Zustand einschaltet und die Test-Taste drückt.

Bevor ein Ticket gedruckt wird, fragt der Agent die Firmware-Version des Druckers ab. Antwortet das Gerät nicht, wird gar nicht erst gedruckt, und in der Warteschlange steht eine Meldung mit den eingestellten Werten — dann stimmen fast immer Port oder Baudrate nicht.

Ein Auftrag landet nie auf dem falschen Gerät: Der AviationHelper prüft vor dem Einreihen, ob der gewählte Drucker das Format der Vorlage überhaupt drucken kann.