Falls man direkten Zugriff über den Browser auf die Dateien haben möchte, sollte vorher auf dem Pi noch ein Webserver installiert werden. Dafür kann man den Apache2 oder auch den Lighttpd verwenden.
Siehe hierzu auch http://sebastianhemel.blogspot.de/2015/09/raspberry-pi-webserver-installieren.html
Installation & Konfiguration von MRTG/RRD/SNMP:
Installation der benötigten Pakete für MRTG und RRD.
sudo apt-get install mrtg mrtg-rrd rrdtool snmp snmpdAnschließend kommt die Frage, ob root der Eigentümer der Datei /etc/mrtg.cfg sein soll. Hier sollte NEIN ausgewählt werden.
Anschließend muss ein Verzeichnis angelegt werden, in dem die RRD Datenbank und die PNG-Grafiken abgelegt werden können. Dies muss im öffentlichen WWW-Ordner vom Webserver erfolgen.
/var/ $ sudo mkdir wwwAnschließend hat man die folgende Ordner-Struktur:
/var/www $ sudo mkdir mrtg
/var/www/mrtgJetzt müssen wir noch das cgi-bin Verzeichnis erstellen, auch dieses liegt im WWW-Ordner. Nun kann ein Symlink (https://de.wikipedia.org/wiki/Symbolische_Verknüpfung) zur mrtg-rrd.cgi erstellt werden. Hierrüber kann dann später die generierte HTML-Seite aufgerufen.
sudo mkdir -p /var/www/cgi-binIm Nachgang müssen nun die Rechte für den Lighttpd-Benutzer und die Gruppe gesetzt werden:
sudo ln -s /usr/lib/cgi-bin/mrtg-rrd.cgi /var/www/cgi-bin/mrtg-rrd.cgi
sudo chown -R www-data:www-data /var/www/*Da es bei SNMP noch einen Fehler gibt, siehe auch http://penguinbliss.com/?p=239, muss noch die folgende Datei angepasst werden:
sudo sed -i 's|import Socket6;|Socket6->import(qw(inet_pton getaddrinfo));|' /usr/share/perl5/SNMP_Session.pmBevor wir mit der Erstellung des Diagramms starten, sollte von der "alten" mrtg.cfg eine Sicherheitskopie angelegt werden.
sudo mv /etc/mrtg.cfg /etc/mrtg.cfg.bak
Temperaturwerte für RRD bereitstellen
Hierzu wird ein Skript benötigt. Diese kann man z.B. im Home-Verzeichnis ablegen.mkdir ~/graphtemp-mrtg-update.sh (wget https://www.shemel.de/download/raspberry/temp-mrtg-update.sh)
#!/bin/sh
# Temperatur von Sensor auslesen
# (c) Sebastian Hemel
sensor="/sys/bus/w1/devices/28-00000511590a/w1_slave"
if [ -f $sensor ]
then
sensorraw=`cat $sensor`
crc=`echo $sensorraw | cut -f2 -d= | cut -c4-6`
if [ "$crc" = "YES" ]
then
tempraw=`echo $sensorraw | cut -f3 -d=`
temp=`echo "scale=3; $tempraw / 1000" | bc`
#temp=`echo "scale=2; $tempraw / 1000" | bc`
# Update database
#echo $temp
printf "%04.2f" $temp
echo 0
echo 0
echo temperature
fi
fi
Die Datei muss ausführbar sein:
chmod 750 /home/pi/graph/temp-mrtg-update.shEs ist zu beachten, dass die ID eures Sensors hinterlegt werden muss!
Das Script sollte die folgenden Werte liefern:
pi@pi-ingolstadt ~/graph $ ./temp-mrtg-update.sh
3.560
0
temperature
Erstellen des Diagramms vom Temperatursensor:
Zu Beginn muss eine neue mrtg.cfg erstellt werden, dies erfolgt mit dem Befehl:
sudo cfgmaker --global "Options[_]: growright" --global "IconDir: /mrtg" --global "WriteExpires: Yes" --global "Language: german" --global "RunAsDaemon: yes" --global "EnableIPv6: no" --global "LogFormat: rrdtool" --global "Interval: 1" '--if-filter=$if_admin && $default_iftype' --output /etc/mrtg.cfg public@localhostJetzt kann der folgende Teil in die sudo nano /etc/mrtg.cfg übernommen werden:
### Global Config Options
# for UNIX
# WorkDir: /home/http/mrtg
# for Debian
HtmlDir: /var/www/mrtg
WorkDir: /var/www/mrtg
Imagedir: /var/www/mrtg
# or for NT
# WorkDir: c:\mrtgdata
### Global Defaults
# to get bits instead of bytes and graphs growing to the right
# Options[_]: growright, bits
EnableIPv6: no
Options[_]: growright
IconDir: /mrtg
WriteExpires: Yes
Language: german
RunAsDaemon: yes
EnableIPv6: no
LogFormat: rrdtool
Interval: 1
#####################################################################
# System: DS18S20 Temperatur Sensor
# Contact: root
# Location: attached to Raspberry Pi
#####################################################################
### DS18S20 Temperatur SensorIngolstadt
TimeStrPos[temp_ingolstadt]: RU
Target[temp_ingolstadt]: `/home/pi/graph/temp-mrtg-update.sh`
Options[temp_ingolstadt]: gauge,growright,nopercent,expscale,transparent
Title[temp_ingolstadt]: Temperatur Ingolstadt
PageTop[temp_ingolstadt]: <h1>Temperatur Ingolstadt</h1>
MaxBytes[temp_ingolstadt]: 60
#Unscaled[temp_ingolstadt]: ymwd
Step[temp_ingolstadt]: 60
Legend1[temp_ingolstadt]: Gemessene Temperatur in Ingolstadt
LegendI[temp_ingolstadt]: Aussentemperatur
LegendO[temp_ingolstadt]:
YLegend[temp_ingolstadt]: Grad Celsius
ShortLegend[temp_ingolstadt]: Grad °C
Die restlichen Einträge habe ich auskommentiert, da ich nur das Temperatur Diagramm haben möchte.
Bei Bedarf können noch die MRTG-Icons in den WWW Ordner vom Webserver kopiert werden:
sudo cp /usr/share/mrtg/* /var/www/mrtg/Jetzt kann durch Starten von MRTG überprüft werden, ob die Konfiguration erfolgreich durchgeführt wurde.
sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfgMöchte man MRTG erneut starten, muss vorher der bestehende Prozess (Prozess-ID siehe auch /etc/mrtg.pid) beendet werden:
ps -aux | grep mrtg
sudo kill -9 16391
sudo env LANG=C /usr/bin/mrtg /etc/mrtg.cfg
Probleme mit negativen Temperaturwerten beheben
Da MRTG keine negativen Werte erlaubt, kann man diese nachträglich (mit rrdtool) mit dem folgenden Befehlen im Verzeichnis /var/www/mrtg anpassen.sudo rrdtool tune temp_ingolstadt.rrd --minimum ds0:-20Jetzt werden Temperaturen bis - 20 Grad Celsius unterstützt.
sudo rrdtool tune temp_ingolstadt.rrd --minimum ds1:-20
Der Aufruf des Diagramms erfolgt über den Browser http://192.168.1.110/cgi-bin/mrtg-rrd.cgi
Hinweise: Kommt es beim Aufruf der Datei zu einem "500 - Internal Server Error", wurden die Rechte chmod +x nicht gesetzt. Führte dies nicht zum Erfolg, sollte man die syslog Datei auslesen. Dies geht mit dem Befehl /var/log $ tail -f syslog . Erscheint hier die Meldung "Can't locate CGI.pm in @INC (you may need to install the CGI module)", muss noch das folgenden Paket installiert werden: sudo apt-get install libcgi-pm-perl
Achtung es gibt ein Fehler im mrtg-rrd Package: https://bugs.launchpad.net/ubuntu/+source/mrtg-rrd/+bug/1618800
Nov 1 13:49:34 raspberrypi lighttpd[538]: Can't use an undefined value as an ARRAY reference at /var/www/cgi-bin/mrtg-rrd.cgi line 499.
Ich musste folgende Zeilen der "mrtg-rrd.cgi" anpassen:
Hinweis: Vorher am Besten den MRTG Prozess wieder beenden (siehe oben).
Aug 7 21:49:01 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 499.
# return @{$target->{args}} if defined @{$target->{args}};
return @{$target->{args}} if ($target->{args} && @{$target->{args}});
Aug 7 21:52:28 raspberrypi-zero lighttpd[461]: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 525.
# %{$target->{options}} = ()
# unless defined %{$target->{options}};
%{$target->{options}} = ()
unless ($target->{options} && %{$target->{options}});
Aug 7 21:58:11 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 914.
# if (defined @{$directories{$dir}{subdir}}) {
# $subdirs_printed = 1
if ($directories{$dir}{subdir} && @{$directories{$dir}{subdir}}) {
$subdirs_printed = 1;
Aug 7 22:01:35 raspberrypi-zero lighttpd[461]: Can't use 'defined(@array)' (Maybe you should just omit the defined()?) at /var/www/cgi-bin/mrtg-rrd.cgi line 929.
# if (defined @{$directories{$dir}{target}}) {
if ($directories{$dir}{subdir} && @{$directories{$dir}{subdir}}) {
Bei Bedarf kann das Diagramm noch auf einen anderen Server hochgeladen werden:
crontab -e: Aufruf per localhost, damit die temp_ingolstadt-day.png Datei erstellt wird (alle 7min).
*/7 * * * * curl http://localhost/cgi-bin/mrtg-rrd.cgi/temp_ingolstadt.html >/dev/null 2>&1
temp.sh: anpassen, siehe auch http://sebastianhemel.blogspot.de/2015/01/temperatursensor-ds18b20-raspberry-pi.html
ncftpput -f /home/pi/ftp.cfg /temp /var/www/mrtg/temp_ingolstadt-day.png
Danke an das Tutorial von http://kopfkino.irosaurus.com/tutorial-monitoring-mit-mrtg-rrd-support-auf-raspberry-pi-debian-wheezy, welches als Basis für diesen Eintrag diente.
Keine Kommentare:
Kommentar veröffentlichen