Fehlerfixes
git-svn-id: https://svn.fhem.de/fhem/trunk@6530 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -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($) {
|
||||
|
||||
Reference in New Issue
Block a user