|
Linux-Projekte
für den Raspberry Pi
(in Python realisiert)
Zählerdaten
(EDL21/SML) auswerten und am LCD-Display darstellen
|
Jetzt
stehen die Daten also in lesbarer Form im 'Zähler'-Rechner
bereit. Aber wie können sie abgerufen werden?
Zunächst
wurden sie per SCP (Secure CoPy) abgeholt. Dabei mußte jedoch
immer manuell das Kennwort des Benutzers eingegeben werden. Eine
erste Abhilfe brachte das Programm 'sshpass'. Diesem konnte das
Passwort 'mitgegeben' werden. Leider erfolgte die
Passwort-Übertragung unverschlüsselt, daher wurde auch diese
Lösung verworfen.
Schlußendlich ist nun auf dem
'Zähler'-Rechner ein eigener, kleiner mini
Socket-Server installiert. Dieser wird ebenfalls per
'cronjob' über ein 'Startscript' gestartet und wartet im
Hintergrund ständig auf Verbindungsanfragen. Die Prozessorlast
ist dabei jedoch minimal!
Wird ein Verbindungsaufbau
erkannt, erwarte der Server eine bestimmte (willkürlich
festgelegte) Reihenfolge von Daten. Wird diese Reihenfolge
erkannt (hierbei erhält der 'Zähler'-Rechner auch den zu
übertragenden Dateinamen), wird versucht die gewünschte Datei
zu finden. Abhängig vom Sucherfolg, wird die Datei an den
'Anfrage'-Rechner übertragen (oder nicht). Danach geht der
Server wieder in Warteposition.
Der Server kann über
eine Konfigurationsdatei,
die er beim Programmstart einliest mit einigen Parametern
versorgt werden.
1.
dem Port, mit dem der Socket verbunden werden soll (willkürliche
Nummer, aber relativ groß, um nicht mit den Standardports in
Konflikt zu geraten!).
2.
dem Pfad, in dem die Dateien gesucht werden sollen.
3.
dem Prefix, das einer Datenanfrage vorausgehen muß (muß
identisch sein, mit dem Prefix, das der 'Anfrage'-Rechner schickt
(bzw. eigentlich anders herum)).
Durch
Versuch und Irrtum (try and error) wurde der Server soweit
stabil, daß inzwischen keine Programmabbrüche mehr auftreten,
wenn auf der 'Anfrage'-Seite Fehler auftreten. Ob der Server noch
läuft, kann mittels SSH mit folgendem Befehl kontrolliert
werden:
'ps
aux | grep python'
Erscheint hier nicht der Name
'Blocktest......', ist der Server nicht mehr bereit und muß mit
folgendem Befehl wieder gestartet werden:
nohup
'scriptname.sh' &
ACHTUNG: 'nohup' und das
abschließende '&“ veranlaßt, daß das Programm im
Hintergrund läuft und nicht abgebrochen wird, sobald die
SSH-Verbindung geschlossen wird.
Es
wird eigentlich nur eine einzige Textfolge akzeptiert, worauf die
Daten gesendet werden. ALLE anderen Sequenzen werden mit der
Server-Meldung 'Nicht erlaubt' ohne weiteren Kommentar an den
'Anfrage'-Rechner zurückgeschickt.
Die
Socket-Befehlsfolge wurde in ANLEHNUNG an HTTP-Header erstellt,
ist aber nicht mal ANSATZWEISE damit vergleichbar!