2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-08 13:24:56 +00:00

statistics: Duration + Count

git-svn-id: https://svn.fhem.de/fhem/trunk@7320 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
tpoitzsch 2014-12-25 19:10:01 +00:00
parent 387501ad89
commit 1a701d3953
2 changed files with 31 additions and 12 deletions

View File

@ -528,11 +528,13 @@ FRITZBOX_Readout_Run($)
push @readoutArray, ["", "ctlmgr_ctl r telcfg settings/RefreshDiversity" ];
push @readoutArray, ["", "ctlmgr_ctl r telcfg settings/Diversity/count" ];
# Box model and firmware
# Box model and firmware
push @readoutArray, [ "box_model", 'echo $CONFIG_PRODUKT_NAME' ];
push @readoutArray, [ "box_fwVersion", "ctlmgr_ctl r logic status/nspver" ];
push @readoutArray, [ "box_fwUpdate", "ctlmgr_ctl r updatecheck status/update_available_hint" ];
push @readoutArray, [ "box_tr069", "ctlmgr_ctl r tr069 settings/enabled", "onoff" ];
# Execute commands
$resultArray = FRITZBOX_Readout_Query( $hash, \@readoutArray, \@readoutReadings);
my $dectCount = $resultArray->[1];
@ -1974,6 +1976,7 @@ sub FRITZBOX_fritztris($)
<li><b>box_guestWlanRemain</b> - Remaining time until the guest WLAN is switched off</li>
<li><b>box_model</b> - Fritz!Box model</li>
<li><b>box_moh</b> - music-on-hold setting</li>
<li><b>box_tr069</b> - provider remote access TR069 (safety issue!)</li>
<li><b>box_wlan_2.4GHz</b> - Current state of the 2.4 GHz WLAN</li>
<li><b>box_wlan_5GHz</b> - Current state of the 5 GHz WLAN</li>
@ -2215,6 +2218,7 @@ sub FRITZBOX_fritztris($)
<li><b>box_guestWlanRemain</b> - Verbleibende Zeit bis zum Ausschalten des G&auml;ste-WLAN</li>
<li><b>box_model</b> - Fritz!Box-Modell</li>
<li><b>box_moh</b> - Wartemusik-Einstellung</li>
<li><b>box_tr069</b> - Provider-Fernwartung TR069 (sicherheitsrelevant!)</li>
<li><b>box_wlan_2.4GHz</b> - Aktueller Status des 2.4-GHz-WLAN</li>
<li><b>box_wlan_5GHz</b> - Aktueller Status des 5-GHz-WLAN</li>

View File

@ -861,48 +861,60 @@ sub statistics_doStatisticDurationSingle ($$$$$$)
my $hiddenReadingName = ".".$dev->{NAME}.":".$readingName.$period;
my $name=$hash->{NAME};
my $devName = $dev->{NAME};
$state =~ s/ /_/g;
my $statReadingName = $hash->{PREFIX};
$statReadingName .= ucfirst($readingName).$period;
my %hidden;
my $firstRun = not exists($hash->{READINGS}{$hiddenReadingName});
my $lastState = $state;
my $statValue = "00:00:00";
my $lastState;
my $statValue;
my $statCount;
if ( $firstRun ) {
# Show since-Value
$hidden{"showDate:"} = 1;
$saveLast = 0;
$lastState = $state;
$statValue = "00:00:00";
$statCount = 1;
$hidden{"(since:"} = strftime ("%Y-%m-%d_%H:%M:%S)",localtime() );
$hidden{$state} = 0;
$hidden{$state."_Count"} = 1;
} else {
# Do calculations if hidden reading exists
%hidden = split / /, $hash->{READINGS}{$hiddenReadingName}{VAL}; # Internal values
$lastState = $hidden{"lastState:"};
my $timeDiff = int(gettimeofday())-$hidden{"lastTime:"};
$hidden{$lastState.":"} += $timeDiff;
$hidden{$state."_Count:"}++
if $state ne $lastState;
$statCount = $hidden{$state."_Count:"};
$statValue = statistics_FormatDuration ($hidden{$lastState.":"});
}
$hidden{"lastState:"} = $state;
$hidden{"lastTime:"} = int(gettimeofday());
# Prepare new current reading, delete hidden reading if it is used again
$result = "";
while (my ($key, $duration) = each(%hidden)){
if ($key !~ /lastState:|lastTime:|showDate:|since:/) {
if ($result ne "") {$result .= " ";}
$result .= "$key ".statistics_FormatDuration($duration);
foreach my $key (sort keys %hidden)
{
if ($key !~ /^(lastState|lastTime|showDate|\(since):$/) {
$result .= " " if $result;
$result .= "$key ".statistics_FormatDuration($hidden{$key})
if $key !~ /_Count:$/;
$result .= "$key ".$hidden{$key}
if $key =~ /_Count:$/;
if ($saveLast) { delete $hidden{$key}; }
}
}
if ($result eq "") {$result = "$state: 0";}
if ($hidden{"showDate:"} == 1) { $result .= " (since: ".$hidden{"(since:"}; }
# Store current reading as last reading, Reset current reading
if ($saveLast) {
readingsBulkUpdate($dev, $statReadingName . "Last", $result, 1);
statistics_Log $hash, 5, "Set '".$statReadingName . "Last = $result'";
$result = "$state: 00:00:00";
$result = "$state: 00:00:00 ".$state."_Count: 1";
$hidden{"showDate:"} = 0;
}
@ -913,14 +925,17 @@ sub statistics_doStatisticDurationSingle ($$$$$$)
# Store single readings
my $singularReadings = AttrVal($name, "singularReadings", "");
if ($singularReadings ne "") {
# statistics_storeSingularReadings $hashName,$singularReadings,$dev,$statReadingName,$readingName,$statType,$period,$statValue,$value,$saveLast
# statistics_storeSingularReadings for Duration
# $hashName,$singularReadings,$dev,$statReadingName,$readingName,$statType,$period,$statValue,$value,$saveLast
statistics_storeSingularReadings ($name,$singularReadings,$dev,$statReadingName,$readingName,ucfirst($lastState),$period,$statValue,0,$saveLast);
# statistics_storeSingularReadings for Count
statistics_storeSingularReadings ($name,$singularReadings,$dev,$statReadingName."_Count",$readingName,ucfirst($lastState)."_Count",$period,$statCount,0,$saveLast);
}
# Store hidden reading
$result = "";
while (my ($key, $duration) = each(%hidden)){
if ($result ne "") {$result .= " ";}
$result .= " " if $result;
$result .= "$key $duration";
}
readingsSingleUpdate($hash, $hiddenReadingName, $result, 0);