Kod: Markera allt
#!/usr/bin/perl
#
# rrd_owfstemp.pl
use lib qw(/usr/local/rrdtool-1.2.15/lib/perl);
use RRDs;
# define location of rrdtool databases
my $rrd = '/home/SCRIPT/RRD_DB';
# define location of images
my $img = '/home/plutonium/public_html/temps/';
# process data for each devices (add/delete as required)
&ProcessSensor("10.2A7A7C010800", "Temperatur på vinden");
&ProcessSensor("10.E68E7C010800", "Temperatur i växthuset");
#&ProcessSensor("your device id here", "temp sensor 2");
sub ProcessSensor
{
# process sensor
# inputs: $_[0]: sensor number (ie, 0/1/2/etc)
# $_[1]: sensor description
# get temperature from sensor
my $temp = `grep . /mnt/1wire/$_[0]/temperature | sed -e s/" "//g`;
# remove eol chars
chomp($temp);
print "sensor $_[0]: $temp degrees C\n";
# if rrdtool database doesn't exist, create it
if (! -e "$rrd/owfs-$_[0].rrd")
{
print "creating rrd database for temp sensor $_[0]...\n";
RRDs::create "$rrd/owfs-$_[0].rrd",
"-s 300",
"DS:temp:GAUGE:600:U:U",
"RRA:AVERAGE:0.5:1:2016",
"RRA:AVERAGE:0.5:6:1344",
"RRA:AVERAGE:0.5:24:2190",
"RRA:AVERAGE:0.5:144:3650",
"RRA:AVERAGE:0.3:1440:1825";
}
if ($ERROR = RRDs::error) { print "$0: failed to create $_[0] database file: $ERROR\n"; }
# check for error code from temp sensor
if (int $temp eq 85)
{
print "failed to read value from sensor $_[0]\n";
}
elsif (int $temp eq 00)
{
print "failed to read value from sensor $_[0]\n";
}
else
{
# insert values into rrd
RRDs::update "$rrd/owfs-$_[0].rrd",
"-t", "temp",
"N:$temp";
if ($ERROR = RRDs::error) { print "$0: failed to insert $_[0] data into rrd: $ERROR\n"; }
}
# create graphs for current sensor
&CreateGraph($_[0], "day", $_[1]);
&CreateGraph($_[0], "week", $_[1]);
&CreateGraph($_[0], "month", $_[1]);
&CreateGraph($_[0], "year", $_[1]);
&CreateGraph($_[0], "5year", $_[1]);
}
sub CreateGraph
{
# creates graph
# inputs: $_[0]: sensor number (ie, 0/1/2/etc)
# $_[1]: interval (ie, day, week, month, year)
# $_[2]: sensor description
RRDs::graph "$img/temp-$_[0]-$_[1].png",
"-s -1$_[1]",
"-t $_[2]",
"--lazy",
"-h", "150", "-w", "475",
"-a", "PNG",
"-v plutonium.homelinux.com",
"--slope-mode",
"DEF:temp=$rrd/owfs-$_[0].rrd:temp:AVERAGE",
"LINE2:temp#0000FF::",
"GPRINT:temp:MIN: Min\\: %6.1lf",
"GPRINT:temp:MAX: Max\\: %6.1lf",
"GPRINT:temp:AVERAGE: Snitt\\: %6.1lf",
"GPRINT:temp:LAST: Nuvarande\\: %6.1lf grader C\\n";
if ($ERROR = RRDs::error) { print "$0: unable to generate sensor $_[0] $_[1] graph: $ERROR\n"; }
}
Testa att skapa en dump.elf98 skrev:Och hur ser en dump för hela perioden ut?
info från databasen?
(Lägg gärna in det som "Code" så blir det lättare att läsa)
Kod: Markera allt
owfs-10.4EFF5F010800.rrd rrd_owfstemp.pl
nas:~/rrd2# rrdtool info owfs-10.4EFF5F010800.rrd
filename = "owfs-10.4EFF5F010800.rrd"
rrd_version = "0003"
step = 300
last_update = 1221057460
ds[temp].type = "GAUGE"
ds[temp].minimal_heartbeat = 600
ds[temp].min = NaN
ds[temp].max = NaN
ds[temp].last_ds = "UNKN"
ds[temp].value = 1.2485228369e+02
ds[temp].unknown_sec = 150
rra[0].cf = "AVERAGE"
rra[0].rows = 2016
rra[0].cur_row = 2015
rra[0].pdp_per_row = 1
rra[0].xff = 5.0000000000e-01
rra[0].cdp_prep[0].value = NaN
rra[0].cdp_prep[0].unknown_datapoints = 0
rra[1].cf = "AVERAGE"
rra[1].rows = 1344
rra[1].cur_row = 1343
rra[1].pdp_per_row = 6
rra[1].xff = 5.0000000000e-01
rra[1].cdp_prep[0].value = NaN
rra[1].cdp_prep[0].unknown_datapoints = 1
rra[2].cf = "AVERAGE"
rra[2].rows = 2190
rra[2].cur_row = 2189
rra[2].pdp_per_row = 24
rra[2].xff = 5.0000000000e-01
rra[2].cdp_prep[0].value = NaN
rra[2].cdp_prep[0].unknown_datapoints = 7
rra[3].cf = "AVERAGE"
rra[3].rows = 3650
rra[3].cur_row = 3649
rra[3].pdp_per_row = 144
rra[3].xff = 5.0000000000e-01
rra[3].cdp_prep[0].value = NaN
rra[3].cdp_prep[0].unknown_datapoints = 31
rra[4].cf = "AVERAGE"
rra[4].rows = 1825
rra[4].cur_row = 1824
rra[4].pdp_per_row = 1440
rra[4].xff = 3.0000000000e-01
rra[4].cdp_prep[0].value = NaN
rra[4].cdp_prep[0].unknown_datapoints = 751
nas:~/rrd2#
Stämmerchol skrev:Problem med väldigt långa tider för att generera grafer med RRDTool och GPRINT har jag också haft. Har inte gått till botten med det då jag hittade ett par grafer som funkade fint och räcker för mig som jag använder LINE för att skapa.
Så hör gör jag för att skapa 1 veckas och 24-timmarsgrafer:
RRDp::cmd "graph graphs/$s$opt_s.png --imgformat PNG --start '$starttime' --end
'$endtime' --width $width --height $height -E --title '$title'
--vertical-label
'Celsius' -l 0",
"DEF:".$s."temp=$rrd:temp:AVERAGE",
"LINE2:".$s."temp#FF0000",
# "GPRINT:".$s."temp:LAST:\"%d\\n\"",
"COMMENT:\"$com\"";
Skulle jag kommentera in GPRINT tar det många många minuter(har inte orkat vänta) så det är oanvändbart tyvärr. Nånstans på nätet läste jag nåt rykte om att GPRINT och ARM-baserade arkitekturer inte gick bra ihop. Och våra kära NSLU2:or är ju just det så...
Hur kan man förstå denna value?elf98 skrev:Ser lite galet varmt ut...ds[ute].value = 3.0381717307e+03
Kod: Markera allt
rrdtool fetch temps2.rrd MAX -r 9000 -s -25h