mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-28 11:01:59 +00:00
SYSMON: feature: additional parameters for smartctl
git-svn-id: https://svn.fhem.de/fhem/trunk@7343 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
cf6a296d80
commit
f7f7851006
@ -31,7 +31,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
|
||||||
my $VERSION = "0.9.0.1";
|
my $VERSION = "0.9.1.1";
|
||||||
|
|
||||||
my $DEFAULT_INTERVAL = 60; # in minuten
|
my $DEFAULT_INTERVAL = 60; # in minuten
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ sub SMARTMON_Initialize($)
|
|||||||
$hash->{GetFn} = "SMARTMON_Get";
|
$hash->{GetFn} = "SMARTMON_Get";
|
||||||
#$hash->{SetFn} = "SMARTMON_Set";
|
#$hash->{SetFn} = "SMARTMON_Set";
|
||||||
$hash->{AttrFn} = "SMARTMON_Attr";
|
$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($$$) {
|
sub SMARTMON_Log($$$) {
|
||||||
@ -135,6 +135,9 @@ sub SMARTMON_Get($@)
|
|||||||
return undef;
|
return undef;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $param="";
|
||||||
|
if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};}
|
||||||
|
|
||||||
if($cmd eq "list")
|
if($cmd eq "list")
|
||||||
{
|
{
|
||||||
if(@a<3) {return "$name: get list needs at least one parameter"; }
|
if(@a<3) {return "$name: get list needs at least one parameter"; }
|
||||||
@ -143,17 +146,17 @@ sub SMARTMON_Get($@)
|
|||||||
if($subcmd eq "info") {
|
if($subcmd eq "info") {
|
||||||
my $tdev = $hash->{DEVICE};
|
my $tdev = $hash->{DEVICE};
|
||||||
if(@a>3) {$tdev=$a[3];}
|
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") {
|
if($subcmd eq "data") {
|
||||||
my $tdev = $hash->{DEVICE};
|
my $tdev = $hash->{DEVICE};
|
||||||
if(@a>3) {$tdev=$a[3];}
|
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") {
|
if($subcmd eq "health") {
|
||||||
my $tdev = $hash->{DEVICE};
|
my $tdev = $hash->{DEVICE};
|
||||||
if(@a>3) {$tdev=$a[3];}
|
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") {
|
if($subcmd eq "devices") {
|
||||||
$t = SMARTMON_execute($hash, "sudo smartctl --scan");
|
$t = SMARTMON_execute($hash, "sudo smartctl --scan");
|
||||||
@ -191,6 +194,10 @@ sub SMARTMON_Attr($$$) {
|
|||||||
# NOP
|
# NOP
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($attrName eq "parameters") {
|
||||||
|
$hash->{PARAMETERS}=$attrVal;
|
||||||
|
}
|
||||||
|
|
||||||
if($attrName eq "show_raw") {
|
if($attrName eq "show_raw") {
|
||||||
SMARTMON_refreshReadings($hash);
|
SMARTMON_refreshReadings($hash);
|
||||||
}
|
}
|
||||||
@ -214,6 +221,10 @@ sub SMARTMON_Attr($$$) {
|
|||||||
delete $attr{$name}{$attrName};
|
delete $attr{$name}{$attrName};
|
||||||
SMARTMON_refreshReadings($hash);
|
SMARTMON_refreshReadings($hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($attrName eq "parameters") {
|
||||||
|
delete $hash->{PARAMETERS};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -282,9 +293,11 @@ sub SMARTMON_obtainParameters($) {
|
|||||||
# /usr/sbin/smartctl in /etc/sudoers aufnehmen
|
# /usr/sbin/smartctl in /etc/sudoers aufnehmen
|
||||||
# fhem ALL=(ALL) NOPASSWD: [...,] /usr/sbin/smartctl
|
# fhem ALL=(ALL) NOPASSWD: [...,] /usr/sbin/smartctl
|
||||||
# Natuerlich muss der user auch der Gruppe "sudo" angehören.
|
# Natuerlich muss der user auch der Gruppe "sudo" angehören.
|
||||||
|
|
||||||
# Health
|
# 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");
|
SMARTMON_Log($hash, 5, "health: $dev_health");
|
||||||
if($dev_health=~m/test\s+result:\s+(\S+).*/) {
|
if($dev_health=~m/test\s+result:\s+(\S+).*/) {
|
||||||
$map->{"overall_health_test"} = $1;
|
$map->{"overall_health_test"} = $1;
|
||||||
@ -353,8 +366,10 @@ sub SMARTMON_getSmartDataReadings($$) {
|
|||||||
|
|
||||||
sub SMARTMON_readDeviceData($%) {
|
sub SMARTMON_readDeviceData($%) {
|
||||||
my ($hash, $map) = @_;
|
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));
|
SMARTMON_Log($hash, 5, "device data: ".Dumper(@dev_data));
|
||||||
if(defined($dev_data[0])) {
|
if(defined($dev_data[0])) {
|
||||||
while(scalar(@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.
|
# Ausrechnet aus der Zahl der Stunden Anzeige in Tagen:Stunden:Minuten:Sekunden.
|
||||||
sub SMARTMON_hour2Dauer($){
|
sub SMARTMON_hour2Dauer($){
|
||||||
my ($t) = @_;
|
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
|
# liest RAW-Daten
|
||||||
@ -476,8 +496,10 @@ sub SMARTMON_hour2Dauer($){
|
|||||||
sub SMARTMON_readSmartData($;$) {
|
sub SMARTMON_readSmartData($;$) {
|
||||||
my ($hash, $include) = @_;
|
my ($hash, $include) = @_;
|
||||||
my $map;
|
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));
|
SMARTMON_Log($hash, 5, "device SMART data: ".Dumper(@dev_data));
|
||||||
if(defined($dev_data[0])) {
|
if(defined($dev_data[0])) {
|
||||||
while(scalar(@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).
|
Valid values: 0: Module active (default), 1: module is disabled (no updates).
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
|
<li>parameters<br>
|
||||||
|
Additional values for smartctl.
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
</ul><br>
|
</ul><br>
|
||||||
For more information see cmartctrl documentation.
|
For more information see cmartctrl documentation.
|
||||||
</ul>
|
</ul>
|
||||||
@ -687,6 +713,10 @@ sub SMARTMON_execute($$) {
|
|||||||
Gültige Werte: 0: Modul aktiv (default), 1: Modul deaktiviert (keine Aktualisierungen).
|
Gültige Werte: 0: Modul aktiv (default), 1: Modul deaktiviert (keine Aktualisierungen).
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
|
<li>parameters<br>
|
||||||
|
Zusatzparameter für den AUfruf von smartctl.
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
</ul><br>
|
</ul><br>
|
||||||
Für weitere Informationen wird die cmartctrl-Dokumentation empfohlen.
|
Für weitere Informationen wird die cmartctrl-Dokumentation empfohlen.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user