Sodele, ich hab dann mal das Skript aus dieser Beitrag
http://www.ipcop-forum.de/forum/viewtopic.php?p=53514#53514
genommen und erweitert.
Es werden 2 Diagramme erzeugt, eins für Temp und eins für H²0 %
Die Diagramme landen in /home/httpd/htmp/graphs (wo sich auch alle andere IPCop-Diagramme befinden) und nennen sich:
digitemp-hour.png, digitemp-day.png, digitempH-hour.png, und digitempH-day.png
Code:
#!/usr/bin/perl
use strict;
use RRDs;
my $rrdlog="/var/log/rrd";
my $graphs="/home/httpd/html/graphs";
my $datei;
$datei="/var/log/digitemp.log";
open(FILE, $datei);
my @current = <FILE>;
close (FILE);
my %hash = ();
foreach my $line (@current) {
$line =~ /^(\w\w\w \d\d \d\d:\d\d:\d\d) Sensor (\d+) C: (\d+.?\d*) F: (\d+.?\d*)/;
$hash{$2}{'celsius'} = $3;
$hash{$2}{'fahrenheit'} = $4;
if ( index($line, "H:") != -1 ) {
$line =~ /Sensor (\d+) C:.*H: (\d+)/;
$hash{$1}{'h2opercentage'} = $2;
}
}
my $sensor0=$hash{0}{'celsius'};
my $sensor1=$hash{1}{'celsius'};
my $sensorH0=$hash{0}{'h2opercentage'};
my $sensorH1=$hash{1}{'h2opercentage'};
my $ERROR;
sub updatedigitempdata {
if ( ! -e "$rrdlog/digitemp.rrd") {
RRDs::create ("$rrdlog/digitemp.rrd", "--step=300",
"DS:sensor0:GAUGE:500:-60:110", # Datenbank für Sensor0 erzeugen
"DS:sensor1:GAUGE:500:-60:110", # Datenbank für Sensor1 erzeugen, kann einfach entfernt werden
"DS:sensorH0:GAUGE:500:0:100", # Datenbank für Sensor0 Luftfeuchte erzeugen
"DS:sensorH1:GAUGE:500:0:100", # Datenbank für Sensor1 Luftfeuchte erzeugen
"RRA:AVERAGE:0.5:1:576",
"RRA:AVERAGE:0.5:6:672",
"RRA:AVERAGE:0.5:24:732",
"RRA:AVERAGE:0.5:144:1460");
$ERROR = RRDs::error;
print "Error in RRD::create for digitemp: $ERROR\n" if $ERROR;
}
if ($sensor0 || $sensor1) { #Überprüfen ob Daten vorhanden. Einfach "|| $sensorx" anhängen oder entfernen.
RRDs::update ("$rrdlog/digitemp.rrd",
"-t", "sensor0:sensor1:sensorH0:sensorH1", #Datenbank den jeweiligen Werten zuweise. ":sensorx" anhängen oder entfernen.
"N:$sensor0:$sensor1:$sensorH0:$sensorH1"); #Werte eintragen. ":sensorx" anhängen oder entfernen.
$ERROR = RRDs::error;
print "Error in RRD::update for digitemp: $ERROR\n" if $ERROR;
} else {
print "Error in RRD::update for digitemp: no data available\n";
}
}
sub updatedigitempgraph {
my $period = $_[0];
RRDs::graph ("$graphs/digitemp-$period.png",
"--start", "-1$period", "-aPNG", "-i", "-z",
"--alt-y-grid", "-w 400", "-h 70", "-l 0", "-r",
# "--color", "SHADEA#EAE9EE",
# "--color", "SHADEB#EAE9EE",
# "--color", "BACK#ffffff",
"-t Digitemp",
"-v °Celsius",
"DEF:sensor0=$rrdlog/digitemp.rrd:sensor0:AVERAGE", #Graph für Sensor0
"DEF:sensor1=$rrdlog/digitemp.rrd:sensor1:AVERAGE", #Graph für Sensor1
"LINE2:sensor0#0000FF: Sensor 0\\j", #Graph für Sensor0, Farbcode -> #0000FF
"LINE2:sensor1#FF0000: Sensor 1\\j", #Graph für Sensor1, Farbcode -> #FF0000
"GPRINT:sensor0:LAST:Sensor 0\\: \\: %3.2lf °C", #Graph für Sensor0
"GPRINT:sensor0:MIN:mi\\: %3.2lf °C", #Graph für Sensor0
"GPRINT:sensor0:AVERAGE:av\\: %3.2lf °C", #Graph für Sensor0
"GPRINT:sensor0:MAX:max\\: %3.2lf °C\\j", #Graph für Sensor0
"GPRINT:sensor1:LAST:Sensor 1\\: \\: %3.2lf °C", #Graph für Sensor1
"GPRINT:sensor1:MIN:mi\\: %3.2lf °C", #Graph für Sensor1
"GPRINT:sensor1:AVERAGE:av\\: %3.2lf °C", #Graph für Sensor1
"GPRINT:sensor1:MAX:max\\: %3.2lf °C\\j"); #Graph für Sensor1
$ERROR = RRDs::error;
print "Error in RRD::graph for digitemp: $ERROR\n" if $ERROR;
RRDs::graph ("$graphs/digitempH-$period.png",
"--start", "-1$period", "-aPNG", "-i", "-z",
"--alt-y-grid", "-w 400", "-h 70", "-l 0", "-r",
# "--color", "SHADEA#EAE9EE",
# "--color", "SHADEB#EAE9EE",
# "--color", "BACK#ffffff",
"-t Digitemp",
"-v H20 Percentage",
"DEF:sensorH0=$rrdlog/digitemp.rrd:sensorH0:AVERAGE", #Graph für Sensor0
"DEF:sensorH1=$rrdlog/digitemp.rrd:sensorH1:AVERAGE", #Graph für Sensor1
"LINE2:sensorH0#0000FF: Sensor 0\\j", #Graph für Sensor0, Farbcode -> #0000FF
"LINE2:sensorH1#FF0000: Sensor 1\\j", #Graph für Sensor1, Farbcode -> #FF0000
"GPRINT:sensorH0:LAST:Sensor 0\\: \\: %3.0lf%%", #Graph für Sensor0
"GPRINT:sensorH0:MIN:mi\\: %3.0lf%%", #Graph für Sensor0
"GPRINT:sensorH0:AVERAGE:av\\: %3.0lf%%", #Graph für Sensor0
"GPRINT:sensorH0:MAX:max\\: %3.0lf%%\\j", #Graph für Sensor0
"GPRINT:sensorH1:LAST:Sensor 1\\: \\: %3.0lf%%", #Graph für Sensor1
"GPRINT:sensorH1:MIN:mi\\: %3.0lf%%", #Graph für Sensor1
"GPRINT:sensorH1:AVERAGE:av\\: %3.0lf%%", #Graph für Sensor1
"GPRINT:sensorH1:MAX:max\\: %3.0lf%%\\j"); #Graph für Sensor1
$ERROR = RRDs::error;
print "Error in RRD::graph for digitempH: $ERROR\n" if $ERROR;
}
updatedigitempdata();
updatedigitempgraph("hour");
updatedigitempgraph("day");
jetzt muß ich mir wirklich auch mal ein paar Sensoren zulegen