statistics: bugfix duration singleReadings
git-svn-id: https://svn.fhem.de/fhem/trunk@7322 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user