diff --git a/fhem/FHEM/42_SMARTMON.pm b/fhem/FHEM/42_SMARTMON.pm index 374cadfcb..fb39ce7b1 100644 --- a/fhem/FHEM/42_SMARTMON.pm +++ b/fhem/FHEM/42_SMARTMON.pm @@ -31,7 +31,7 @@ use strict; use warnings; use Data::Dumper; -my $VERSION = "0.9.0.1"; +my $VERSION = "0.9.1.1"; my $DEFAULT_INTERVAL = 60; # in minuten @@ -57,7 +57,7 @@ sub SMARTMON_Initialize($) $hash->{GetFn} = "SMARTMON_Get"; #$hash->{SetFn} = "SMARTMON_Set"; $hash->{AttrFn} = "SMARTMON_Attr"; - $hash->{AttrList} = "show_raw:0,1,2 disable:0,1 include ".$readingFnAttributes; + $hash->{AttrList} = "show_raw:0,1,2 disable:0,1 include parameters ".$readingFnAttributes; } sub SMARTMON_Log($$$) { @@ -135,6 +135,9 @@ sub SMARTMON_Get($@) return undef; } + my $param=""; + if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};} + if($cmd eq "list") { if(@a<3) {return "$name: get list needs at least one parameter"; } @@ -143,17 +146,17 @@ sub SMARTMON_Get($@) if($subcmd eq "info") { my $tdev = $hash->{DEVICE}; if(@a>3) {$tdev=$a[3];} - $t = SMARTMON_execute($hash, "sudo smartctl -i ".$tdev); + $t = SMARTMON_execute($hash, "sudo smartctl -i".$param." ".$tdev); } if($subcmd eq "data") { my $tdev = $hash->{DEVICE}; if(@a>3) {$tdev=$a[3];} - $t = SMARTMON_execute($hash, "sudo smartctl -A ".$tdev); + $t = SMARTMON_execute($hash, "sudo smartctl -A".$param." ".$tdev); } if($subcmd eq "health") { my $tdev = $hash->{DEVICE}; if(@a>3) {$tdev=$a[3];} - $t = SMARTMON_execute($hash, "sudo smartctl -H ".$tdev); + $t = SMARTMON_execute($hash, "sudo smartctl -H".$param." ".$tdev); } if($subcmd eq "devices") { $t = SMARTMON_execute($hash, "sudo smartctl --scan"); @@ -191,6 +194,10 @@ sub SMARTMON_Attr($$$) { # NOP } + if($attrName eq "parameters") { + $hash->{PARAMETERS}=$attrVal; + } + if($attrName eq "show_raw") { SMARTMON_refreshReadings($hash); } @@ -214,6 +221,10 @@ sub SMARTMON_Attr($$$) { delete $attr{$name}{$attrName}; SMARTMON_refreshReadings($hash); } + + if($attrName eq "parameters") { + delete $hash->{PARAMETERS}; + } } return; @@ -282,9 +293,11 @@ sub SMARTMON_obtainParameters($) { # /usr/sbin/smartctl in /etc/sudoers aufnehmen # fhem ALL=(ALL) NOPASSWD: [...,] /usr/sbin/smartctl # Natuerlich muss der user auch der Gruppe "sudo" angehören. - + # Health - my $dev_health = SMARTMON_execute($hash, "sudo smartctl -H ".$hash->{DEVICE}." | grep 'test result:'"); + my $param=""; + if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};} + my $dev_health = SMARTMON_execute($hash, "sudo smartctl -H".$param." ".$hash->{DEVICE}." | grep 'test result:'"); SMARTMON_Log($hash, 5, "health: $dev_health"); if($dev_health=~m/test\s+result:\s+(\S+).*/) { $map->{"overall_health_test"} = $1; @@ -353,8 +366,10 @@ sub SMARTMON_getSmartDataReadings($$) { sub SMARTMON_readDeviceData($%) { my ($hash, $map) = @_; - - my @dev_data = SMARTMON_execute($hash, "sudo smartctl -i ".$hash->{DEVICE}); + + my $param=""; + if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};} + my @dev_data = SMARTMON_execute($hash, "sudo smartctl -i".$param." ".$hash->{DEVICE}); SMARTMON_Log($hash, 5, "device data: ".Dumper(@dev_data)); if(defined($dev_data[0])) { while(scalar(@dev_data)>0) { @@ -465,7 +480,12 @@ sub SMARTMON_sec2Dauer($){ # Ausrechnet aus der Zahl der Stunden Anzeige in Tagen:Stunden:Minuten:Sekunden. sub SMARTMON_hour2Dauer($){ my ($t) = @_; - return SMARTMON_sec2Dauer($t*3600); + #return SMARTMON_sec2Dauer($t*3600); + my $d=int($t/24); + $t = $t-($d*24); + my $y=int($d/365); + $d = $d-($y*365); + return sprintf("%d Jahre %d Tage %d Std.",$y,$d,$t); } # liest RAW-Daten @@ -476,8 +496,10 @@ sub SMARTMON_hour2Dauer($){ sub SMARTMON_readSmartData($;$) { my ($hash, $include) = @_; my $map; - - my @dev_data = SMARTMON_execute($hash, "sudo smartctl -A ".$hash->{DEVICE}); + + my $param=""; + if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};} + my @dev_data = SMARTMON_execute($hash, "sudo smartctl -A".$param." ".$hash->{DEVICE}); SMARTMON_Log($hash, 5, "device SMART data: ".Dumper(@dev_data)); if(defined($dev_data[0])) { while(scalar(@dev_data)>0) { @@ -603,6 +625,10 @@ sub SMARTMON_execute($$) { Valid values: 0: Module active (default), 1: module is disabled (no updates).
+
  • parameters
    + Additional values for smartctl. +
  • +

    For more information see cmartctrl documentation. @@ -687,6 +713,10 @@ sub SMARTMON_execute($$) { Gültige Werte: 0: Modul aktiv (default), 1: Modul deaktiviert (keine Aktualisierungen).
    +
  • parameters
    + Zusatzparameter für den AUfruf von smartctl. +
  • +

    Für weitere Informationen wird die cmartctrl-Dokumentation empfohlen.