Forum: PC-Programmierung Best Practice: Hardwarefunktionen über Webinterface steuern


von scus (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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

von Thorsten (Gast)


Lesenswert?

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

von scus (Gast)


Lesenswert?

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

von U.Hertlein (Gast)


Lesenswert?

'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).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.