Best Practice: Hardwarefunktionen über Webinterface steuern

Gast #3353674
Moin moin,
meine Frage ist zwar allgemeiner, aber hier die konkrete Situation (kann 
ggf. überlesen werden):

Ich habe hier einen Etikettendrucker, der über einen Seriellen Port 
anzusprechen ist (Intermec Easycoder C4 via Esim). Der Drucker nimmt 
über die serielle Schnittstelle im Grunde Befehle entgegen wie 
"platziere 'text' an Stelle xy in Größe z", "platziere 'barcode' an 
Stelle xy", "drucke Etikette", "lösche Imagebuffer", etc.

Um die Bedienung so einfach wie möglich zu machen soll dieser an einen 
Raspberry Pi geklemmt werden, der wiederum ein Webinterface zur 
Verfügung stellt. Hier soll zwischen verschiedenen Templates ausgewählt 
werden können, die entsprechenden Textzeilen eingetragen werden können 
und dann die Etikette gedruckt werden können.


Die Ansteuerung des Druckers selbst ist kein Problem (Python), das 
Webinterface umzusetzen auch nicht (Python oder PHP). Meine Frage ist 
die folgende: Wie setze ich elegant die Kommunikation zwischen 
Webinterface und nackter Hardware um? Ich möchte (auch wenn das Netzwerk 
nicht öffentlich und als sicher einzustufen ist) ungern dem Webserver 
großartig Privilegien einräumen um den seriellen Port zu kontrollieren. 
Mein einziger Ansatz ist bisher XML-RPC, aber gibt es noch andere Ideen?

Grüße
scus
Persönliche Seite #3353703
scus schrieb:
> ungern dem Webserver großartig Privilegien einräumen um den seriellen
> Port zu kontrollieren

Naja, so ein riesiges privileg ist das nicht ;-)
Ich würde hier aber einen Server-Prozess (z.B. Java, C#) nutzen welcher 
zwei Dinge vereint:
- Allgemeine Verwaltung der Resource Drucker (angebunden über Seriell)
- Bereitstellung einer Weboberfläche um Task an Drucker zu übersenden
Gast #3353705
Du musst doch nur dem Webserver-User oder der Webserver-Gruppe Lese- und 
Schreibberechtigung auf den seriellen Port geben. Das geht mit einer 
entsprechenden udev-Regel
Gast #3353721
Das Zugriff auf den seriellen Port nicht soo problematisch ist, ist mir 
klar. Die Frage sollte auch eventuelle zukünftige Projekte abdecken, die 
eventuell kritischere Berechtigungen erfordern...

Außerdem möchte ich nicht unbedingt einen Webserver neu erfinden, der 
dann in meinem "Druckspooler" integriert ist. Da würde ich am liebsten 
auf etwas wie lighttpd zurückgreifen, den ich mit PHP/Python Skripten 
füttern kann, bei denen ich vielleicht fertige Bibliotheken für 
Templates o.ä. nutzen kann.

Grüße
scus
Gast #3371912
'spooler' ist m.M. nach schonmal der richtige Ansatz:

Du willst den Druckauftrag nicht direkt vom web-server an den Drucker 
schicken, weil es sonst passieren kann, dass zwei gleichzeitige 
Auftraege den Drucker blockieren oder Mist rauskommt.

Besser ist es da, die Auftraege in eine Warteschlange zu stecken und 
dann einen Hintergrundprozess (daemon) zu haben, der alleinigen Zugriff 
auf den Drucker hat und die Auftraege sequentiell abarbeitet.

Die Warteschlange kann z.B. ueber eine message queue implementiert sein 
oder auch nur ueber Dateien in einem bestimmten Verzeichnis (wie das 
z.B. sendmail macht).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.