From b2d260bf987fc1d71a1e6001640e99ca0fff0f1b Mon Sep 17 00:00:00 2001 From: justme-1968 Date: Fri, 31 May 2013 11:00:27 +0000 Subject: [PATCH] SYSSTAT: allow (remote) monitoring raspberry pi on cpu frequency git-svn-id: https://svn.fhem.de/fhem/trunk@3228 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/32_SYSSTAT.pm | 42 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) 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( $ )
  • raspberrytemperature
    If set and > 0 the raspberry pi on chip termal sensor is read.
    If set to 2 a geometric average over the last 4 values is created.
  • +
  • raspberrycpufreq
    + If set and > 0 the raspberry pi on chip termal sensor is read.
    + If set to 2 a geometric average over the last 4 values is created.
  • useregex
    If set the entries of the filesystems list are treated as regex.
  • ssh_user