Debian, digitemp, rrdtool

Mit perlscript:

#!/usr/bin/perl
#
# copyright Per Hansen 2009
#
#
# temp.pl

use lib qw(/opt/rrdtool-1.4.1/lib/perl);
use RRDs;
 

# sti til rrdtool databases
my $rrd = '/var/lib/rrd';



# sti til f�rdige grafer
my $img = '/var/www/rrdtool';



# sti til digitemp
my $digi = '/usr/bin'; 
 

# hvis rrd-database ikke findes, laves den her
    if (! -e "$rrd/temperature.rrd") 
    {
        print "creating rrd database for sensors ...\n";
        RRDs::create "$rrd/temperature.rrd",
         "-s 300",        
         "DS:out:GAUGE:600:-50:50",
         "DS:in:GAUGE:600:-50:50",            
         "RRA:AVERAGE:0.5:1:600",
         "RRA:AVERAGE:0.5:6:700",
         "RRA:AVERAGE:0.5:24:775",        
         "RRA:AVERAGE:0.5:288:797",
         "RRA:MIN:0.5:1:600",
         "RRA:MIN:0.5:6:700",
         "RRA:MIN:0.5:24:775",
         "RRA:MIN:0.5:288:797",
         "RRA:MAX:0.5:1:600",
         "RRA:MAX:0.5:6:700",
         "RRA:MAX:0.5:24:775", 
         "RRA:MAX:0.5:288:797" ;
   }
    if ($ERROR = RRDs::error) { print "$0: failed to create temperature database file: $ERROR\n"; }
 
    
# afl�s den udend�rs-sensor
    my $read_out = `$digi/digitemp -t 0 -q -c /etc/digitemp.conf -o%C`;
       
    # afl�s k�lder-sensor
    my $read_in = `$digi/digitemp -t 1 -q -c /etc/digitemp.conf -o%C`;
 
    
# fjerner eol-karaktere i den l�ste v�rdi
    chomp($read_out);
    chomp($read_in);
 
    
# check for fejl i temp-sensorerne
    if (int $read_out eq 85)
    {
        print "failed to read value from outside sensor\n";
        $read_out = "U";
    }
    if (int $read_in eq 85)
    {
        print "failed to read value from basement sensor\n";
        $read_in = "U";
    }
  

  # inds�t v�rdier i rrd
    RRDs::update "$rrd/temperature.rrd",
       "-t", "out", "N:$read_out";
       "-t", "in",    "N:$read_in";
 
    
if ($ERROR = RRDs::error) { print "$0: failed to insert data into rrd: $ERROR\n"; }
 
    
#print"out $read_out";
    #print"in $read_in";  
 

# generer graf
RRDs::graph "$img/temp-day.png",
"-n", "DEFAULT:0:/usr/share/fonts/truetype/msttcorefonts/arial.ttf", 
"-t Temperaturer i Auning, Danmark �C", 
"--lazy",
"-a", "PNG",
"-h", "80", "-w", "550", 
"-E",
"DEF:outside=$rrd/temperature.rrd:out:AVERAGE",
"DEF:basement=$rrd/temperature.rrd:in:AVERAGE",
"COMMENT:\\c",
"COMMENT:             MAX            MIN            AVERAGE          CURRENT\\c",
"LINE2:outside#FF0000:udend�rs\\t",
"GPRINT:outside:MAX:%4.2lf �C\t",
"GPRINT:outside:MIN:%4.2lf �C\t",
"GPRINT:outside:AVERAGE:%4.2lf �C\t",
"GPRINT:outside:LAST:%4.2lf �C\\c",
"LINE2:basement#3333CC:k�lder\\t",
"GPRINT:basement:MAX:%6.2lf �C\t",
"GPRINT:basement:MIN:%6.2lf �C\t",
"GPRINT:basement:AVERAGE:%6.2lf �C\t",
"GPRINT:basement:LAST:%6.2lf �C\\c",
"COMMENT:\\c",
"COMMENT:Copyright Per Hansen\\c";

  if ($ERROR = RRDs::error) { print "$0: unable to generate sensor $_[0] $_[1] graph: $ERROR\n"; }

l�ser to v�rdier via digitemp, hvorefter rrdtool genere en graf. Mit problem er dog at enten viser grafen to ens v�rdier eller kun den ene af dem.
Jeg har f�rs�gt at �ndre mange ting dog uden held. Enten bliver resultatet det ene eller det andet.
Det bliver aldrig korrekt.

Er der nogen som kender rrdtool?

Det skal lige siges at jeg normalt ikke er en koder, hvilket sikkert ogs� kan ses ud fra mit script. Hvis scriptet kan skrives om, men stadig udf�re det samme er i velkommne til at g�re det.

Hej Per,

Du er vel klar over dette forum for det meste er engelsktalene ?

Jeg har kigget din kode n�rmere igennem og syntes du lige skal kigge din update() lidt n�rmere efter:

    RRDs::update "$rrd/temperature.rrd",
       "-t", "out", "N:$read_out";
       "-t", "in",    "N:$read_in";

Hvis det ikke er fejlen, s� pr�v eventuelt at �ndre det til

RRDs::update ("$rrd/temperature.rrd", "N:" . $read_out. ":" .$read_in);

Selvom du p�st�r du ikke er programm�r, lader det til at v�re en rimelig p�nt program, selve fejlen kan alle lave, det er jo sv�rt p� de sene nattetimer at se skoven for tr�er :slight_smile: