Detta är en fortsättning på HOWTO: Installera OWFS 2.7p10 på Ubuntu server 8.10 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
RRDtool
OWFS
Beskrivning
Jag förut sä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: Installera OWFS 2.7p10 på Ubuntu server 8.10 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.
Kod: Markera allt
sudo apt-get install rrdtool perl librrdp-perl librrds-perl
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å
Kod: Markera allt
sudo apt-get install apache2
Kod: Markera allt
sudo mkdir ~/bin
sudo mkdir ~/rrddata
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.
Kod: Markera allt
cd /home/anders/rrddata/
sudo nano create_rrd.sh
Kod: Markera allt
#!/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:576 \
RRA:MAX:0.5:2:2016 \
RRA:MAX:0.5:4:52560 \
RRA:MAX:0.5:24:175200 \
RRA:MIN:0.5:1:576 \
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
Ändra så att vi får kör rättigheter på scriptet.
Kod: Markera allt
sudo chmod +x create_rrd.sh
Kod: Markera allt
create_rrd.sh
Nu har vi själva filen för att spara information i. Nu skall vi skapa script som loggar temperaturen.
Kod: Markera allt
cd /home/anders/bin
sudo nano get_temp.sh
Kod: Markera allt
#!/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
Ändra så att vi får kör rättigheter på scriptet.
Kod: Markera allt
sudo chmod +x get_temp.sh
Kod: Markera allt
sudo nano graph_temp.pl
Kod: Markera allt
#!/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"
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
Kod: Markera allt
sudo crontab -e
Kod: Markera allt
*/2.5 * * * * /home/anders/bin/get_temp.sh
*/2.5 * * * * export LANG=sv_SE.utf8 && /home/anders/bin/graph_temp.pl
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 via 1wire och 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 när jag skriver så kan 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)!
Källor