statistics: bugfix duration singleReadings

git-svn-id: https://svn.fhem.de/fhem/trunk@7322 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
tpoitzsch
2014-12-25 20:56:19 +00:00
parent 11d7d9a53d
commit 289d31b52d

View File

@@ -866,18 +866,15 @@ sub statistics_doStatisticDurationSingle ($$$$$$)
my $statReadingName = $hash->{PREFIX}; my $statReadingName = $hash->{PREFIX};
$statReadingName .= ucfirst($readingName).$period; $statReadingName .= ucfirst($readingName).$period;
my %hidden; my %hidden;
my %stat;
my $firstRun = not exists($hash->{READINGS}{$hiddenReadingName}); my $firstRun = not exists($hash->{READINGS}{$hiddenReadingName});
my $lastState; my $lastState;
my $statValue;
my $statCount;
if ( $firstRun ) { if ( $firstRun ) {
# Show since-Value # Show since-Value
$hidden{"showDate:"} = 1; $hidden{"showDate:"} = 1;
$saveLast = 0; $saveLast = 0;
$lastState = $state; $lastState = $state;
$statValue = "00:00:00";
$statCount = 1;
$hidden{"(since:"} = strftime ("%Y-%m-%d_%H:%M:%S)",localtime() ); $hidden{"(since:"} = strftime ("%Y-%m-%d_%H:%M:%S)",localtime() );
$hidden{$state} = 0; $hidden{$state} = 0;
$hidden{$state."_Count"} = 1; $hidden{$state."_Count"} = 1;
@@ -889,8 +886,6 @@ sub statistics_doStatisticDurationSingle ($$$$$$)
$hidden{$lastState.":"} += $timeDiff; $hidden{$lastState.":"} += $timeDiff;
$hidden{$state."_Count:"}++ $hidden{$state."_Count:"}++
if $state ne $lastState; if $state ne $lastState;
$statCount = $hidden{$state."_Count:"};
$statValue = statistics_FormatDuration ($hidden{$lastState.":"});
} }
$hidden{"lastState:"} = $state; $hidden{"lastState:"} = $state;
$hidden{"lastTime:"} = int(gettimeofday()); $hidden{"lastTime:"} = int(gettimeofday());
@@ -900,12 +895,29 @@ sub statistics_doStatisticDurationSingle ($$$$$$)
foreach my $key (sort keys %hidden) foreach my $key (sort keys %hidden)
{ {
if ($key !~ /^(lastState|lastTime|showDate|\(since):$/) { if ($key !~ /^(lastState|lastTime|showDate|\(since):$/) {
# Create current summary reading
$result .= " " if $result; $result .= " " if $result;
$result .= "$key ".statistics_FormatDuration($hidden{$key}) if ($key !~ /_Count:$/)
if $key !~ /_Count:$/; {
$result .= "$key ".$hidden{$key} #Store current value for single readings
if $key =~ /_Count:$/; $stat{$key} = statistics_FormatDuration($hidden{$key});
if ($saveLast) { delete $hidden{$key}; } $result .= "$key ".$stat{$key};
# Reset hidden reading if period change
if ($saveLast) { delete $hidden{$key}; }
}
else
{
$result .= "$key ".$hidden{$key};
#Store current value for single readings
$stat{$key} = $hidden{$key};
# Reset hidden reading if period change
if ($saveLast && $key ne $state."_Count") {
delete $hidden{$key};
}
elsif ($saveLast && $key eq $state."_Count") {
$hidden{$key} = 1;
}
}
} }
} }
if ($hidden{"showDate:"} == 1) { $result .= " (since: ".$hidden{"(since:"}; } if ($hidden{"showDate:"} == 1) { $result .= " (since: ".$hidden{"(since:"}; }
@@ -925,11 +937,25 @@ sub statistics_doStatisticDurationSingle ($$$$$$)
# Store single readings # Store single readings
my $singularReadings = AttrVal($name, "singularReadings", ""); my $singularReadings = AttrVal($name, "singularReadings", "");
if ($singularReadings ne "") { if ($singularReadings ne "") {
# statistics_storeSingularReadings for Duration while (my ($statKey, $statValue) = each(%stat) )
# $hashName,$singularReadings,$dev,$statReadingName,$readingName,$statType,$period,$statValue,$value,$saveLast {
statistics_storeSingularReadings ($name,$singularReadings,$dev,$statReadingName,$readingName,ucfirst($lastState),$period,0,$statValue,$saveLast); unless ($saveLast)
# statistics_storeSingularReadings for Count {
statistics_storeSingularReadings ($name,$singularReadings,$dev,$statReadingName."_Count",$readingName,ucfirst($lastState)."_Count",$period,0,$statCount,$saveLast); chop ($statKey);
# statistics_storeSingularReadings
# $hashName,$singularReadings,$dev,$statReadingName,$readingName,$statType,$period,$statValue,$lastValue,$saveLast
statistics_storeSingularReadings ($name,$singularReadings,$dev,$statReadingName,$readingName,$statKey,$period,$statValue,0,$saveLast);
}
else
{
my $newValue = $hidden{$statKey};
chop ($statKey);
# statistics_storeSingularReadings
# $hashName,$singularReadings,$dev,$statReadingName,$readingName,$statType,$period,$statValue,$lastValue,$saveLast
statistics_storeSingularReadings ($name,$singularReadings,$dev,$statReadingName,$readingName,$statKey,$period,$newValue,$statValue,$saveLast);
}
}
} }
# Store hidden reading # Store hidden reading