#!/usr/bin/perl

# Skript zur Abfrage der Dallas 1820 Temperatur-Sensoren
# written by:	Sebastian Kober <sebastian.kober@leipziger-messe.de> (13.05.2008)
# changed by:
#
#
# Changelog:	v0.0	- Initialrelease
#
#
# ToDo:		- Ueberpruefung der Eingabewerte
#
#
# Dieses Skript steht unter GPL. Vervielfaeltigung und Veraenderung unter Beachtung der GPL.

# Zunaechst die Schnittstelle festlegen - sollte es Probleme geben, dann folgenden Befehl aus Root ausfuehren: 
# stty -F /dev/ttyS0 4800 cs8 -cstopb -parenb

$schnittstelle = "/dev/ttyS0";

# Eingabeparameter abpruefen

if(($ARGV[0] == null) || ($ARGV[0] eq "--help"))
{
	print "Fehlende Eingabewerte: check_temp_dallas.pl <INDEX> <WARN> <CRIT> <NAME>\n";
	print "<INDEX> ist ein String im Breich von 01 bis 16\n";
	print "<NAME> ist ein String fuer die naehre Beschreibung in den Perfdaten\n";
	exit(3);
}
$index = $ARGV[0];
if($ARGV[1] == null)
{
	$warn = 0;
}
else
{
	$warn = $ARGV[1];
}
if($ARGV[2] == null)
{
        $crit = 0;
}
else
{
	$crit = $ARGV[2];
}
if($ARGV[3] eq "")
{
	$name = $index;
}
else
{
	$name = $ARGV[3];
}
$startlink = "V" . $index;

open DATEI, $schnittstelle 
	or die "Schnittstelle konnte nicht geoeffnet werden";
$tester=0;
while(<DATEI>)
{
	chomp();
        $zeile = $_;
	if(($zeile ne "\@") && ($tester == 0))
	{
		next;
	}
	if($zeile eq "\@")
	{
		$tester = 1;
		next;
	}
	if($tester == 1)
	{
		if($zeile eq "\$")
		{
			last;
		}
		if(substr($zeile,0,3) eq $startlink)
		{
			$temp = (hex(substr($zeile,3,1))*4096 + hex(substr($zeile,4,1))*256 + hex(substr($zeile,5,1))*16 + hex(substr($zeile,6,1)))/100; 
			if(($temp >= $crit) && ($crit != 0))
			{
				print "CRITICAL - Temp for index " . $index . " is CRITICAL (" . $temp . ")| Temp for " . $name . "=" . $temp . ";" . $warn . ";" . $crit . ";;\n";
				exit(2);
			} 
			elsif(($temp >= $warn) && ($warn != 0))
			{

				print "WARNING - Temp for index " . $index . " is WARNING (" . $temp .  ")| Temp for " . $name . "=" . $temp . ";" . $warn . ";" . $crit . ";;\n";
				exit(1);
			}
			else
			{
				print "OK - Temp for index " . $index . " is OK (" . $temp .  ")| Temp for " . $name . "=" . $temp . ";" . $warn . ";" . $crit . ";;\n";
				exit(0);
			}
		}
	}
}
close DATEI;
