Start und Kontrolle von vzlogger
Mir ist von ein paar Tagen an einer remote Side der vzlogger gestorben. Da ich dies erst heute bemerkt habe, fehlen mir die Daten der letzten 4 Tage 🙁 Daher habe ich die Start/Stop Scripte und den Trigger für vzlogger etwas überarbeitet. Mit den neuen Skripten wird in regelmäßigen Abständen geprüft, ob der vzlogger noch läuft und gegebenenfalls nachgestartet.
1. Initial Start nach Power on und Reboot
Wenn ich den Raspberry (re-) starte, werden die Init Skripte der jeweiligen Runlevel durchlaufen. Per Default startet der Raspy in Runlevel 2. Checken kann man das mit dem Programm runlevel (no na ned)
root@pim:~# runlevel N 2 root@pim:~#
In /etc/init.d habe ich das Initial Skript (vzlogger_init.sh). Im Header des Skripts kann man die Abhängigkeiten beim Start festlegen.
#!/bin/bash ### BEGIN INIT INFO # Provides: vzlogger # Required-Start: $local_fs $network # Required-Stop: $local_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: vzlogger Server startscript. # Description: Starts our vzlogger server ### END INIT INFO #default stty -F /dev/lesekopf0 sane #mode einstellen stty -F /dev/lesekopf0 300 parenb -parodd cs7 -cstopb raw -echo #starte vzlogger /opt/vzlogger.c/vzlogger -c /etc/vzlogger.conf
Was mache ich in dem Skript. Als erstes wird das Interface meines USB Lesekopf von Udo auf die jeweiligen Default Werte zurückgesetzt. Dann werden die Werte für meinen Landis&Gyr gesetzt (300,7,1,even). Als letztes starte ich den vzlogger mit meiner Konfig. Nach dem Erstellen des Startskripts muss man noch die Abhängigkeiten des Skripts checken.
root@pim:/etc/rc2.d# update-rc.d vzlogger_init.sh defaults
Dies legt dann noch den erforderlichen Link unter /etc/rc2.d an.
2. Schnittstelle triggern
Als nächstes muss man dem USB Kopf noch sagen, dass er den Stromzähler dazu bewegen muss, Infos auszugeben 😉 In meinem Fall durch Senden von “/?!“ Dafür gibt es wiederum ein Skript (/opt/vzlogger/trigger.sh). Mit pgrep checke ich ob der vzlogger noch läuft, wenn ja wird das Interface nur angeregt. Wenn vzlogger nicht läuft, wird dieser zuerst gestartet und dann das Interface angeregt.
#!/bin/bash # script checkt ob vzlogger noch läuft. # Wenn ja, dann wird der Lesekopf angesprochen. # Wenn nicht, wird vzlogger mit der akt config gestartet # und dann der Lesekopf angesprochen if [ $(pgrep vzlogger) ] ; then # init senden echo $'\x2f\x3f\x21\x0d\x0a' > /dev/lesekopf0 else #starte vzlogger /opt/vzlogger.c/vzlogger -c /etc/vzlogger.conf sleep 5 # init senden echo $'\x2f\x3f\x21\x0d\x0a' > /dev/lesekopf0 fi;
Ich lese den Stromzähler jede Minute aus, dafür gibt es einen Eintrag im Crontab File
* * * * * /opt/vzlogger/trigger.sh
Nun sollten keine zeitliche Löcher mehr in der Datenbank vorkommen.