diff --git a/fhem/CHANGED b/fhem/CHANGED index e97924ec8..f2916c352 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII - SVN + - feature: SYSSTAT: allow (remote) monitoring raspberry pi on cpu frequency - feature: MANTAINER.txt added - feature: PRESENCE: new mode "shellscript" to use own scripts or binaries for presence recognition diff --git a/fhem/FHEM/32_SYSSTAT.pm b/fhem/FHEM/32_SYSSTAT.pm index d07ffcf7c..faa7fce85 100644 --- a/fhem/FHEM/32_SYSSTAT.pm +++ b/fhem/FHEM/32_SYSSTAT.pm @@ -15,7 +15,7 @@ SYSSTAT_Initialize($) $hash->{UndefFn} = "SYSSTAT_Undefine"; $hash->{GetFn} = "SYSSTAT_Get"; $hash->{AttrFn} = "SYSSTAT_Attr"; - $hash->{AttrList} = "filesystems raspberrytemperature:0,1,2 showpercent:1 useregex:1 ssh_user loglevel:0,1,2,3,4,5,6 ". + $hash->{AttrList} = "filesystems raspberrycpufreq:1 raspberrytemperature:0,1,2 showpercent:1 useregex:1 ssh_user loglevel:0,1,2,3,4,5,6 ". $readingFnAttributes; } @@ -121,6 +121,7 @@ SYSSTAT_Attr($$$) my $orig = $attrVal; $attrVal= "1" if($attrName eq "useregex"); $attrVal= "1" if($attrName eq "showpercent"); + $attrVal= "1" if($attrName eq "raspberrycpufreq"); if( $attrName eq "filesystems") { my $hash = $defs{$name}; @@ -209,6 +210,11 @@ SYSSTAT_GetUpdate($) readingsSingleUpdate($hash,"temperature",$temp,defined($hash->{LOCAL} ? 0 : 1)); } } + + if( AttrVal($name, "raspberrycpufreq", "0") > 0 ) { + my $freq = SYSSTAT_getPiFreq($hash); + readingsSingleUpdate($hash,"cpufreq",$freq,defined($hash->{LOCAL} ? 0 : 1)); + } } sub @@ -280,6 +286,37 @@ SYSSTAT_getPiTemp( $ ) return $temp / 1000; } +sub +SYSSTAT_getPiFreq( $ ) +{ + my ($hash) = @_; + + my $filename = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"; + + my $freq = 0; + if( defined($hash->{HOST}) ) { + my $cmd = qx(which ssh); + chomp( $cmd ); + my $user = AttrVal($hash->{NAME}, "ssh_user", undef ); + $cmd .= ' '; + $cmd .= $user."\@" if( defined($user) ); + $cmd .= $hash->{HOST}." cat ". $filename ." 2>/dev/null"; + if( open(my $fh, "$cmd|" ) ) { + $freq = <$fh>; + close($fh); + } + } else { + if( open( my $fh, '<', $filename ) ) + { + $freq = <$fh>; + + close($fh); + } + } + + return $freq / 1000; +} + 1; @@ -370,6 +407,9 @@ SYSSTAT_getPiTemp( $ )