Hier werden mit einfachen Sensoren Temperaturen gemessen und auf dem Rechner als Website angezeigt.

Als erstes definiere ich eine RRD (Round-Robin-Database). Hierzu erstelle ich ein Script mit dem Namen Xbodentemp_Create.sh.

 

rrdtool create /media/usb0/temp/XBodenTemperaturAufzeichnung.rrd --step 300 \
DS:temp:GAUGE:600:-30:100 \ RRA:AVERAGE:0.5:1:1200 \ RRA:MIN:0.5:12:2400 \ RRA:MAX:0.5:12:2400 \ RRA:AVERAGE:0.5:12:2400

Nach der Ausführung des Scripts wurde die RRD-Datei erzeugt und kann nun mit Werten gefüllt werden. Dazu wird ein Script mit dem Namen  Xbodentempread.php erstellt.

#!/usr/bin/php
// Auslesen des Sensor mit der ID 28-000009577af8
$temperatur01 = exec('cat /sys/bus/w1/devices/28-000009577af8/w1_slave |grep t=');
// Aufsplitten der zurückgegebenen Werte sodass wir diese verarbeiten können
$temperatur01 = explode('t=',$temperatur01);
// Den Wert des Sensors durch 1000 teilen
$temperatur01 = $temperatur01[1] / 1000;
// Auf zwei Stellen nach dem Komma runden
$temperatur01 = round($temperatur01,2);
//Temperatur an rrdtool zum speichern übergeben
exec("/usr/bin/rrdtool update /media/usb0/temp/TemperaturAufzeichnung.rrd N:$temperatur01");
?>

Die entsprechenden Werte werden in einem weiteren Script zur Erzeugung der passenden Grafiken verarbeitet. Dazu wird das Script Xbodentempgraphic.sh verwendet.

#!/bin/sh
# Grafik erstellen
rrdtool graph /var/www/html/XBodenTemperaturTag.png  -s 'now - 1 day' -e 'now' \
 DEF:temp=/media/usb0/temp/XBodenTemperaturAufzeichnung.rrd:temp:AVERAGE \
 LINE2:temp#000000:Boden\
rrdtool graph /var/www/html/XBodenTemperaturWoche.png  -s 'now - 1 week' -e 'now' \
 DEF:temp=/media/usb0/temp/XBodenTemperaturAufzeichnung.rrd:temp:AVERAGE \
 LINE2:temp#000000:Boden

 Nun muss die Datenbank regelmässig mit Daten gefüttert werden. Dies wird mit einem Cronjob realisiert.

Also in der /etc/crontab die entsprechenden Einträge vornehmen. Alle 10 Minuten wird die Temperatur ermittelt und die entsprechende Grafik erzeugt.

*/10 * * * * root /home/pi/Share/skripts/Xbodentempread.php
*/10 * * * * root /home/pi/Share/skripts/Xbodentempgraphic.sh

Den Cronjob neu laden und starten nicht vergessen.

sudo service cron reload
sudo service cron restart

Mit Hilfe einer CSS-Datei wird die Darstellung im Web vereinfacht. Ich habe die Datei einfach als style.css im Verzeichnis /var/ww/html gespeichert.

Die passende index.php muß auch noch erzeugt und im Verzeichnis /var/www/html gespeichert werden.

Und so stellt sich das dann dar:

 Gartentemperatur

Dies ist natürlich nur die lokale Anzeige im lokalen Netzwerk auf dem Raspberry. Aber was spricht dagegen, diese Grafik regelmäßig auf einer öffentlichen Webseite auszugeben?

Nichts. Also mittels Cronjob einfach die entsprechende Seite mit aktuellen Bildern versorgen. Hier die Seite: Bodentemperatur

Man kann aber auch mit mehreren Sensoren Daten erfassen und die Daten für verschiedene Grafiken verwenden:

 

Stundentemperatur
Stundentemperatur
Tagesverlauf
Tagestemperatur
Wochentemperatur
Wochentemperatur
Monatsverlauf
Monatstemperaturen
Jahresverlauf
Jahresverlauf

 

