Fehlerfixes

git-svn-id: https://svn.fhem.de/fhem/trunk@6530 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
hexenmeister
2014-09-10 15:25:06 +00:00
parent 198b5f7323
commit 45d37fa522

View File

@@ -30,7 +30,7 @@ package main;
use strict;
use warnings;
my $VERSION = "1.6.1";
my $VERSION = "1.7.1";
use constant {
DATE => "date",
@@ -709,7 +709,9 @@ SYSMON_obtainParameters($$)
# Einmaliges
if(!$u_first_mark) {
$map = SYSMON_getCPUBogoMIPS($hash, $map);
if(SYSMON_isProcFS($hash)) {
$map = SYSMON_getCPUBogoMIPS($hash, $map);
}
if(SYSMON_isFB($hash)) {
$map = SYSMON_FBVersionInfo($hash, $map);
@@ -717,7 +719,11 @@ SYSMON_obtainParameters($$)
}
# immer aktualisieren: uptime, uptime_text, fhemuptime, fhemuptime_text, idletime, idletime_text
$map = SYSMON_getUptime($hash, $map);
if(SYSMON_isProcFS($hash)) {
$map = SYSMON_getUptime($hash, $map);
} else {
$map = SYSMON_getUptime2($hash, $map);
}
$map = SYSMON_getFHEMUptime($hash, $map);
if($m1 gt 0) { # Nur wenn > 0
@@ -736,8 +742,12 @@ SYSMON_obtainParameters($$)
if(SYSMON_isCPU1Freq($hash)) {
$map = SYSMON_getCPU1Freq($hash, $map);
}
$map = SYSMON_getLoadAvg($hash, $map);
$map = SYSMON_getCPUProcStat($hash, $map);
if(SYSMON_isProcFS($hash)) {
$map = SYSMON_getLoadAvg($hash, $map);
$map = SYSMON_getCPUProcStat($hash, $map);
} else {
#TODO: Ohne ProcFS
}
#$map = SYSMON_getDiskStat($hash, $map);
# Power info (cubietruck)
@@ -911,19 +921,64 @@ SYSMON_getUptime($$)
#my $uptime_str = qx(cat /proc/uptime );
my $uptime_str = SYSMON_execute($hash, "cat /proc/uptime");
my ($uptime, $idle) = split(/\s+/, trim($uptime_str));
my $idle_percent = $idle/$uptime*100;
if(int($uptime)!=0) {
my $idle_percent = $idle/$uptime*100;
$map->{+UPTIME}=sprintf("%d",$uptime);
#$map->{+UPTIME_TEXT} = sprintf("%d days, %02d hours, %02d minutes, %02d seconds",SYSMON_decode_time_diff($uptime));
$map->{+UPTIME_TEXT} = sprintf("%d days, %02d hours, %02d minutes",SYSMON_decode_time_diff($uptime));
$map->{+IDLETIME}=sprintf("%d %.2f %%",$idle, $idle_percent);
$map->{+IDLETIME_TEXT} = sprintf("%d days, %02d hours, %02d minutes",SYSMON_decode_time_diff($idle)).sprintf(" (%.2f %%)",$idle_percent);
#$map->{+IDLETIME_PERCENT} = sprintf ("%.2f %",$idle_percent);
$map->{+UPTIME}=sprintf("%d",$uptime);
#$map->{+UPTIME_TEXT} = sprintf("%d days, %02d hours, %02d minutes, %02d seconds",SYSMON_decode_time_diff($uptime));
$map->{+UPTIME_TEXT} = sprintf("%d days, %02d hours, %02d minutes",SYSMON_decode_time_diff($uptime));
$map->{+IDLETIME}=sprintf("%d %.2f %%",$idle, $idle_percent);
$map->{+IDLETIME_TEXT} = sprintf("%d days, %02d hours, %02d minutes",SYSMON_decode_time_diff($idle)).sprintf(" (%.2f %%)",$idle_percent);
#$map->{+IDLETIME_PERCENT} = sprintf ("%.2f %",$idle_percent);
}
return $map;
}
#------------------------------------------------------------------------------
# leifert Zeit seit dem Systemstart.
# Alternative Version fuer Systemen ohne procfs (z.B. MACOS)
#------------------------------------------------------------------------------
sub
SYSMON_getUptime2($$)
{
my ($hash, $map) = @_;
#TODO
my $uptime = SYSMON_execute($hash,"uptime");
#$uptime = $1 if( $uptime && $uptime =~ m/[[:alpha:]]{2}\s+(((\d+)\D+,?\s+)?(\d+):(\d+))/ );
$uptime = $1 if( $uptime && $uptime =~ m/[[:alpha:]]{2}\s+(((\d+)\D+,?\s+)?(\d+):(\d+)).*load.*: (.*)/ );
$uptime = "0 days, $uptime" if( $uptime && !$2);
my $days = $3?$3:0;
my $hours = $4;
my $minutes = $5;
$uptime = $days * 24;
$uptime += $hours;
$uptime *= 60;
$uptime += $minutes;
$uptime *= 60;
$map->{+UPTIME}=sprintf("%d",$uptime);
$map->{+UPTIME_TEXT} = sprintf("%d days, %02d hours, %02d minutes",SYSMON_decode_time_diff($uptime));
my $loadavg=$6;
my ($la1, $la5, $la15, $prc, $lastpid) = split(/\s+/, trim($loadavg));
$la1 =~ s/,$//;
$la5 =~ s/,$//;
$la1 =~ s/,/./;
$la5 =~ s/,/./;
$la15 =~ s/,/./;
$map->{+LOADAVG}="$la1 $la5 $la15";
return $map;
}
#------------------------------------------------------------------------------
# leifert Zeit seit FHEM-Start
#------------------------------------------------------------------------------
@@ -1308,6 +1363,8 @@ sub SYSMON_getRamAndSwap($$)
#my @speicher = qx(free -m);
my @speicher = SYSMON_execute($hash, "free");
if(!@speicher) {return $map;}
shift @speicher;
my ($fs_desc, $total, $used, $free, $shared, $buffers, $cached) = split(/\s+/, trim($speicher[0]));
shift @speicher;
@@ -1324,21 +1381,27 @@ sub SYSMON_getRamAndSwap($$)
#my $percentage_ram;
#my $percentage_swap;
$total = $total / 1024;
$used = $used / 1024;
$free = $free / 1024;
$buffers = $buffers / 1024;
if(defined($cached)) {
$cached = $cached / 1024;
} else {
# Bei FritzBox wird dieser Wert nicht ausgageben
$cached = 0;
if($total > 0) {
$total = $total / 1024;
$used = $used / 1024;
$free = $free / 1024;
$buffers = $buffers / 1024;
if(defined($cached)) {
$cached = $cached / 1024;
} else {
# Bei FritzBox wird dieser Wert nicht ausgageben
$cached = 0;
}
$ram = sprintf("Total: %.2f MB, Used: %.2f MB, %.2f %%, Free: %.2f MB", $total, ($used - $buffers - $cached), (($used - $buffers - $cached) / $total * 100), ($free + $buffers + $cached));
}
else
{
$ram = "n/a"
}
$ram = sprintf("Total: %.2f MB, Used: %.2f MB, %.2f %%, Free: %.2f MB", $total, ($used - $buffers - $cached), (($used - $buffers - $cached) / $total * 100), ($free + $buffers + $cached));
$map->{+RAM} = $ram;
# wenn kein swap definiert ist, ist die Groesse (total2) gleich Null. Dies wuerde eine Exception (division by zero) ausloesen
if($total2 > 0)
{
@@ -1572,7 +1635,7 @@ sub SYSMON_getNetworkInfo ($$$)
my $out_txt = "RX: ".$rx." MB, TX: ".$tx." MB, Total: ".$totalRxTx." MB";
$map->{$nName} = $out_txt;
my $lastVal = ReadingsVal($hash->{NAME},$device,"RX: 0 MB, TX: 0 MB, Total: 0 MB");
my $lastVal = ReadingsVal($hash->{NAME},$nName,"RX: 0 MB, TX: 0 MB, Total: 0 MB");
my ($d0, $o_rx, $d1, $d2, $o_tx, $d3, $d4, $o_tt, $d5) = split(/\s+/, trim($lastVal));
my $d_rx = $rx-$o_rx;
@@ -1911,6 +1974,17 @@ sub SYSMON_ShowValuesFmt ($$;@)
return $htmlcode;
}
my $proc_fs = undef;
sub
SYSMON_isProcFS($) {
my ($hash) = @_;
if(!defined $proc_fs) {
$proc_fs = int(SYSMON_execute($hash, "[ -d /proc/ ] && echo 1 || echo 0"));
}
return $proc_fs;
}
my $sys_cpu_temp_rpi = undef;
sub
SYSMON_isCPUTempRPi($) {