diff --git a/fhem/FHEM/98_freezemon.pm b/fhem/FHEM/98_freezemon.pm index 2b0fdd97f..7ac7df0db 100644 --- a/fhem/FHEM/98_freezemon.pm +++ b/fhem/FHEM/98_freezemon.pm @@ -22,6 +22,8 @@ # ############################################################################## # Changelog: +# 0.0.26: Get command for Statistics +# remove trailing/leading whitespace for ignored devices # 0.0.25: Further improved statistics function and clear statistics # 0.0.24: Optimized statistics function # Added clear statistics command @@ -104,7 +106,7 @@ use B qw(svref_2object); use Blocking; use vars qw($FW_CSRF); -my $version = "0.0.25"; +my $version = "0.0.26"; my @logqueue = (); my @fmCmd = (); @@ -276,6 +278,9 @@ sub freezemon_ProcessTimer($) { #Build a hash of devices to ignore my @idevs = split( ",", AttrVal( $name, "fm_ignoreDev", "" ) ); + @idevs = grep( s/\s*$//g, @idevs ) + ; #remove leading/trailing whitespace https://forum.fhem.de/index.php/topic,83909.msg898431.html#msg898431 + my %id = map { $_ => 1 } @idevs; my %blacklist = map { $_ => 1 } split( ",", AttrVal( $name, "fm_whitelistSub", "" ) ); @@ -645,7 +650,7 @@ sub freezemon_Get($@) { my $name = $hash->{NAME}; my $state = $hash->{STATE}; my $ret = ""; - my $usage = 'Unknown argument $a[1], choose one of freeze:noArg log:'; + my $usage = 'Unknown argument $a[1], choose one of statistic:noArg freeze:noArg log:'; return "\"get $name\" needs at least one argument" unless ( defined( $a[1] ) ); @@ -682,6 +687,33 @@ sub freezemon_Get($@) { return "" . $ret . ""; } + elsif ( $a[1] eq "statistic" ) { + my %stats; + foreach my $r ( keys %{ $hash->{READINGS} } ) { + next unless ( $r =~ /fs_(.*)_c/ ); + my $dev = $1; + my $rc = ReadingsNum( $name, $r, 0 ); + my $t = $r =~ s/_c/_t/r; + my $rt = ReadingsNum( $name, $t, 0 ); + + $stats{"$dev"}{cnt} = $rc; + $stats{"$dev"}{time} = $rt; + } + + my @positioned = + sort { $stats{$b}{cnt} <=> $stats{$a}{cnt} or $stats{$b}{time} <=> $stats{$a}{time} } keys %stats; + my $ret = ""; + $ret .= ""; + my $i; + foreach my $p (@positioned) { + last if $i > 20; + $i++; + $ret .= ""; + } + $ret .= "
DeviceCountTime
$p" . $stats{"$p"}{cnt} . "" . $stats{"$p"}{time} . "
"; + return $ret; + + } elsif ( $a[1] eq "log" ) { return "No Filename given" if ( !defined( $a[2] ) ); @@ -1406,6 +1438,7 @@ sub freezemon_getLogPath($) { @@ -1507,6 +1540,7 @@ sub freezemon_getLogPath($) {