perlscript: debian, digitemp, rrdtool
Mit perlscript :
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 kan finde fejlen?
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.
          
#!/usr/bin/perl
#
# copyright Per Hansen 2009
#
#
# rrd_tempsensor.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", 
"-c", "CANVAS#FFFFFF", 
"-c", "GRID#BBBBBB",
"-c", "MGRID#BBBBBB",
"-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 kan finde fejlen?
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.
    
Kommentarer1
Perl-hjælp
http://www.unix.com/shell-programming-scripting/
og her:
http://www.perlmonks.com/