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!