Grafische Darstellung der Messwerte für Temperatur und Luftfeuchte mit MRTG
Diese Grafik wird live mit dem MessPC-System und
MRTG realisiert Angezeigt wird die Innentemperatur (blau) und Außentemperatur (grün).

Mit MRTG ist neben der grafischen Anzeige auch das Überwachen von Schwellwerten möglich. So können beliebige Aktionen gestartet werden, wie z.B. das Versenden von Mail, Fax oder SMS. MRTG ist ein freies Perl-Programm und läuft unter Windows und Unix/Linux. Leider ist mit MRTG keine Anzeige negativer Werte möglich. Verwenden Sie in diesem Fall die
RRDTools.
Die Konfiguration für MRTG:
Target[PCMeasureDemo]: `/usr/bin/pcmeasure2mrtg.pl 10.254.89.8 lpt1.1 com2.1`
MaxBytes[PCMeasureDemo]: 1000
Title[PCMeasureDemo]: LiveDemo PCMeasure
PageTop[PCMeasureDemo]: <H1>LiveDemo PCMeasure</H1>
YTicsFactor[PCMeasureDemo]: 0.1
Options[PCMeasureDemo]: gauge, noinfo, nopercent, growright
YLegend[PCMeasureDemo]: Grad Celsius
Timezone[PCMeasureDemo]: GMT
ShortLegend[PCMeasureDemo]: x 0,1 Grad Celsius
LegendI[PCMeasureDemo]: Outdoor
LegendO[PCMeasureDemo]: Indoor
Legend1[PCMeasureDemo]: Outdoor in Grad Celsius
Legend2[PCMeasureDemo]: Indoor in Grad Celsius
Dazu wird folgender Perl-Script durch MRTG aufgerufen:
pcmeasure2mrtg.pl
Dieser Script kann unverändert verwendet werden, es ist keine Konfiguration erforderlich.
#!/usr/bin/perl
#############################################################
# pcmeasure2mrtg.pl Zugriff auf Daten der MessPC Software
# über das Netzwerk und Übergabe an MRTG
#
# Version 1.2 vom 11.3.2008
#
# (C) Lutz Schulze 2002-2008 www.messpc.de
#
# Aufruf: pcmeasure2mrtg.pl IP-Adresse sensor1 sensor2
#
# Die Parameter sensor1 und sensor2 bestimmen die Interfaces
# der MessPC - Software, die ausgegeben werden sollen.
# Beispiel: pcmeasure2mrtg.pl 10.1.1.1 lpt1.1 com1.1
#############################################################
use IO::Socket;
use Text::ParseWords;
sub parse_csv {
return quotewords(";",0, $_[0]);
}
$remote_host = $ARGV[0]; # IP-address
$remote_port = 4000; # TCP Port
$socket = IO::Socket::INET->new(PeerAddr =>$remote_host,
PeerPort =>$remote_port,
Proto =>"tcp",
Type =>SOCK_STREAM)
or die "cannot connect to $remote_host:$remote_port: $@\n";
print $socket "pcmeasure.$ARGV[1]\r\n";
eval {
local $SIG{ALRM} = sub { die "alarm\n"};
alarm 5;
$answer = <$socket>;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # handle unexpected errors
#no answer, timeout
print "timeout";
} else {
@fields = parse_csv($answer);
for ($i =0;$i < @fields;$i++) {
$pos1 =index $fields[$i],'value';
if ($pos1 != -1) {
$pos2 =index $fields[$i],'=';
$valuestring1 = substr($fields[$i],$pos2+1);
}
}
}
close($socket);
$valuestring2 = 0;
if ($ARGV[2] ne '') {
$socket = IO::Socket::INET->new(PeerAddr =>$remote_host,
PeerPort =>$remote_port,
Proto =>"tcp",
Type =>SOCK_STREAM)
or die "cannot connect to $remote_host:$remote_port: $@\n";
print $socket "pcmeasure.$ARGV[2]\r\n";
eval {
local $SIG{ALRM} = sub { die "alarm\n"};
alarm 5;
$answer = <$socket>;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # handle unexpected errors
#no answer, timeout
print "timeout";
}
else {
@fields = parse_csv($answer);
for ($i =0;$i < @fields;$i++) {
$pos1 =index $fields[$i],'value';
if ($pos1 != -1) {
$pos2 =index $fields[$i],'=';
$valuestring2 = substr($fields[$i],$pos2+1);
}
}
}
close($socket);
}
$valuestring1 = $valuestring1 * 10; #MRTG will nur ganze Zahlen
$valuestring2 = $valuestring2 * 10;
print "$valuestring1\n$valuestring2\n0 Std\n$ARGV[0]\n";