Weitere Möglichkeit:

RRD-Datenbank erzeugen:

rrdtool create /home/pi/Share/hd/Temperatur_DS18B20/DS18B20.rrd --step 300 \ DS:temp:GAUGE:600:-30:50 \ RRA:AVERAGE:0.5:1:12 \ RRA:AVERAGE:0.5:1:288 \ RRA:AVERAGE:0.5:12:168 \ RRA:AVERAGE:0.5:12:720 \ RRA:AVERAGE:0.5:288:365

Dieser Befehl erstellt die Datenbank DS18B20 mit einem Intervall von 5min (300s) und einem Temperaturbereich von -30 bis 50° C. Es werden die Durchschnittswerte für die einzelnen Perioden berechnet.

Dieses Bash-Script erzeugt dann aus der  Datenbank die Grafiken für die Darstellung im Web.

#!/bin/bash
RRDPFAD="/home/pi/Share/hd/Temperatur_DS18B20/"
RAWCOLOUR="#FF0000"
TRENDCOLOUR="#0000FF"
#Stunde
rrdtool graph $RRDPFAD/DS18B20_Stunde.png --start -6h \
DEF:temp=$RRDPFAD/DS18B20.rrd:temp:AVERAGE \
CDEF:trend=temp,1800,TREND \
LINE2:temp$RAWCOLOUR:"Stündlich" \
LINE1:trend$TRENDCOLOUR:"30 min Durchschnitt"
#Tag
rrdtool graph $RRDPAD/DS18B20_Tag.png --start -1d \
DEF:temp=$RRDPFAD/DS18B20.rrd:temp:AVERAGE \
CDEF:trend=temp,21600,TREND \
LINE2:temp$RAWCOLOUR:"Täglich" \
LINE1:trend$TRENDCOLOUR:"6h Durchschnitt"
#Woche
rrdtool graph $RRDPAD/DS18B20_Woche.png --start -1w \
DEF:temp=$RRDPFAD/DS18B20.rrd:temp:AVERAGE \
LINE2:temp$RAWCOLOUR:"Wöchentlich" \
#Monat
rrdtool graph $RRDPFAD/DS18B20_Monat.png --start -1m \
DEF:temp=$RRDPFAD/DS18B20.rrd:temp:AVERAGE \
LINE1:temp$RAWCOLOUR:"Monatlich" \
#Jahr
rrdtool graph $RRDPFAD/DS18B20_Jahr.png --start -1y \
DEF:temp=$RRDPFAD/DS18B20.rrd:temp:AVERAGE \
LINE1:temp$RAWCOLOUR:"Jährlich" \
#Grafiken auf Webserver kopieren

Die ermittelten Werte werden mit einem Perl-Script (Lese_Temperatur.pl) in der Datenbank gespeichert.
$mods = `cat /proc/modules`;
if ($mods =~ /w1_gpio/ && $mods =~ /w1_therm/)
{
print "Die Module wurden bereits geladen \n";
}
else
{
print "Lade Module \n";
$mod_gpio = `sudo modprobe w1-gpio`;
$mod_them = `sudo modprobe w1-therm`;
}

$sensor_temp = `cat /sys/bus/w1/devices/10-*/w1_slave 2>&1`;
if ($sensor_temp !~ /No such file or directory/)
{
if ($sensor_temp !~ /NO/)
{
$sensor_temp =~ /t=(-?\d+)/i;
$temperatur= ($1/1000);
$rrd_out = `/usr/bin/rrdtool update /home/pi/Share/hd/Temperatur_DS18B20/DS18B20.rrd N:$temperatur`;
print "DS18B20: = $temperatur\n";
exit;
}
die "Fehler beim Auslesen der Messdaten";
}

Nun per Cronjob die Scripte jede Minute starten.

Nach ein paar Stunden können wir das Ergebnis betrachten:

hour

day

 

 

 

 

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Ok Ablehnen