RRDtool HowTo
Bakgrund
Detta är en fortsättning på HowTo OWFS skulle man kunna säga och syftet är att kunna göra sin första graf över temperaturen. Detta är inte så knepigt, eller i alla fall inte lika knepigt som att få igång OWFS! Dock är inte RRDtool helt solklart direkt från början, det skiljer sig lite från en traditionell databas. Antingen så gör ni guiden uppifrån och ned utan att ställa frågor, eller så börjar ni med att läsa på lite om RRDtool från början, se Läs vidare nedan.
Mål
Få igång vår första loggning av temperatur och spara det till en RRD databas, samt att rita en enkel graf med hjälp av RRDtool
Programvaror
Beskrivning
Jag förutsätter att du har OWFS igång redan (eller annan programvara), för att kunna läsa av ditt 1-wire nätverk. Om du inte har det så läs HowTo OWFS först. Den här är gjord på Ubuntu, men som vanligt så bör det funka även på andra distributioner.
Till att börja med så måste vi installera RRDtool, och även stöd för Perl.
sudo apt-get install rrdtool perl librrdp-perl librrds-perl
Bör inte vara några konstigheter
Sen för att visa själva grafen så behövs även Apache2 installerat. Om ni inte redan har den igång installera den då
sudo apt-get install apache2
Sen vill vi skapa katalogerna där vi tänkt spara rrddata'n och script katalogen.
sudo mkdir ~/bin sudo mkdir ~/rrddata
Jag har valt att lägga skripten i /home/anders/bin/ och rrd-filer (databaser) i /home/anders/rrddata/. Ni skall givetvis skriva ert användarnamn istället för anders. Alternativt om ni väljer att spara skripten/filerna någon annanstans så får ni anpassa de sökvägar som berörs nedan.
Sen skall vi skapa vår första rrd databas. Antingen så kan man skriva allt direkt i prompten, men jag tycker det är lättare att skapa ett enkelt shell script för att då har man kvar vad man gjort. ;-) Vissa kanske tycker att det är en om väg, men i slutändan lönar det sig, i alla fall i utbildningssyfte.
cd /home/anders/rrddata/ sudo nano create_rrd.sh
Lägg till följande...
#!/bin/bash # Script to create rrd-file # 24h with 2,5 min resolution # 7d with 5 min resolution # 1y with 10 min resolution # 20y with 1h resolution directory="/home/anders/rrddata/" filename="outside_temp.rrd" # Check i file already exists if [ ! -f "$directory$filename" ] then # File doesn't exist, create new rrd-file echo "Creating RRDtool DB for outside temp sensor" rrdtool create $directory$filename \ --step 150 \ DS:outsidetemp:GAUGE:300:-50:60 \ RRA:AVERAGE:0.5:1:576 \ RRA:AVERAGE:0.5:2:2016 \ RRA:AVERAGE:0.5:4:52560 \ RRA:AVERAGE:0.5:24:175200 \ RRA:MAX:0.5:1:5760 \ RRA:MAX:0.5:2:2016 \ RRA:MAX:0.5:4:52560 \ RRA:MAX:0.5:24:175200 \ RRA:MIN:0.5:1:5760 \ RRA:MIN:0.5:2:2016 \ RRA:MIN:0.5:4:52560 \ RRA:MIN:0.5:24:175200 echo "Done!" else echo $directory$filename" already exists, delete it first." fi
...och spara sen. (i nano, CTRL-X) Tidsrymden och upplösningen på den sparade datan kanske är i överkant, men det kan ni ändra sen om ni vill.
Ändra så att vi får kör rättigheter på scriptet.
sudo chmod +x create_rrd.sh
Kör scriptet
create_rrd.sh
och förhoppningsvis så skall det ha skapats en outside_temp.rrd fil.
Om man får felmeddelandet "command not found", kan man prova att sätta ./ före
./create_rrd.sh
Nu har vi själva filen för att spara information i. Nu skall vi skapa script som loggar temperaturen.
cd /home/anders/bin sudo nano get_temp.sh
Lägg till följande
#!/bin/bash OutsideTempSensor="10.51777C010800" RRDDataDirectory="/home/anders/rrddata/" RRDDataFile="outside_temp.rrd" # Get temps form OWFS OutsideTemp=`cat /mnt/1wire/$OutsideTempSensor/temperature|sed -e s/" "//g|awk '{$1=$1 + 0.005;printf "%.2f", $1}'` #Update RRD database rrdtool update $RRDDataDirectory$RRDDataFile N:$OutsideTemp echo $OutsideTemp
och spara.
Ändra så att vi får kör rättigheter på scriptet.
sudo chmod +x get_temp.sh
Nu har vi en rrd fil som sparar information, vi har ett script som hämtar information och uppdaterar rrd filen, återstår gör biten med att rita en graf. Så nu fixar vi det! Detta görs med ett Perl script.
sudo nano graph_temp.pl
lägg till följande
#!/usr/bin/perl use RRDs; my $cur_time = time(); my $start_time = $cur_time - 86400; # set end time to 24 hours ago RRDs::graph "/var/www/graph_temp.png", "--start= $start_time", "--end= $cur_time", "--title= Temp ute", "--height= 300", "--width= 500", "--vertical-label= °C", "DEF:OutsideTemp=/home/anders/rrddata/outside_temp.rrd:outsidetemp:AVERAGE", "COMMENT:\t\t\t\tNu Medel Max Min\\n", "HRULE:0#0000FF", "LINE2:OutsideTemp#0000FF:Ute\t\t\t", "GPRINT:OutsideTemp:LAST:%6.1lf", "GPRINT:OutsideTemp:AVERAGE:%6.1lf", "GPRINT:OutsideTemp:MAX:%6.1lf", "GPRINT:OutsideTemp:MIN:%6.1lf\\n"; my $err=RRDs::error; if ($err) {print "problem generating the graph: $err\n";} print "Done!\n"
Det här läser från vår rrd fil och skapar en graf med senaste 24h i /var/www/
För att det här skall "gå av sig själv" så måste vi lägga till två jobb i crontab för att det skall funka. Öppna crontab för redigering
sudo crontab -e
lägg till
*/2.5 * * * * /home/anders/bin/get_temp.sh */2.5 * * * * export LANG=sv_SE.utf8 && /home/anders/bin/graph_temp.pl
och spara.
Om nu allt funkar som det skall så loggas temperatur och det skapas en ny graf var 5:e minut. För att se grafen gå till http://localhost/graph_temp.png eller http://mindoman/graph_temp.png
Läs vidare
Som jag skrev ovan så är det inte självklart hur RRDtool funkar, i alla fall tycker inte jag det. Så tipset för att komma vidare är att läsa på deras hemsida, och speciellt deras rrdtutorial. Läser ni den och gör exemplen så har ni kommit en bra bit på vägen. Sen är det bara att ändra/lägga_till/testa i era script för att se vad som händer ;-). Mer info exakt vad dom olika delarna i skapandet av rrd databasen och graferna betyder läser ni om i RRDtools dokumentation. Om ni vill gå vidare och logga er elförbrukning sen så kan jag rekommendera Eriks guide Mäta elförbrukning med rrdtool.
Det här är ETT sätt att få ingång loggning, det går att göra på hur många olika sätt som helst. Kanske inte är det enklaste eller bästa sättet som jag beskrivit men det bör fungera och hjälpa er att komma igång. Som alltid så kan det finnas felaktigheter. Hittar ni några så skriv gärna en kommentar så ser jag till att hålla HOWTO'n uppdaterad. Håll till godo (...än en gång)! ;-)