Heute haben wir mal wieder ein neues Praxisbeispiel/ Anleitung für Euch. Nachdem wir in einigen Anleitungen die Basics und erste Anwendungen wie Office-PC beschrieben haben, geht es dem Hummingboard jetzt an die Wäsche 😉
Interresse?! Dann READ MORE
Bevor wir mit dem eigentlichen Tutorial beginnen, hier erstmal eine Liste an Komponenten die Ihr benötigt um das Hummingboard als Temperatur-Logger zu verwenden:
- Euer Hummingboard
- DS18S20 Temperatursensor(en)
- 4,7 kOhm Widerstand
- Steckboard (Zum herumprobieren, außer Ihr möchtet alles direkt verlöten)
- Jumperkabel (Männlein und Weiblein) (Gibt es im Internet in großen Packungen. Ihr benötigt einerseits Kabel mit Weiblein um diese auf das Hummingboard zu stecken und ein määnliches Ende um dieses auf das Steckboard zu stecken. Zudem benötigt Ihr weitere männliche Kabelenden um den/die Sensoren mit dem Steckboard zu verbinden, das andere Ende könnt Ihr abisolieren und mit dem Sensor verlöten)
Hier seht Ihr wie der Kabelstrang eines Sensores vor dem verlöten (obere 3 Kabel) und nach dem anlöten der männlichen Jumperstecker aussehen sollte.
Wenn Ihr diese Komponenten alle habt kann es auch schon los gehen 🙂
Basics
1. Schritt: Hardwareinformationen an den Kernel weiter reichen
Auch in diesem Tutorial wird das bereits bekannte Debian 8 Image verwendet, welches Ihr aus den anderen Anleitungen ggf. schon kennt. Sollte jedoch auch problemlos mit anderen Distributionen funktionieren 😉
Ladet Euch zunächst die für die GPIO-Nutzung angepassten *.dtb Files HIER herunter (Diese Dateien geben die erforderlichen Hardwareinformationen an den Kernel weiter). Anschließend entpackt Ihr die Daten in diesem Archiv und ersetzt die alten gleichnamigen Dateien in boot/dtb
durch die zwei neuen Dateien und startet anschließend euer System neu.
2. Schritt: Temperatursensor(en) mit dem Hummingboard verbinden
Obige Abbildung stellt exemplarisch den Anschlussplan für zwei DS18S20 Sensoren an das Hummingboard dar. (Farben können u.U. von denen eurer Sensoren abweichen, bitte kontrollieren!)
Die PIN-Belegung des Board ist HIER sehr gut dargestellt.
1. GND-Kabel des Sensors mit PIN 9 (GND) auf dem Board verbinden. Solltet Ihr mehrere Sensoren verbinden, könnt Ihr das Steckboard nutzen um diese dort parallel zu verbinden und dann mit dem Hummingboard zu verbinden (gilt auch für die weiteren Schritte).
2. Nun legt Ihr alle eure DATA-Kabel der Sensoren auch wieder parallel auf das Steckboard auf und verbindet diese mit dem PIN 7 (GPIO1) eures Hummingboards.
3. Selbes macht Ihr nun für die 3.3V Leitungen der Sensoren welche Ihr mit PIN 1 (3.3V) eures Hummingboards verbindet.
4. Nun steckt Ihr den Widerstand so auf das Steckboard, dass er eine Verbindung zwischen der DATA-Leitung und der 3.3V Leitung herstellt, wie es in der Abbildung dargestellt ist.
Nächste Abbildung zeigt die über das Experimentierboard mit dem Hummingboard verbundenen Kabel.
(Orange = Spannung 3.3 V)
(Gelb/ Grün = DATA)
(Weiss = GND)
Und hier nochmal das verdrahtete Board:
Nun sollte euer Board in wenigen Sekunden erkannt haben, dass Ihr Temperatursensoren angeschlossen habt. Eine Überprüfung erfolgt folgendermaßen:
Wechselt mit folgendem Befehl in das Verzeichnis /sys/bus/w1/devices/:
cd /sys/bus/w1/devices/
Lasst euch den Inhalt anzeigen:
ls -h
Als Ausgabe solltet Ihr zum einen w1_bus_master1 erhalten und zusätzlich weitere Einträge wie 28-0115536864ff für jeden Eurer Sensoren.
Um diese Sensoren nun mal testweise abzufragen, könnt Ihr diesen Befehl nutzen:
1.Sensor:
cat /sys/bus/w1/devices/28-0115536864ff/w1_slave
28-0115536864ff durch Eure ID ersetzen!
Ausgabe:
70 01 80 80 1f ff 80 80 7a : crc=7a YES 70 01 80 80 1f ff 80 80 7a t=23000
t=23000 steht hierbei für 23,000 °C (Angezeigten Wert durch 1000 teilen)
Mehrere Sensoren:
cat /sys/bus/w1/devices/28-0115536864ff/w1_slave /sys/bus/w1/devices/28-0215535cddff/w1_slave
28-0115536864ff und 28-0215535cddff durch Eure IDs ersetzen
Ausgabe:
70 01 80 80 1f ff 80 80 7a : crc=7a YES 70 01 80 80 1f ff 80 80 7a t=23000 58 01 80 80 1f ff 80 80 f8 : crc=f8 YES 58 01 80 80 1f ff 80 80 f8 t=21500
In diesem Fall zeigt der eine Sensor eine Temperatur von 23°C und der andere eine von 21,5°C an.
Webseite erstellen
Da diese Art die Werte auszugeben auf Dauer jedoch nicht besonders praktikabel ist, erstellen wir uns nun Schritt für Schritt eine kleine Seite für den Browser, welche in regelmäßigen Abständen den aktuellen Wert und den vorhergehenden Verlauf anzeigt.
1. Schritt: Installieren der erforderlichen Pakete
Um das von uns gewünschte Ziel zu erreichen, nutzen wir zum einen eine RRD-Datenbank, welche die Messwerte aufnimmt und zusätzlich PHP um das ganze dann über die Browseranzeige bequem zu visualisieren.
Hierzu folgenden Befehl ausführen:
sudo apt-get install php5-cli rrdtool lighttpd vim php5-cgi
2. Schritt: Anlegen des Ordners für unsere Datenbanken
Wir erstellen mit folgenden Befehl den Ordner rrd im Verzeichnis root:
mkdir /root/rrd
3. Schritt: Erzeugen der Datenbank(en)
Im Folgenden seht Ihr das Skript für das Anlegen von zwei Datenbanken für die zwei Sensoren 28-0115536864ff und 28-0215535cddff, welche alle 60 Sekunden aktualisiert werden. Diesen Code könnt Ihr nach Belieben erweitern oder reduzieren, sollte dies erforderlich sein.
Nicht vergessen, die Sensorbezeichnungen an Eure anzupassen!
rrdtool \ create /root/rrd/28-0115536864ff.rrd --step 60 \ DS:28-0115536864ff:GAUGE:120:U:U \ RRA:AVERAGE:0.5:1:2160 \ RRA:AVERAGE:0.5:5:2016 \ RRA:AVERAGE:0.5:15:2880 \ RRA:AVERAGE:0.5:60:8760 \ RRA:MIN:0.5:1:2160 \ RRA:MIN:0.5:5:2016 \ RRA:MIN:0.5:15:2880 \ RRA:MIN:0.5:60:8760 \ RRA:MAX:0.5:1:2160 \ RRA:MAX:0.5:5:2016 \ RRA:MAX:0.5:15:2880 \ RRA:MAX:0.5:60:8760 rrdtool \ create /root/rrd/28-0215535cddff.rrd --step 60 \ DS:28-0215535cddff:GAUGE:120:U:U \ RRA:AVERAGE:0.5:1:2160 \ RRA:AVERAGE:0.5:5:2016 \ RRA:AVERAGE:0.5:15:2880 \ RRA:AVERAGE:0.5:60:8760 \ RRA:MIN:0.5:1:2160 \ RRA:MIN:0.5:5:2016 \ RRA:MIN:0.5:15:2880 \ RRA:MIN:0.5:60:8760 \ RRA:MAX:0.5:1:2160 \ RRA:MAX:0.5:5:2016 \ RRA:MAX:0.5:15:2880 \ RRA:MAX:0.5:60:8760
4. Schritt: Erstellen des Verzeichnisses für unser Cron-Skript
mkdir /root/sh
5. Schritt: Skript anlegen
Wechselt in den erstellten Ordner mit:
cd /root/sh
Erstellt eine neue Datei (w1_to_rrd.php) und füllt sie mit folgendem Code, auch hier nicht vergessen die Sensor-IDs anzupassen!
#!/usr/bin/php <?php $teilen = '1000'; // 28-0115536864ff $temp01 = exec('cat /sys/bus/w1/devices/28-0115536864ff/w1_slave |grep t='); $temp01 = explode('t=',$temp01); $temp01 = $temp01[1] / 1000; $temp01 = round($temp01,2); //print $temp01 . PHP_EOL; exec("/usr/bin/rrdtool update /root/rrd/28-0115536864ff.rrd N:$temp01"); // 28-0215535cddff $temp02 = exec('cat /sys/bus/w1/devices/28-0215535cddff/w1_slave |grep t='); $temp02 = explode('t=',$temp02); $temp02 = $temp02[1] / 1000; $temp02 = round($temp02,2); //print $temp02 . PHP_EOL; exec("/usr/bin/rrdtool update /root/rrd/28-0215535cddff.rrd N:$temp02"); ?>
Mit folgendem Befehl ändern wir noch die Eigenschaften der Datei, sodass diese ausführbar ist:
sudo chmod +x w1_to_rrd.php
Noch passiert aber nichts, ausser wir führen selbst diese Datei aus. Um uns diese Arbeit abzunehmen nutzen wir einen Cronjob.
Öffnet die Crontab-Dabei mit folgendem Befehl:
crontab -e
Und fügt folgende Zeile hinzu:
* * * * * php5 /root/sh/w1_to_rrd.php > /dev/null 2>&1
6. Schritt: Anlegen unseres Verzeichnisses für das Webportal
Ordner erstellen:
mkdir /var/www/rrd
7. Schritt: Erstellen der Datei, welche aus den RRD-Datenbanken Bilder erstellt
Glücklicherweise besitzt das rrdtool eine Funktion zum Erstellen der gewünschten Diagramme, diese nutzen wir nun um
– Einzeldiagramme für jeden Sensor und
– ein Diagramm mit allen Daten zu erzeugen.
#!/bin/sh #28-0115536864ff nice -n 19 /usr/bin/rrdtool graph /var/www/rrd/0115536864ff.png -a PNG -b 1024 --start -86400 -A \ -t "Temperaturverlauf Sensor 1" --vertical-label "Temperatur [°C]" -w 1024 -h 400 \ DEF:g1=/root/rrd/28-0115536864ff.rrd:28-0115536864ff:AVERAGE \ DEF:gmin=/root/rrd/28-0115536864ff.rrd:28-0115536864ff:MIN \ DEF:gmax=/root/rrd/28-0115536864ff.rrd:28-0115536864ff:MAX \ VDEF:g1a=g1,LAST \ VDEF:gmina=gmin,MINIMUM \ VDEF:gdurch=gmin,AVERAGE \ VDEF:gmaxa=gmax,MAXIMUM \ LINE1:g1#ff0000:"Sensor 1 (0115536864ff)\n" \ GPRINT:g1a:"Aktuell\: %10.2lf °C\n" \ GPRINT:gdurch:"Schnitt\: %10.2lf °C\n" \ GPRINT:gmina:"Min\: %10.2lf °C\n" \ GPRINT:gmaxa:"Max\: %10.2lf °C\n" > /dev/null #28-0215535cddff nice -n 19 /usr/bin/rrdtool graph /var/www/rrd/0215535cddff.png -a PNG -b 1024 --start -86400 -A \ -t "Temperaturverlauf Sensor 2" --vertical-label "Temperatur [°C]" -w 1024 -h 400 \ DEF:g1=/root/rrd/28-0215535cddff.rrd:28-0215535cddff:AVERAGE \ DEF:gmin=/root/rrd/28-0215535cddff.rrd:28-0215535cddff:MIN \ DEF:gmax=/root/rrd/28-0215535cddff.rrd:28-0215535cddff:MAX \ VDEF:g1a=g1,LAST \ VDEF:gmina=gmin,MINIMUM \ VDEF:gdurch=gmin,AVERAGE \ VDEF:gmaxa=gmax,MAXIMUM \ LINE1:g1#000080:"Sensor 2 (0215535cddff)\n" \ GPRINT:g1a:"Aktuell\: %10.2lf °C\n" \ GPRINT:gdurch:"Schnitt\: %10.2lf °C\n" \ GPRINT:gmina:"Min\: %10.2lf °C\n" \ GPRINT:gmaxa:"Max\: %10.2lf °C\n" > /dev/null #Alle Sensoren in einem Diagramm nice -n 19 /usr/bin/rrdtool graph /var/www/rrd/allsensors.png -a PNG -b 1024 --start -86400 -A \ -t "Übersicht alle Sensoren" --vertical-label "Temperatur [°C]" -w 1024 -h 400 \ --start -3d --end now \ DEF:sensor1=/root/rrd/28-0115536864ff.rrd:28-0115536864ff:AVERAGE \ DEF:sensor2=/root/rrd/28-0215535cddff.rrd:28-0215535cddff:AVERAGE \ LINE1:sensor1#ff0000:"Sensor 1(0115536864f)" \ LINE2:sensor2#000080:"Sensor 2 (0215535cddff)" > /dev/null
Auch hier ist es erforderlich sämtliche Sensor-IDs durch Eure zu ersetzen. Anschließend speichert Ihr diese Datei im Ordner /root/sh unter dem Namen create_img.sh ab und macht Sie mit folgendem Befehlt ausführbar:
sudo chmod +x /root/sh/create_img.sh
Nun tragen wir diese Datei noch in die crontab ein und lassen sie minütlich aktualisieren.
Crontab-Datei öffnen:
crontab -e
Folgende Zeile hinzufügen:
*/1 * * * * /root/sh/create_img.sh > /dev/null 2>&1
8. Schritt: Erstellen des Webportals:
Um die Daten nun im Browser anzeigen zu können, nutzen wir das folgende Skript:
Hummingboard Temperatur-Logger <h1>Hummingboard Temperatur-Logger</h1> <h2>Übersicht Temperaturverläufe</h2> Für jeden eingerichteten Sensor wird hier der Temperaturverlauf dargestellt, zusätzlich ein Übersichtsdiagramm mit allen Temperaturkurven. Um weitere Sensoren anzeigen zu können, einfach cr\ ate_img.sh in /root/sh/ erweitern. <?php foreach (glob("*.png") as $file) { print 'DATEINAME: ' . $file . ' ' . '<img src="' . $file . '" alt="" /> ' . ' '; }; ?>
Diese Datei speichern wir nun in /var/www/rrd und dem Namen index.php ab.
9. Schritt: Letzte Einstellungen bis zum Ziel
————————————-
Optional:
So wie unsere lighttpd.conf momentan eingestellt ist müsstet Ihr folgendes eingeben um das Webportal zu erreichen:
IPVONEUREMHUMMINGBOARD/rrd/index.php
Solltet Ihr keine weiteren Webportale im Hauptverzeichnis nutzen, könnt Ihr Euch die Welt ein wenig einfacher machen, indem Ihr das root-Verzeichnis anpasst:
Datei lighttpd.conf in /etc/lighttpd/ öffnen und folgende Zeile
server.document-root = "/var/www"
ändern zu
server.document-root = "/var/www/rrd"
————————————-
Nun bringen wir dem Server noch PHP bei 😉
lighty-enable-mod fastcgi lighty-enable-mod fastcgi-php /etc/init.d/lighttpd force-reload
…FERTIG 🙂
Nun solltet Ihr euer Webportal innerhalb eures Netzwerkes
unter
IPVONEUREMHUMMINGBOARD/rrd/index.php (WENN OPTIONALEN SCHRITT ÜBERSPRUNGEN)
oder unter
IPVONEUREMHUMMINGBOARD/index.php
erreichen und solltet etwa dieses Bild sehen:
Viel Spaß mit eurem neuen Temperatur-Logging-System 🙂