Druckweiche¶
Im Schützenhaus stehen meist zwei Arten von Druckern: ein Etikettendrucker an der Kasse (z.B. Niimbot B1) und ein Blattdrucker im Büro für Kranzkarten, Ranglisten und den Kassenabschluss. Dazu kann ein Bondrucker für Kassenzettel kommen (z.B. Epson TM-m30III). Ein Browser kann keinen der beiden direkt ansprechen – er öffnet höchstens den Druckdialog.
Die Druckweiche löst das: Ein kleines Agent-Gerät im Vereinsnetz (z.B. ein M5Stack Core2) sucht die Drucker selbst und meldet sie der App. In der Verwaltung legt man nur noch fest, welches Dokument auf welchen Drucker geht. Danach druckt „Drucken“ ohne Dialog direkt am richtigen Gerät.
Paket Verein
Die Druckweiche gehört zum Paket Verein. Ohne dieses Paket druckt die App über den Browser; Geräte und Zuordnung bleiben gespeichert. Siehe Abo.
So hängt es zusammen¶
flowchart LR
subgraph app["Schiess-Auswertungen"]
direction TB
doks["Etiketten · Kranzkarten<br/>Ranglisten · Abschluss"] --> weiche{{"Druckweiche<br/>Zuordnung"}}
weiche --> ws[("Warteschlange<br/>pro Drucker")]
end
subgraph haus["Vereinsnetz im Schützenhaus"]
direction TB
agent["Agent-Gerät<br/>M5Stack Core2"]
niimbot["Etikettendrucker<br/>Niimbot B1"]
laser["Blattdrucker<br/>z.B. Samsung, HP"]
end
agent -- "1 · meldet seine Drucker" --> ws
ws -- "2 · holt Aufträge ab" --> agent
agent -- Bluetooth --> niimbot
agent -- "WLAN / IPP" --> laser
agent -- "3 · Quittung" --> ws
- Das Agent-Gerät holt ab, die App schickt nie. Deshalb braucht es keine offenen Ports und keine feste IP – es funktioniert hinter jedem Router.
- Drucker findet es selbst: Niimbot-Drucker über Bluetooth, Netzwerkdrucker über das Netz (AirPrint/IPP). Beim Start, alle 10 Minuten und auf Knopfdruck.
- Jeder Auftrag wird quittiert. Ist der Drucker aus, schläft er oder fehlt Papier, bleibt der Auftrag in der Warteschlange und kommt, sobald der Drucker wieder bereit ist.
- Die App rendert im Format, das der Drucker versteht – PDF oder PostScript für Blattdrucker, ein fertiges Bild für Etiketten. Treiber braucht es keine.
Mit Box im Schützenhaus¶
Steht eine Box im Schützenhaus, fragt das Agent-Gerät beide ab: die Cloud und die Box. Die Box findet es von selbst im Vereinsnetz (mDNS), eine Adresse muss man nicht eintragen. So druckt die Kasse auf der Box auch ohne Internet.
flowchart LR
cloud[("Cloud")] -- "Einrichtung<br/>(Geräte, Schlüssel, Zuordnung)" --> box[("Box")]
agent["Agent-Gerät"] -- holt ab --> cloud
agent -- "holt ab<br/>(auch offline)" --> box
box -. "findet sie per mDNS" .- agent
Eingerichtet wird in der Cloud. Die Box übernimmt Geräte, Schlüssel und Zuordnung mit dem Abgleich (stündlich oder über Gerät → Jetzt abgleichen).
Ein paar Tage ohne Internet
Fällt das Internet aus, lässt sich auf der Box weiter einrichten:
- Neue Drucker meldet das Agent-Gerät der Box selbst.
- Eigene Agent-Geräte lassen sich auf der Box anlegen (markiert mit „nur auf dieser Box“); ihr Schlüssel gilt sofort.
- Rollensorten lassen sich eintragen.
- Die Zuordnung lässt sich übersteuern – sie gilt dann nur auf der Box („auf der Box übersteuert“). Zuordnung der Cloud verwenden nimmt das zurück.
Ist das Internet zurück, führt der Abgleich alles zusammen: Derselbe Drucker erscheint nur einmal, wartende Aufträge bleiben. Geräte aus der Cloud lassen sich auf der Box nicht ändern – das geht nur in der Cloud.
Die Box druckt selbst¶
Die Box ist selbst ein Agent-Gerät für Drucker in ihrem Netz – ohne Zusatzgerät und ohne Schlüssel von Hand. Nach dem Koppeln richtet sie sich bei der Cloud selbst ein und erscheint in der Verwaltung als Gerät „Box …“.
- Blattdrucker (z.B. Samsung, HP) findet sie per AirPrint/IPP und druckt PDF bzw. PostScript.
- WLAN-Etikettendrucker: Zebra (ZPL) und Brother QL. Die Etikettengrösse liest sie aus dem Drucker.
- Bondrucker im Netz: Epson TM (z.B. TM-m30III, TM-T20, TM-T88) über Port 9100. Modell, Seriennummer und Papierstand liest sie aus dem Drucker.
- Niimbot (z.B. B1): am USB-Kabel der Box oder per Bluetooth, wenn die Box einen Adapter hat (z.B. Mini-PC) – Modell, Seriennummer, Rolle und Akku liest sie aus dem Drucker. Ohne Bluetooth (RUTC) über eine Core2. Der B1 nimmt nur eine Verbindung an: Box oder Core2, nicht beide gleichzeitig.
Auf der Box lässt sich das unter Drucken → Drucker (Druckweiche) mit Box druckt selbst … abschalten, z.B. wenn eine Core2 alle Drucker bedient. Finden Box und Core2 denselben Drucker, erscheint er zweimal – zugeordnet wird einer, gedruckt wird nur dort.
Brother QL
Die Unterstützung für Brother QL folgt der Protokollbeschreibung, ist aber noch nicht an einem echten Gerät erprobt.
Einrichten¶
1. Agent-Gerät anlegen¶
Verwaltung → Drucken → Drucker (Druckweiche), unten bei Neues Agent-Gerät einen Namen eingeben (z.B. „Core2 Stand“) und Anlegen. Die App zeigt den Agent-Schlüssel und die Server-Adresse – nur jetzt, einmal.
Schlüssel gleich übertragen
Der Schlüssel wird nur als Prüfsumme gespeichert und ist später nicht mehr lesbar. Ging er verloren: beim Gerät Neuer Schlüssel – der alte gilt dann nicht mehr. Ziele und Zuordnung bleiben stehen.
2. Agent-Gerät einrichten (M5Stack Core2)¶
- Core2 einschalten. Ohne Einstellungen öffnet sie das WLAN
PWA-Agent-XXXX. - Mit Handy oder Laptop verbinden; die Einrichtungsseite öffnet sich
meist von selbst (sonst
http://192.168.4.1). - Eintragen: WLAN und Passwort des Schützenhauses, Server-URL und Agent-Schlüssel aus Schritt 1. Bei Box im Vereinsnetz die Vorgabe „automatisch finden“ lassen.
- Speichern & neu starten.
Nach einigen Sekunden steht das Gerät in der Verwaltung als online, darunter die Drucker, die es gefunden hat.
2b. PWA-Agent koppeln (eigenständiger PWA-Agent)¶
Der PWA-Agent läuft auch ohne Box, z.B. auf einem Mini-PC beim Drucker. Er kennt die Cloud nicht von sich aus – man koppelt ihn mit einem Link:
- Beim ersten Start druckt er einen Einrichtungs-Bon (Bon, Etikett oder
A4) mit Adresse der WebUI, PIN und QR-Code. Auf dem Gerät zeigt
pwa-agent pindie PIN;pwa-agent pin neusetzt eine neue. - Hier unten PWA-Agent koppeln wählen. Die App zeigt einen Koppel-Link mit Code (gilt 15 Minuten, nur einmal).
- In der WebUI des PWA-Agenten (
http://<Gerät>:2000/) mit der PIN anmelden, bei Verbindung hinzufügen den Link einfügen – oder „Schiess-Auswertungen“ wählen und nur den Code eingeben – und Prüfen. Er zeigt, wer antwortet (Verein), dann Verbinden.
Danach steht er hier als PWA-Agent … mit seinen Druckern. Steht eine Box desselben Vereins im Netz, findet er sie selbst und druckt über sie auch ohne Internet.
Netzwerkdrucker suchen (WebUI, Karte Drucker, mit PIN; ab Agent 0.9.40): Eingeschaltet sucht der Agent Drucker im Netz (Bonjour und Niimbot im eigenen /24-Netz). Den Agenten am besten nur dort installieren, wo Drucker hängen: Netzwerkdrucker über einen Agenten (z.B. den RUTC), USB- und Bluetooth-Drucker am Gerät, an dem sie angeschlossen sind. Auf diesen Geräten die Suche ausschalten, sobald der Einrichtungs-Bon gedruckt ist – sonst meldet jeder Agent dieselben Netzwerkdrucker noch einmal. Ausgeschaltet vergisst er schon gemeldete Netzwerkdrucker sofort; fest eingetragene Adressen gelten weiter.
Trennen:
- Box oder App am Agenten (z.B. eine alte Kopplung unter „Apps im Netz“): in der WebUI des Agenten mit der PIN, bei Apps im Netz → Trennen.
- Cloud-Kopplung des Agenten: in der WebUI unter Verbindungen → Trennen. Einträge „von der App“ verwaltet die Box auf demselben Gerät.
- Agent ganz entfernen: in der Cloud hier bei den PWA-Agenten ✕, dann wirklich löschen? – danach auch auf dem Gerät trennen, sonst meldet er sich mit seinem alten Schlüssel weiter.
Rollen (Apps, die direkt an den PWA-Agenten drucken)¶
Apps, die selbst an den PWA-Agenten schicken (z.B. ein Kassensystem), drucken an eine Rolle wie „Bon“ oder „Küche“ statt an einen bestimmten Drucker. Eine Rolle ist eine Reihenfolge: Drucker, Ersatz, 2. Ersatz. Der Agent nimmt den ersten Drucker, der bereit ist und das Format kann; fällt einer aus, wechseln auch die wartenden Aufträge.
In der WebUI, Karte Rollen: mit der PIN Rolle, Drucker, Ersatz und 2. Ersatz wählen, Speichern – ebenso ändern oder entfernen. Die Karte zeigt die Kette jeder Rolle; der Drucker, der gerade druckt, trägt aktiv.
Für App-Entwickler: POST /v1/auftraege mit { rolle: "Bon", format, daten }
statt ziel; die Rollen liefert GET /v1/rollen.
3. Drucker prüfen¶
Jeder gemeldete Drucker hat eine eigene Zeile mit Status (bereit, nicht gesehen, Fehler), Akku und restlichen Etiketten bzw. Papier im Fach.
- Anzeigename – z.B. „Kasse“ oder „Büro“ statt der Modellnummer. Erscheint auch auf dem Display des Agent-Geräts. Gespeichert wird beim Verlassen des Felds, ohne Knopf. Hat der Drucker selbst einen Namen (Hostname, z.B. „Bon-Theke“ im Webmenü des Epson), zeigt die App diesen, solange kein Anzeigename gesetzt ist. Unter dem Namen stehen Modell und Seriennummer – so sind zwei gleiche Drucker auseinanderzuhalten. Kennt ein Agent einen Niimbot im Netz nur über die IP-Adresse, steht nur über die IP … bekannt dabei (in Zuordnung und Ersatz „· über IP …“). Den mit Seriennummer wählen – die IP wechselt mit DHCP.
- Testdruck (Etikettendrucker), Testbon (Bondrucker) bzw. Testseite (Blattdrucker, A4) prüft das Gerät selbst – auch ohne Zuordnung.
- Warteschlange zeigt wartende, gedruckte und fehlgeschlagene Aufträge mit Zählern und Hinweisen, warum etwas nicht druckt – mit nochmals und löschen (mit Rückfrage).
- Drucker suchen beim Gerät, wenn ein Drucker neu dazukommt.
Neue Etikettenrolle
Der Niimbot meldet die Sorte seiner Rolle, nicht ihre Grösse. Bei einer unbekannten Sorte fragt die Verwaltung einmal nach Breite und Höhe in Millimetern (z.B. Rolle 10262260 = 50 × 30 mm). Danach wird jede Rolle dieser Sorte erkannt.
4. Zuordnen¶
Oben bei Zuordnung wählt man pro Dokumentart den Drucker:
| Dokumentart | Drucker | Was |
|---|---|---|
| Etiketten | Etikettendrucker | Etiketten an der Kasse, Ersatzetiketten |
| Kranzkarten | Blattdrucker | Kranzkarten (A6) |
| Urkunden | Blattdrucker | Urkunden (A4) – leer = wie Dokumente |
| Dokumente | Blattdrucker | Rangliste, Kassenabschluss, Meisterschaft, Kränze-Liste, Munitionsabrechnung, AMM (A4) |
| Kassenzettel | Bondrucker | Kassenzettel nach dem Bezahlen an der Kasse |
| Auszahlungsbon | Bondrucker | Bon mit QR nach dem Erfassen einer Auszahlung (Auszahlung); leer = der Drucker der Kassenzettel |
| Resultat-Bon | Bondrucker | Resultat mit Einzelschüssen und Trefferbild (Kränze); leer = der Drucker der Kassenzettel |
| Resultat-Portal: Bon / A4 | Bondrucker / A4-Drucker | beim Kiosk des Resultat-Portals; leer = am Portal nicht drucken (nie der Drucker im Büro) |
Zur Auswahl stehen nur Drucker der passenden Art. „– wie bisher –“ heisst: keine Weiche, der Browser druckt wie früher. Ausnahme Etiketten: Sie drucken nur über die Druckweiche – ohne Zuordnung meldet die Kasse „Für „Etiketten“ ist kein Drucker zugeordnet.“
Jede Zuordnung hat einen Knopf Test. Er druckt über denselben Weg wie im Betrieb (Testetikett, Testkarte A6, Testbon bzw. Testseite A4) und prüft so Drucker und Zuordnung. Die Testseite nennt Drucker, Zuordnung und Format.
Hinweis „Format“
Kann ein Blattdrucker weder PDF noch PostScript, schickt die App PDF mit „Drucker erkennt selbst“. Das klappt bei vielen, aber nicht allen Modellen – die Verwaltung zeigt dann einen Hinweis. Mit der Testseite gleich ausprobieren.
Ersatzdrucker¶
Unter dem Drucker jeder Zuordnung steht Ersatz: „– kein Ersatz –“ oder ein anderer Drucker derselben Art. Ist der Drucker nicht bereit – er meldet einen Fehler (z.B. Papier leer, Deckel offen), ist nicht gesehen oder sein Agent-Gerät ist offline – und der Ersatz ist bereit, gehen neue Aufträge an den Ersatz. Auch Aufträge, die noch warten und vom Agenten noch nicht abgeholt sind, wechseln (innert etwa 10 Sekunden); schon abgeholte bleiben – nichts druckt doppelt. Das gilt auch für die Etiketten der Kasse. Ist der Drucker wieder bereit, gehen neue Aufträge wieder an ihn.
Solange der Ersatz druckt, steht bei der Zuordnung „Drucker ist nicht bereit – es druckt Ersatz.“; gewechselte Aufträge zeigen in der Warteschlange „(Ersatz für Drucker)“.
Den Ersatz stellt man in der Cloud ein; auf der Box steht er nur zum Ansehen („Der Ersatzdrucker wird in der Cloud eingestellt.“) und kommt mit dem Abgleich. Wird der Ersatzdrucker entfernt, hat die Zuordnung einfach keinen Ersatz mehr.
5. Fach, Papier, Farbe, Seiten¶
Kann der zugeordnete Blattdrucker es, erscheinen unter der Zuordnung Auswahlfelder – gefüllt mit dem, was der Drucker selbst meldet:
| Feld | Beispiel |
|---|---|
| Fach | Schublade 1, Mehrfacheinzug |
| Papier | Normalpapier, Karton |
| Farbe | Farbe, Schwarzweiss |
| Seiten | einseitig, doppelseitig |
So bedient ein Drucker beides: Dokumente aus der Schublade, schwarzweiss und doppelseitig, Kranzkarten aus dem Mehrfacheinzug auf Karton. „– Drucker entscheidet –“ lässt die Wahl dem Drucker.
Geht ein Druck an ein Fach zum Nachlegen (Mehrfacheinzug), zeigt die App gleich „Papier bzw. Karten in … einlegen“; der Drucker wartet, bis Karten drin sind. Ein Papierstau oder fehlendes Papier steht im Status des Druckers im Klartext.
Core2
Die Core2 berücksichtigt Fach und Papier erst mit einem Firmware-Update; bis dahin druckt sie wie bisher.
Im Betrieb¶
- Etiketten gehen nach dem Lösen an der Kasse direkt an den zugeordneten Etikettendrucker.
- Kranzkarten drucken aus dem Kranz-Fenster direkt.
- Kassenzettel: Nach Bar kassiert bzw. TWINT → Bezahlt geht ein Bon an den Bondrucker – nur, wenn der Zuordnung „Kassenzettel“ ein Drucker zugewiesen ist. Ohne Zuordnung gibt es keinen Bon. Auf dem Bon stehen Verein (auf Wunsch mit Logo), Anlass, Name, die bezahlten Stiche mit Betrag, Rundung, Total und Zahlungsart. Klemmt der Drucker, ist die Zahlung trotzdem verbucht; die Kasse sagt, ob der Bon wartet.
- Dokumente: „Drucken“ auf Rangliste, Kassenabschluss & Co. setzt die Seite auf A4 (breite Tabellen quer, Kopfzeile auf jeder Seite, Seitenzahlen) und schickt sie an den Drucker. Danach erscheint unten rechts ein Hinweis mit Im Browser drucken – falls man doch lieber den Druckdialog will.
- Ohne Anmeldung (öffentliche Rangliste) druckt immer der Browser.
Firmware der Agent-Geräte¶
Neue Firmware für die Agent-Geräte (z.B. die Core2) kommt über den Server – das Gerät holt sie selbst, so wie die Druckaufträge. Von allein aktualisiert nichts: Eine neue Version kommt erst aufs Gerät, wenn die Verwaltung sie freigibt.
Unter Drucken → Drucker (Druckweiche) → Firmware der Agent-Geräte steht
pro Gerätetyp (z.B. esp32-core2):
- Version wählen und auf Freigeben tippen. Ohne Zeitfenster geht es sofort los; mit Zeitfenster (z.B. 02:00–05:00) nur in dieser Zeit. Nur die Version wählen genügt nicht: Solange nicht freigegeben ist, steht „noch nicht freigegeben“ und der Knopf heisst z.B. „0.11.4 freigeben“.
- Darunter stehen die Geräte dieses Typs mit der Version, die gerade läuft, und dem Stand des Updates: läuft auf Probe, aktualisiert oder Update fehlgeschlagen. Steht dabei „Bootloader ohne Rückfall – einmal per USB aktualisieren“, fehlt dem Gerät noch der neue Bootloader – ohne ihn gibt es keinen automatischen Rückfall auf die alte Version.
- Ein einzelnes Gerät kann rechts eine eigene Version bekommen (z.B. zuerst nur eines ausprobieren). „– wie alle –“ nimmt es wieder zur Freigabe für alle.
Ein Gerät aktualisiert nur, wenn es nichts zu drucken hat, keine Quittungen offen sind und es am Strom hängt bzw. der Akku über 50 % hat. Die neue Version läuft zuerst auf Probe: Erreicht sie innert 10 Minuten keinen Server, startet das Gerät neu und läuft wieder mit der alten Version. Dieselbe Version nochmals versuchen = nochmals Freigeben.
Mit Box im Schützenhaus
Freigegeben wird in der Cloud. Die Freigabe kommt mit dem Abgleich auf die Box, die Firmware-Datei holt die Box danach selbst. Ab dann bekommen die Geräte das Update auch ohne Internet. Die Box zeigt den Stand nur an.
Für den Betreiber
Firmware-Dateien lädt nur der Betreiber hoch (Master → Firmware),
sie gelten für alle Vereine. Angenommen wird nur ein signiertes
App-Image (pwa-agent.bin, signiert mit
espsecure.py sign_data --version 2 --keyfile <schlüssel> …).
Das Gerät prüft die Signatur selbst und startet eine fremde oder
unsignierte Datei nie. Der private Schlüssel liegt offline beim
Betreiber, nie auf dem Server.
Wenn es nicht druckt¶
| Anzeige | Ursache | Abhilfe |
|---|---|---|
| Gerät offline | Agent-Gerät ohne Strom oder WLAN | Strom und WLAN prüfen; Server-Adresse auf dem Gerät kontrollieren |
| Drucker nicht gesehen | Drucker aus, schläft, ausser Reichweite oder mit der Handy-App verbunden | Drucker einschalten bzw. Handy-App trennen – der Auftrag wartet und kommt dann |
| Drucker bleibt nicht gesehen | in Reparatur, ersetzt oder weg – das Gerät fragt ihn nach drei Versuchen nur noch alle paar Minuten (bis 30 Min.) | in der Zeile ✕ und nochmals zum Bestätigen: Das Gerät vergisst ihn, offene Aufträge an ihn gehen mit. Kommt er (oder sein Ersatz) wieder, findet ihn die Suche – sofort mit Drucker suchen |
| Drucker Fehler (z.B. Papier leer, Deckel offen) | Meldung des Druckers | beheben; der Auftrag läuft weiter |
| Zuordnung zeigt „… ist nicht bereit – es druckt …“ | Der zugeordnete Drucker ist nicht bereit, es druckt der Ersatz | Drucker in Ordnung bringen – ist er wieder bereit, gehen neue Aufträge wieder an ihn |
| Bondrucker „Papier fast leer“ | Rolle geht zu Ende (Status bleibt „bereit“) | neue Rolle bereitlegen; bei „Papier leer“ wartet der Bon, bis die neue Rolle drin ist |
| Kasse meldet „Für „Etiketten“ ist kein Drucker zugeordnet.“ | Der Zuordnung „Etiketten“ ist kein Drucker zugewiesen | unter Zuordnung bei „Etiketten“ einen Etikettendrucker wählen |
| Auftrag fehlgeschlagen | Drucker hat abgelehnt | in der Warteschlange nochmals; Format-Hinweis beachten |
| Agent-Gerät zeigt „Schlüssel ungültig“ | Schlüssel falsch oder in der Verwaltung neu erzeugt | Schlüssel neu erzeugen und im Gerät eintragen |
| Agent-Gerät zeigt „Schlüssel an der Box (noch) unbekannt“ | Die Box kennt das Gerät bzw. den neuen Schlüssel noch nicht – sie übernimmt beides erst mit dem Abgleich | Auf der Box Gerät → Jetzt abgleichen. Bis dahin holt das Gerät weiter bei der Cloud ab; es geht nichts verloren. |
| Agent-Gerät findet keine Box | Box und Agent-Gerät in verschiedenen Netzen (mDNS reicht nicht über einen Router), oder Box noch nicht gekoppelt | Beide ins selbe Netz; sonst die Box-Adresse am Gerät von Hand eintragen |
Nach jeder Änderung an Geräten oder Schlüsseln
Neues Agent-Gerät, Neuer Schlüssel oder geänderte Zuordnung gelten in der Cloud sofort, auf der Box erst nach dem nächsten Abgleich. Wer gleich weiterarbeiten will: auf der Box Gerät → Jetzt abgleichen.