mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-01 20:20:10 +00:00
feature: new reading last_exit_code
git-svn-id: https://svn.fhem.de/fhem/trunk@14440 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
04f92b69b0
commit
dcb4590d79
@ -31,7 +31,7 @@ use strict;
|
|||||||
use warnings;
|
use warnings;
|
||||||
use Data::Dumper;
|
use Data::Dumper;
|
||||||
|
|
||||||
my $VERSION = "0.9.1.1";
|
my $VERSION = "0.9.5";
|
||||||
|
|
||||||
my $DEFAULT_INTERVAL = 60; # in minuten
|
my $DEFAULT_INTERVAL = 60; # in minuten
|
||||||
|
|
||||||
@ -142,28 +142,35 @@ sub SMARTMON_Get($@)
|
|||||||
{
|
{
|
||||||
if(@a<3) {return "$name: get list needs at least one parameter"; }
|
if(@a<3) {return "$name: get list needs at least one parameter"; }
|
||||||
my $subcmd=$a[2];
|
my $subcmd=$a[2];
|
||||||
my $t;
|
my @t;
|
||||||
|
my $r;
|
||||||
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".$param." ".$tdev);
|
($r, @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".$param." ".$tdev);
|
($r, @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".$param." ".$tdev);
|
($r, @t) = SMARTMON_execute($hash, "sudo smartctl -H".$param." ".$tdev);
|
||||||
}
|
}
|
||||||
if($subcmd eq "devices") {
|
if($subcmd eq "devices") {
|
||||||
$t = SMARTMON_execute($hash, "sudo smartctl --scan");
|
($r, @t) = SMARTMON_execute($hash, "sudo smartctl --scan");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!$t) {return "unknown parameter";}
|
my $tt;
|
||||||
return $t;
|
if(defined($t[0])) {
|
||||||
|
if(scalar(@t)>0) {
|
||||||
|
$tt = join('',@t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!$tt) {return "unknown parameter";}
|
||||||
|
return $tt."\nreturn code: ".$r;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($cmd eq "version")
|
if($cmd eq "version")
|
||||||
@ -265,6 +272,7 @@ sub SMARTMON_refreshReadings($) {
|
|||||||
|
|
||||||
foreach my $aName (keys %{$map}) {
|
foreach my $aName (keys %{$map}) {
|
||||||
my $value = $map->{$aName};
|
my $value = $map->{$aName};
|
||||||
|
#SMARTMON_Log($hash, 5, "Update: ".$value);
|
||||||
# Nur aktualisieren, wenn ein gueltiges Value vorliegt
|
# Nur aktualisieren, wenn ein gueltiges Value vorliegt
|
||||||
if(defined $value) {
|
if(defined $value) {
|
||||||
readingsBulkUpdate($hash,$aName,$value);
|
readingsBulkUpdate($hash,$aName,$value);
|
||||||
@ -297,12 +305,21 @@ sub SMARTMON_obtainParameters($) {
|
|||||||
# Health
|
# Health
|
||||||
my $param="";
|
my $param="";
|
||||||
if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};}
|
if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};}
|
||||||
my $dev_health = SMARTMON_execute($hash, "sudo smartctl -H".$param." ".$hash->{DEVICE}." | grep 'test result:'");
|
my ($rcode, @adev_health) = SMARTMON_execute($hash, "sudo smartctl -H".$param." ".$hash->{DEVICE}." | grep 'test result:'");
|
||||||
SMARTMON_Log($hash, 5, "health: $dev_health");
|
my $dev_health;
|
||||||
if($dev_health=~m/test\s+result:\s+(\S+).*/) {
|
my $tt;
|
||||||
$map->{"overall_health_test"} = $1;
|
if(defined($adev_health[0])) {
|
||||||
} else {
|
if(scalar(@adev_health)>0) {
|
||||||
delete $map->{"overall_health_test"};
|
$dev_health = join('',@adev_health);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
delete $map->{"overall_health_test"};
|
||||||
|
if(defined($dev_health)) {
|
||||||
|
SMARTMON_Log($hash, 5, "health: $dev_health");
|
||||||
|
if($dev_health=~m/test\s+result:\s+(\S+).*/) {
|
||||||
|
$map->{"overall_health_test"} = $1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$map = SMARTMON_getSmartDataReadings($hash, $map);
|
$map = SMARTMON_getSmartDataReadings($hash, $map);
|
||||||
@ -335,6 +352,7 @@ sub SMARTMON_getSmartDataReadings($$) {
|
|||||||
my $cnt_prefail=0;
|
my $cnt_prefail=0;
|
||||||
my $sr = AttrVal($name, "show_raw", "0");
|
my $sr = AttrVal($name, "show_raw", "0");
|
||||||
foreach my $id (sort keys %{$dmap}) {
|
foreach my $id (sort keys %{$dmap}) {
|
||||||
|
if($id eq "RC") {next}
|
||||||
# warnings zaehlen
|
# warnings zaehlen
|
||||||
if($dmap->{$id}->{failed} ne "-") {
|
if($dmap->{$id}->{failed} ne "-") {
|
||||||
if($dmap->{$id}->{type} eq "Pre-fail") {$cnt_prefail++;}
|
if($dmap->{$id}->{type} eq "Pre-fail") {$cnt_prefail++;}
|
||||||
@ -369,7 +387,7 @@ sub SMARTMON_readDeviceData($%) {
|
|||||||
|
|
||||||
my $param="";
|
my $param="";
|
||||||
if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};}
|
if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};}
|
||||||
my @dev_data = SMARTMON_execute($hash, "sudo smartctl -i".$param." ".$hash->{DEVICE});
|
my ($r, @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) {
|
||||||
@ -462,6 +480,11 @@ sub SMARTMON_interpretKnownData($$$) {
|
|||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
|
if($dmap->{"RC"}) {
|
||||||
|
$map->{last_exit_code} = $dmap->{"RC"}->{raw};
|
||||||
|
$known->{"RC"}=1;
|
||||||
|
}
|
||||||
|
|
||||||
return $known;
|
return $known;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,8 +504,11 @@ sub SMARTMON_sec2Dauer($){
|
|||||||
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 =~ /([0-9]*)/;
|
||||||
$t = $t-($d*24);
|
my $d=int($1/24);
|
||||||
|
$t = $1-($d*24);
|
||||||
|
#my $d=int($t/24);
|
||||||
|
#$t = $t-($d*24);
|
||||||
my $y=int($d/365);
|
my $y=int($d/365);
|
||||||
$d = $d-($y*365);
|
$d = $d-($y*365);
|
||||||
return sprintf("%d Jahre %d Tage %d Std.",$y,$d,$t);
|
return sprintf("%d Jahre %d Tage %d Std.",$y,$d,$t);
|
||||||
@ -499,8 +525,9 @@ sub SMARTMON_readSmartData($;$) {
|
|||||||
|
|
||||||
my $param="";
|
my $param="";
|
||||||
if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};}
|
if($hash->{PARAMETERS}) {$param=" ".$hash->{PARAMETERS};}
|
||||||
my @dev_data = SMARTMON_execute($hash, "sudo smartctl -A".$param." ".$hash->{DEVICE});
|
my ($r, @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($r)) {$map->{"RC"}->{raw} = $r;}
|
||||||
if(defined($dev_data[0])) {
|
if(defined($dev_data[0])) {
|
||||||
while(scalar(@dev_data)>0) {
|
while(scalar(@dev_data)>0) {
|
||||||
shift @dev_data;
|
shift @dev_data;
|
||||||
@ -540,12 +567,19 @@ sub SMARTMON_execute($$) {
|
|||||||
|
|
||||||
SMARTMON_Log($hash, 5, "Execute: $cmd");
|
SMARTMON_Log($hash, 5, "Execute: $cmd");
|
||||||
|
|
||||||
return qx($cmd);
|
local $SIG{'CHLD'}='DEFAULT';
|
||||||
|
my @ret = qx($cmd);
|
||||||
|
my $rcode = $?>>8;
|
||||||
|
SMARTMON_Log($hash, 5, "Returncode: ".$rcode);
|
||||||
|
return ($rcode,@ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
=pod
|
=pod
|
||||||
|
=item device
|
||||||
|
=item summary provides some statistics about the S.M.A.R.T. capable drive
|
||||||
|
=item summary_DE liefert einige Statistiken ueber S.M.A.R.T. kompatible Geräte
|
||||||
=begin html
|
=begin html
|
||||||
|
|
||||||
<!-- ================================ -->
|
<!-- ================================ -->
|
||||||
@ -570,6 +604,9 @@ sub SMARTMON_execute($$) {
|
|||||||
<b>Readings:</b>
|
<b>Readings:</b>
|
||||||
<br><br>
|
<br><br>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>last_exit_code<br>
|
||||||
|
Exit code of smartctl.
|
||||||
|
</li>
|
||||||
<li>overall_health_test<br>
|
<li>overall_health_test<br>
|
||||||
Specifies the general condition of the HDD (PASSED or FAILED).
|
Specifies the general condition of the HDD (PASSED or FAILED).
|
||||||
</li>
|
</li>
|
||||||
@ -658,6 +695,10 @@ sub SMARTMON_execute($$) {
|
|||||||
<b>Readings:</b>
|
<b>Readings:</b>
|
||||||
<br><br>
|
<br><br>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li>last_exit_code<br>
|
||||||
|
Gibt den Exitcode bei der letzten Ausführung vom smartctl.
|
||||||
|
</li>
|
||||||
|
<br>
|
||||||
<li>overall_health_test<br>
|
<li>overall_health_test<br>
|
||||||
Gibt den allgemeinen Zustand der Platte an. Kann PASSED oder FAILED sein.
|
Gibt den allgemeinen Zustand der Platte an. Kann PASSED oder FAILED sein.
|
||||||
</li>
|
</li>
|
||||||
@ -714,7 +755,7 @@ sub SMARTMON_execute($$) {
|
|||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
<li>parameters<br>
|
<li>parameters<br>
|
||||||
Zusatzparameter für den AUfruf von smartctl.
|
Zusatzparameter für den Aufruf von smartctl.
|
||||||
</li>
|
</li>
|
||||||
<br>
|
<br>
|
||||||
</ul><br>
|
</ul><br>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user