Ausdruck über Android Kassenterminal mit integriertem Thermodrucker

In diesem Forum können Fragen zum OrderSprinter gestellt werden.
Karl Strass
Beiträge: 4
Registriert: Di 27. Jul 2021, 07:32

Ausdruck über Android Kassenterminal mit integriertem Thermodrucker

Beitrag von Karl Strass »

Hallo zusammen, hallo Stefan,

erstmal vielen Dank für Deine tolle Software und die bestimmt vielen Stunden die Du dafür opferst!
Ich versuche gerade einen kleinen Gastrobetrieb mit OrderSprinter auszustatten. Noch habe ich bei weitem nicht alle Möglichkeiten der Software durchschaut.

Eine Servicekraft soll nach Möglichkeit direkt am Tisch abrechnen und einen Bon direkt ausdrucken können.
Nun habe ich das mobile Kassenterminal mit integriertem Thermodrucker Sunmi V2 Pro (https://www.sunmi.com/en/V2Pro/) entdeckt welches prinzipiell diese Möglichkeit bieten würde.
Das Gerät ist Android basierend und es gibt auch einige Dokumentation (unter https://docs.sunmi.com/en/general-funct ... r-display/).
Der Drucker kann wohl auf 3 verschiedene Arten angesprochen werden, wobei mir die Vorgehensweise über ein virtuelles Bluetooth Interface am zielführendsten erscheint.
Dazu müsste man unter Android eine Art Druckserver einrichten der den Drucker über das virtuelle Bluetooth Interface anspricht und im Netz zur Verfügung stellt. Diesen könnte man dann via CUPS addressieren. So einen Druckerserver habe ich aber leider nicht gefunden.
Die andere wohl beste Möglichkeit wäre den Drucker direkt lokal über das virtuelle Bluetooth Interface aus dem Web Browser heraus anzusprechen, wobei mir nicht klar ist über welche Schnittstelle das unter Android gehen müsste.
Wenn ich das richtig sehe gab es mal unter OrderSprinter die Möglichkeit einen Drucker lockal anzusprechen, was aber inzwischen deaktiviert wurde.

Nun zu meiner Frage:
Hat jemand diese oder eine ähnliche Hardware unter OrderSprinter zum Laufen gebracht?
Oder sieht jemand reelle Chancen irgendwie eine Lösung zusammenzuzimmern?
Ich bin für jeden Gedanken dankbar.

Viele Grüße
Karl
pichel
Administrator
Beiträge: 791
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Ausdruck über Android Kassenterminal mit integriertem Thermodrucker

Beitrag von pichel »

Hallo Karl,

ich kenne das Gerät nicht,aber grundsätzlich ist es so, dass man auf Bondrucker drucken können sollte, wenn der zentrale OrderSprinter-Druckerserver den Drucker per Windows-Treiber oder alternativ CUPS (für den Javaprinter) erreichen kann. Also der erste Test sollte sein, ob man einen kurzen einzeilige Text z.B. von einem PC aus über die Druckenfunktion auf dem Drucker ausgeben kann. In dem Fall sollte auch ein Ausdruck über den OrderSprinter.Druckserver möglich sein.

Ein Ausdruck direkt über Android ist nicht vorgesehen, es muss immer über den Windows-Druckserver oder den Javaprinter gehen.

Gruß

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Karl Strass
Beiträge: 4
Registriert: Di 27. Jul 2021, 07:32

Re: Ausdruck über Android Kassenterminal mit integriertem Thermodrucker

Beitrag von Karl Strass »

Ich habe mir jetzt doch das Gerät auf Verdacht gekauft und habe es tatsächlich zum Laufen gebracht.
Vorgehensweise:
- Da keine Google Play Store auf dem Gerät installiert ist erstmal den Aurora Store installieren
- Dann entweder "RawBT" oder "BT/TCP Bridge" App installieren und den virtuellen Bluetooth Drucker im RAW Modus auf Port 9100 freigeben.
- Auf dem OrderSprinter Server unter CUPS Drucker hinzufügen mit folgenden Einstellungen
* Netzwerkdrucker: AppSocket/HP JetDirect
* Verbindung: socket://Hostname_von_Sunmi_V2_PRO:9100
* Hersteller: Raw
* Modell: Raw Queue
- Der Drucker braucht noch etwas andere Druckereinstellungen im javaprinter, deshalb in der config.json folgendes ändern:
* "escinits" : [ 27, 64, 28, 46, 27, 116, 2],

Jetzt habe ich noch 2 Probleme:

1 (kleineres Problem).
Umlaute werden beim Druck eines Kassenbons zwar richtig gedruckt, aber anscheinend wird für jedes Umlautzeichen kein Leerzeichen in der Produkt Tabelle erzeugt.
Beispiel:

Code: Alles auswählen

Anz Beschreibung  Brutto   Total                                                                                                                                                      
================================                                                                                                                                                      
  1 Augustiner He   4,00    4,00                                                                                                                                                      
  1 K.nig L.dwi   4,20    4,20                                                                                                                                                        
                                                                                                                                                                                      
                                                                                                                                                                                      
MwSt%   MwSt    Netto   Brutto                                                                                                                                                        
--------------------------------                                                                                                                                                      
19,00   1,31     6,89     8,20
Diese Ausgabe habe ich über eine Umleitung der CUPS Druckers in eine Datei geprüft.
Kann es sein das beim Kassenbon Druck mit Umlauten der javaprinter über CUPS die Anzahl der Füll-Leerzeichen nicht korrekt setzt?

2 (größeres Problem).
Beim Betrieb von OrderSprinter sollen unterschiedliche Benutzer über NFC Tags mit mehreren Geräten dieser Art arbeiten. Das funktioniert auch tadellos.
Das Problem ist jetzt aber, dass einem Benutzer nicht mehr ein fester Drucker zugeordnet werden kann, da dies davon abhängt über welches Gerät der Benutzer gerade arbeitet.
Es wäre schön wenn es bei der Druckerkonfiguration noch so eine Art "Benutzer-lokaler Drucker" geben würde.
Dann würden die Druckdaten immer an die IP Addresse gesendet werden über die der Druck gerade angestoßen wird.
Ich denke dass dazu kein CUPS Drucker notwendig wäre, man könnte die Daten einfach an den (evtl. konfigurierenbaren) Port 9100 des Rechners schicken (ich kenne mich in dem Bereich allerdings nicht wirklich aus)
Falls da aber noch Unterstützung notwendig wäre kann ich dfas aber evtl. noch genauer betrachten und natürlich testen.

Karl
pichel
Administrator
Beiträge: 791
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Ausdruck über Android Kassenterminal mit integriertem Thermodrucker

Beitrag von pichel »

Hallo Karl,

die fehlenden Zeichen beim Drucken von Umlauten kann ich mir nicht so recht erklären. Kann es sein, dass man beim Drucker per DIP-Schalter zuvor einen bestimmten Zeichensatz einstellen muss?

Jeder Benutzer kann sich einen Drucker zuweisen, aber das ist unabhängig von der IP-Adresse, über die er sich einwählt. Eine Änderung ist da etwas aufwendiger, d.h. kann ich dir nicht versprechen. Die vorgeschlagene Lösung sehe ich nicht umsetzbar.

Tut mir leid...

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Karl Strass
Beiträge: 4
Registriert: Di 27. Jul 2021, 07:32

Re: Ausdruck über Android Kassenterminal mit integriertem Thermodrucker

Beitrag von Karl Strass »

Zur Info:
Ich habe jetzt für mich eine (zugegeben etwas gefrickelte) Lösung für das lokale Drucken am dem Gerät, an dem der Druckauftrag initiert wurde:

Ein shell script parsed das Apache log nach "module=printqueue" und "command=queue" um daraus die IP Addresse des Druckauftrags zu ermitteln.
EIn lokaler CUPS Drucker auf einem definierten lokalen Port (z.B. 9101) wird eingerichtet und dem Benutzer in Ordersprinter zugeordnet.
Ein lokaler CUPS printer stub wird mittels netcat wartend gestarted. Wenn Druckdaten kommen, werden die Druckdaten an die IP Addresse des Druckauftrags gesendet.
Das Script macht noch ein paar andere Dinge, aber grob umrissen ist das die Funktionsweise.

Bei der Gelegenheit ist mir aufgefallen, dass der javaprinter durch das ständige Pollen eine ganze Menge Apache log Einträge erzeugt.
Es wäre eventuell eleganter, wenn der javaprinter nur für einen bestimmten Zeitraum gestartet wird, wenn neue Druckaufträge vorliegen und dann wieder automatisch beendet wird.
Ich habe sowas auch in meinem frickel-script mitaufgenommen. Das Apache log ist jetzt deutlich kleiner. Zusätzlich wird noch in der 'work' Tabelle alle 30 Sekunden der value Eintrag für den Satz item=lastprtserveraccess aktualisiert, damit ich keine Druckerwarnung in der WebGui erhalte.
pichel
Administrator
Beiträge: 791
Registriert: So 13. Sep 2015, 19:48
Wohnort: Hamburg
Kontaktdaten:

Re: Ausdruck über Android Kassenterminal mit integriertem Thermodrucker

Beitrag von pichel »

Hallo Karl,

ich stimme dir zu, dass das Parsen des Log-Files als Trigger für die Print-Jobs auch in meinen Augen eine Frickel-Lösung ist.

Ich sehe es nicht als Problem an, wenn das Log-File des Apache durch die Abfragen des Printservers gefüllt wird. Wenn das System vernünftig aufgesetzt ist, wird sowieso immer nur eine bestimmte Menge an access-Logfiles vorgehalten, die alle eine maximale Größe besitzen. Der Apache ist so gut programmiert, dass das Logging bei diesem Szenario zu keiner signifikanten Performanceeinbuße führt.

Natürlich gibt es andere Lösungen, die das Polling vermeiden und nicht gefrickelt sind. Diese Alternativen haben alle ihre Vor-, aber auch ihre Nachteile. Ich habe mich für die Lösung entschieden, die ich am sinnvollsten und leichtesten zu implementieren fand. Das ist aber natürlich meine ganz persönliche Meinung ;)

Gruß,

Stefan
Stefan Pichel
Entwickler der Kassensoftware OrderSprinter (http://www.ordersprinter.de)
Antworten