use strict; use warnings; use lib "/root/perl5/lib/perl5/"; use POSIX qw/ strftime /; use LWP::Simple; use XML::Simple; use Data::Dumper; use Getopt::Long; use Switch; # define variables my $path = "C:/test/Sonstiges/XML/"; my $pathyear = $path.strftime("%Y", localtime); my $pathmonth = $pathyear.'/'.strftime("%Y-%m", localtime); my $pathday = $pathmonth.'/'.strftime("%Y-%m-%d", localtime); my $filename = strftime("%Y-%m-%d_%H-%M-%S", localtime)."_statelist.xml"; my $filepath = $pathday.'/'.$filename; my $host = 'SA_Waschmaschine'; my $XMLdata = ''; my $EXECtype = 'value'; my $datapoint_input = 'POWSTAT'; my $datapoint; my $warning; my $critical; my $return; my $return_value; my $return_messure; my $help_hint; # mapping datapoint name switch ($datapoint_input) { case 'ACTTEMP' { $datapoint = 'ACTUAL_TEMPERATURE' } case 'SETTEMP' { $datapoint = 'SET_TEMPERATURE' } case 'HUM' { $datapoint = 'ACTUAL_HUMIDITY' } case 'LOWBAT' { $datapoint = 'LOWBAT' } case 'BATSTAT' { $datapoint = 'BATTERY_STATE' } case 'CFGPEN' { $datapoint = 'CONFIG_PENDING' } case 'UPDPEN' { $datapoint = 'UPDATE_PENDING' } case 'DEVBOL' { $datapoint = 'DEVICE_IN_BOOTLOADER' } case 'UNREACH' { $datapoint = 'UNREACH' } case 'POWSTAT' { $datapoint = 'STATE' } case 'WINSTAT' { $datapoint = 'STATE'} case 'VALSTAT' { $datapoint = 'VALVE_STATE'} case 'BOOSTAT' { $datapoint = 'BOOST_STATE' } else { $help_hint = 'datapoint'; print_help(); } } if ($EXECtype eq 'value') { # check variables if ($host and $path and $datapoint) { $return = check_value(); if ($return == 0) { exit 0; }; if ($return == 1) { exit 1; }; if ($return == 2) { exit 2; }; } else { print_help(); } } sub check_value { if (($datapoint eq 'STATE') and ($datapoint_input eq 'POWSTAT')) { $return = check_POWSTAT(); }; return $return; } sub check_POWSTAT { $return_value = get_value(); if ($return_value eq 'false') { print "power off OK - power state $host | power_state=0"; return 0; }; if ($return_value eq 'true') { print "power on WARNING - power state $host | power_state=1"; return 1; }; if ($return_value eq '-99') { print "$return_value $datapoint CRITICAL - power state $host - value not found"; return 2; }; } sub get_value { opendir(DIR, "$pathday") || die $!; my @a=readdir(DIR); close DIR; @a = sort @a; my $last = @a-1; $filepath = $pathday.'/'.$a[$last]; my $value; my $opt = XMLin("$filepath", KeyAttr => {device => 'name', datapoint => 'type'}); $return_value = -99; foreach my $channel (@{$opt->{device}->{$host}->{channel}}) { $value = $channel->{datapoint}->{$datapoint}->{value}; my $messure = $channel->{datapoint}->{$datapoint}->{valueunit}; if (defined $value) { $return_value = $value; $return_messure = $messure; }; }; return $return_value; }