2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

PROPLANTA: URL

statistics: Debugging possibilities

git-svn-id: https://svn.fhem.de/fhem/trunk@6847 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
tpoitzsch 2014-11-01 10:19:20 +00:00
parent 7e3135c5db
commit cc895ed1f5
2 changed files with 148 additions and 82 deletions

View File

@ -214,7 +214,7 @@ sub PROPLANTA_Initialize($)
$hash->{DefFn} = "PROPLANTA_Define";
$hash->{UndefFn} = "PROPLANTA_Undef";
$hash->{SetFn} = "PROPLANTA_Set";
$hash->{AttrList} = "delay " . "delayCounter " . "Interval " . "disable:0,1 " . $readingFnAttributes;
$hash->{AttrList} = "Interval URL disable:0,1 " . $readingFnAttributes;
}
###################################
sub PROPLANTA_Define($$)
@ -222,15 +222,20 @@ sub PROPLANTA_Define($$)
my ( $hash, $def ) = @_;
my $name = $hash->{NAME};
my @a = split( "[ \t][ \t]*", $def );
if ( int(@a) < 3 )
if ( int(@a) > 4 )
{
return "Wrong syntax: use define <name> PROPLANTA <City>";
return "Wrong syntax: use define <name> PROPLANTA [City] [Country]";
}
$hash->{URL} = "http://www.proplanta.de/Wetter/".$a[2]."-Wetter.html";
elsif ( int(@a) == 3 )
{
$hash->{URL} = "http://www.proplanta.de/Wetter/".$a[2]."-Wetter.html";
}
$hash->{STATE} = "Initializing";
$hash->{helper}{Timer} = $name ;
InternalTimer( gettimeofday() + 20, "PROPLANTA_Timer", $hash->{helper}{Timer}, 0 );
RemoveInternalTimer($hash);
InternalTimer( gettimeofday() + 12, "PROPLANTA_Start", $hash, 0 );
return undef;
}
#####################################
@ -238,8 +243,8 @@ sub PROPLANTA_Undef($$)
{
my ( $hash, $arg ) = @_;
RemoveInternalTimer( $hash->{helper}{TimerStatus} );
RemoveInternalTimer( $hash->{helper}{Timer} );
RemoveInternalTimer( $hash );
BlockingKill( $hash->{helper}{RUNNING} ) if ( defined( $hash->{helper}{RUNNING} ) );
return undef;
@ -275,19 +280,22 @@ sub PROPLANTA_Set($@)
}
#####################################
# acquires the html page of Global radiation
# acquires the html page
sub PROPLANTA_HtmlAcquire($)
{
my ($hash) = @_;
my $name = $hash->{NAME};
return unless (defined($hash->{NAME}));
my $URL = $hash->{URL};
my $URL = AttrVal( $name, 'URL', "" );
$URL = $hash->{URL} if $URL eq "";
# abbrechen, wenn wichtig parameter nicht definiert sind
# abbrechen, wenn wichtige parameter nicht definiert sind
return "" if ( !defined($URL) );
return "" if ( $URL eq "" );
PROPLANTA_Log $hash, 5, "Start polling of ".$URL;
my $err_log = "";
my $agent = LWP::UserAgent->new( env_proxy => 1, keep_alive => 1, timeout => 3 );
my $header = HTTP::Request->new( GET => $URL );
@ -309,13 +317,27 @@ sub PROPLANTA_HtmlAcquire($)
#####################################
sub PROPLANTA_Start($)
{
my ($hash) = @_;
my $name = $hash->{NAME};
my ($hash) = @_;
my $name = $hash->{NAME};
return unless (defined($hash->{NAME}));
return if ($hash->{URL} eq "");
$hash->{Interval} = AttrVal( $name, "Interval", 3600 );
# setup timer
RemoveInternalTimer( $hash );
InternalTimer(
gettimeofday() + $hash->{Interval},
"PROPLANTA_Start",
$name,
0 );
if ( AttrVal( $name, 'URL', '') eq '' && not defined( $hash->{URL} ) )
{
PROPLANTA_Log $hash, 3, "missing URL";
return;
}
$hash->{helper}{RUNNING} =
BlockingCall(
"PROPLANTA_Run", # callback worker task
@ -397,32 +419,6 @@ sub PROPLANTA_Aborted($)
delete( $hash->{helper}{RUNNING} );
}
#####################################
sub PROPLANTA_Timer($)
{
my ($timerpara) = @_;
# my ( $name, $func ) = split( /\./, $timerpara );
my $index = rindex($timerpara,"."); # rechter punkt
my $func = substr $timerpara,$index+1,length($timerpara); # function extrahieren
my $name = substr $timerpara,0,$index; # name extrahieren
my $hash = $defs{$name};
return unless (defined($hash->{NAME}));
$hash->{helper}{TimerInterval} = AttrVal( $name, "Interval", 3600 );
PROPLANTA_Start($hash);
# setup timer
RemoveInternalTimer( $hash->{helper}{Timer} );
InternalTimer(
gettimeofday() + $hash->{helper}{TimerInterval},
"PROPLANTA_Timer",
$hash->{helper}{Timer},
0 );
}
#####################################
1;
@ -464,6 +460,7 @@ sub PROPLANTA_Timer($)
<b>Attributes</b><br/><br/>
<ul>
<li><b>Interval</b> - poll interval for weather data in seconds (default 3600)</li>
<li><b>URL</b> - url to extract information from</li>
<br/>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
@ -480,4 +477,58 @@ sub PROPLANTA_Timer($)
</ul>
=end html
=begin html_DE
<a name="PROPLANTA"></a>
<h3>PROPLANTA</h3>
<ul style="width:800px">
<a name="PROPLANTAdefine"></a>
<b>Define</b>
<ul>
<br>
<code>define &lt;name&gt; PROPLANTA &lt;Stadt&gt;</code>
<br>
Das Modul extrahiert bestimmte Wetterdaten von der website www.proplanta.de.<br/>
<br>
<b>Parameters:</b><br>
<ul>
<li><b>&lt;Stadt&gt</b> - Prüfe auf www.proplanta.de, ob die Stadt bekannt ist. Die Stadt muss mit <b>großem</b> Anfangsbuchstaben anfangen.</li>
</ul>
</ul>
<br>
<a name="PROPLANTAset"></a>
<b>Set</b>
<ul>
<br/>
<code>set &lt;name&gt; update</code>
<br/>
<ul>
The weather data are immediately polled from the website.
</ul><br/>
</ul>
<a name="PROPLANTAattr"></a>
<b>Attribute</b><br/><br/>
<ul>
<li><b>Interval</b> - poll interval for weather data in seconds (default 3600)</li>
<li><b>URL</b> - url to extract information from</li>
<br/>
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
</ul>
<br/><br/>
<a name="PROPLANTAreading"></a>
<b>Generated Readings/Events</b><br/><br/>
<ul>
<li><b>fc?_uv</b> - the UV Index</li>
<li><b>fc?_sun</b> - the sunshine duration</li>
</ul>
<br/><br/>
</ul>
=end html_DE
=cut

View File

@ -54,6 +54,7 @@ sub statistics_UpdateDevReading($$$$);
# Modul Version for remote debugging
my $modulVersion = "2014-07-06";
my $MODUL = "statistics";
##############################################################
# Syntax: deviceType, readingName, statisticType, decimalPlaces
@ -85,6 +86,20 @@ sub statistics_UpdateDevReading($$$$);
);
##############################################################
sub ##########################################
statistics_Log($$$)
{
my ( $hash, $loglevel, $text ) = @_;
my $xline = ( caller(0) )[2];
my $xsubroutine = ( caller(1) )[3];
my $sub = ( split( ':', $xsubroutine ) )[2];
$sub =~ s/statistics_//;
my $instName = ( ref($hash) eq "HASH" ) ? $hash->{NAME} : $hash;
Log3 $hash, $loglevel, "$MODUL $instName: $sub.$xline " . $text;
}
sub ##########################################
statistics_Initialize($)
{
@ -118,7 +133,7 @@ statistics_Define($$)
my @a = split("[ \t][ \t]*", $def);
return "Usage: define <name> statistics <devicename-regexp> [prefix]"
if(3>@a || @a>4);
if(@a<3 || @a>4);
my $name = $a[0];
my $devName = $a[2];
@ -173,7 +188,7 @@ statistics_Set($$@)
$resultStr = "$name: Statistic value(s) reset:" . $resultStr;
readingsSingleUpdate($hash,"state","Statistic value(s) reset: $val",1);
}
# Log3 $hash, 3, $resultStr;
# statistics_Log $hash, 3, $resultStr;
return $resultStr;
} elsif ($cmd eq 'doStatistics') {
@ -196,7 +211,7 @@ statistics_Notify($$)
if ($devName eq "global" && grep (m/^INITIALIZED|REREADCFG$/,@{$dev->{CHANGED}})) {
foreach my $r (keys %{$hash->{READINGS}}) {
if ($r =~ /^monitoredDevices.*/) {
Log3 $name,5,"$name: Initialization - Delete old reading '$r'.";
statistics_Log $hash,5,"Initialization - Delete old reading '$r'.";
delete($hash->{READINGS}{$r});
}
}
@ -212,7 +227,7 @@ statistics_Notify($$)
}
}
if ($val ne "") {
Log3 $name,4,"$name: Initialization - Found hidden readings for device(s) '$val'.";
statistics_Log $hash, 4, "Initialization - Found hidden readings for device(s) '$val'.";
readingsSingleUpdate($hash,"monitoredDevicesUnknown",$val,1);
}
return;
@ -220,14 +235,14 @@ statistics_Notify($$)
# Ignore my own notifications
if($devName eq $name) {
Log3 $name,5,"$name: Notifications of myself received.";
statistics_Log $hash, 5, "Notifications of myself received.";
return "" ;
}
# Return if the notifying device is not monitored
return "" if(!defined($hash->{DEV_REGEXP}));
my $regexp = $hash->{DEV_REGEXP};
if($devName !~ m/^($regexp)$/) {
Log3 $name,5,"$name: Notification of '".$dev->{NAME}."' received. Device not monitored.";
statistics_Log $hash, 5, "Notification of '".$dev->{NAME}."' received. Device not monitored.";
return "" ;
}
@ -243,9 +258,9 @@ statistics_Notify($$)
if ($normalReadingFound==1) {
statistics_DoStatistics $hash, $dev, 0;
Log3 $name,5,"$name: Notification of '".$dev->{NAME}."' received. Update statistics.";
statistics_Log $hash, 5, "Notification of '".$dev->{NAME}."' received. Update statistics.";
} else {
Log3 $name,5,"$name: Notification of '".$dev->{NAME}."' received but for my own readings only.";
statistics_Log $hash, 5, "Notification of '".$dev->{NAME}."' received but for my own readings only.";
}
return;
@ -284,7 +299,7 @@ statistics_PeriodChange($)
$val = strftime ("%Y-%m-%d %H:%M:%S", localtime($periodEndTime)) . $val;
InternalTimer( $periodEndTime, "statistics_PeriodChange", $hash, 1);
readingsSingleUpdate($hash, "nextPeriodChangeCalc", $val, 0);
Log3 $name,4,"$name: Next period change will be calculated at $val";
statistics_Log $hash, 4, "Next period change will be calculated at $val";
return if( AttrVal($name, "disable", 0 ) == 1 );
@ -301,7 +316,7 @@ statistics_PeriodChange($)
my $yearNow;
if ($isDayChange) {
Log3 $name,4,"$name: Calculating day change";
statistics_Log $hash, 4, "Calculating day change";
($dummy, $dummy, $hourLast, $dayLast, $monthLast, $yearLast) = localtime (gettimeofday() - $dayChangeDelay + $periodChangePreset - 59);
($dummy, $dummy, $hourNow, $dayNow, $monthNow, $yearNow) = localtime (gettimeofday() + $periodChangePreset);
if ($yearNow != $yearLast) { $periodSwitch = -4; }
@ -313,9 +328,9 @@ statistics_PeriodChange($)
($dummy, $dummy, $hourNow, $dummy, $dummy, $dummy) = localtime (gettimeofday() + $periodChangePreset);
if ($hourNow != $hourLast) {
$periodSwitch = 1;
Log3 $name,4,"$name: Calculating hour change";
statistics_Log $hash,4,"Calculating hour change";
} else {
Log3 $name,4,"$name: Calculating statistics at startup";
statistics_Log $hash,4,"Calculating statistics at startup";
}
}
@ -334,7 +349,7 @@ statistics_DoStatisticsAll($$)
my $regexp = $hash->{DEV_REGEXP};
foreach my $devName (sort keys %defs) {
if ($devName ne $name && $devName =~ m/^($regexp)$/) {
Log3 $name,4,"$name: Doing statistics (type $periodSwitch) for device '$devName'";
statistics_Log $hash,4,"Doing statistics (type $periodSwitch) for device '$devName'";
statistics_DoStatistics($hash, $defs{$devName}, $periodSwitch);
}
}
@ -368,7 +383,7 @@ statistics_DoStatistics($$$)
if($monReadingValue eq "") { $monReadingValue = $devName;}
else {$monReadingValue .= ",".$devName;}
readingsSingleUpdate($hash,"monitoredDevicesUnserved",$monReadingValue,1);
Log3 $hashName,3,"$hashName: Device '$devName' identified as supported but already servered by '$servedBy'.";
statistics_Log $hash, 3, "Device '$devName' identified as supported but already servered by '$servedBy'.";
}
return;
}
@ -491,7 +506,7 @@ statistics_doStatisticMinMax ($$$$$$)
my $value = $dev->{READINGS}{$readingName}{VAL};
$value =~ s/^[\D]*([\d.]*).*/$1/eg;
Log3 $name, 4, "Calculating min/avg/max statistics for '".$dev->{NAME}.":$readingName = $value'";
statistics_Log $hash, 4, "Calculating min/avg/max statistics for '".$dev->{NAME}.":$readingName = $value'";
# statistics_doStatisticMinMaxSingle: $hash, $readingName, $value, $saveLast, decPlaces
# Hourly statistic (if needed)
if ($doHourly) { statistics_doStatisticMinMaxSingle $hash, $dev, $readingName, "Hour", $value, ($periodSwitch >= 1), $decPlaces; }
@ -547,14 +562,14 @@ statistics_doStatisticMinMaxSingle ($$$$$$$)
# Store current reading as last reading, Reset current reading
if ($saveLast) {
readingsBulkUpdate($dev, $statReadingName . "Last", $result, 1);
Log3 $name, 5, "Set '".$statReadingName . "Last'='$result'";
statistics_Log $hash, 5, "Set '".$statReadingName . "Last'='$result'";
$hidden[1] = 0; $hidden[3] = 0; $hidden[9] = 0; # No since value anymore
$result = "Min: $value Avg: $value Max: $value";
}
# Store current reading
readingsBulkUpdate($dev, $statReadingName, $result, 0);
Log3 $name, 5, "Set '$statReadingName'='$result'";
statistics_Log $hash, 5, "Set '$statReadingName'='$result'";
# Store single readings
my $singularReadings = AttrVal($name, "singularReadings", "");
@ -574,7 +589,7 @@ statistics_doStatisticMinMaxSingle ($$$$$$$)
# Store hidden reading
$result = "Sum: $hidden[1] Time: $hidden[3] LastValue: ".$value." LastTime: ".int(gettimeofday())." ShowDate: $hidden[9]";
readingsSingleUpdate($hash, $hiddenReadingName, $result, 0);
Log3 $name, 5, "Set '$hiddenReadingName'='$result'";
statistics_Log $hash, 5, "Set '$hiddenReadingName'='$result'";
return;
}
@ -591,7 +606,7 @@ statistics_doStatisticTendency ($$$$)
# Get reading, cut out first number without units
my $value = $dev->{READINGS}{$readingName}{VAL};
$value =~ s/^[\D]*([\d.]*).*/$1/eg;
Log3 $name, 4, "Calculating hourly tendency statistics for '".$dev->{NAME}.":$readingName = $value'";
statistics_Log $hash, 4, "Calculating hourly tendency statistics for '".$dev->{NAME}.":$readingName = $value'";
my $statReadingName = $hash->{PREFIX} . ucfirst($readingName) . "Tendency";
my $hiddenReadingName = ".".$dev->{NAME}.":".$readingName."Tendency";
@ -601,18 +616,18 @@ statistics_doStatisticTendency ($$$$)
if ( $firstRun ) {
@stat = split / /, "1h: - 2h: - 3h: - 6h: -";
Log3 $name,4,"$name: Initializing statistic of '$hiddenReadingName'.";
statistics_Log $hash,4,"Initializing statistic of '$hiddenReadingName'.";
$hash->{READINGS}{$hiddenReadingName}{VAL} = "";
} else {
@stat = split / /, $dev->{READINGS}{$statReadingName}{VAL};
}
my $result = $value;
Log3 $name,4,"$name: Add $value to $hiddenReadingName";
statistics_Log $hash, 4, "Add $value to $hiddenReadingName";
if (exists ($hash->{READINGS}{$hiddenReadingName}{VAL})) { $result .= " " . $hash->{READINGS}{$hiddenReadingName}{VAL}; }
@hidden = split / /, $result; # Internal values
if ( exists($hidden[7]) ) {
Log3 $name,4,"$name: Remove last value ".$hidden[7]." from '$hiddenReadingName'";
statistics_Log $hash, 4, "Remove last value ".$hidden[7]." from '$hiddenReadingName'";
delete $hidden[7];
}
if ( exists($hidden[1]) ) {$stat[1] = sprintf "%+.".$decPlaces."f", $value-$hidden[1];}
@ -635,7 +650,7 @@ statistics_doStatisticTendency ($$$$)
$result = join( " ", @hidden );
readingsSingleUpdate($hash, $hiddenReadingName, $result, 0);
Log3 $name,4,"$name: Set '$hiddenReadingName = $result'";
statistics_Log $hash, 4, "Set '$hiddenReadingName = $result'";
return ;
}
@ -657,7 +672,7 @@ statistics_doStatisticDelta ($$$$)
# Get reading, extract first number without units
my $value = $dev->{READINGS}{$readingName}{VAL};
$value =~ s/^[\D]*([\d.]*).*/$1/eg;
Log3 $name, 4, "Calculating delta statistics for '".$dev->{NAME}.":$readingName = $value'";
statistics_Log $hash, 4, "Calculating delta statistics for '".$dev->{NAME}.":$readingName = $value'";
my $hiddenReadingName = ".".$dev->{NAME}.":".$readingName;
@ -673,7 +688,7 @@ statistics_doStatisticDelta ($$$$)
@stat = split / /, "Hour: 0 Day: 0 Month: 0 Year: 0";
$stat[9] = strftime ("%Y-%m-%d_%H:%M:%S",localtime() );
@last = split / /, "Hour: - Day: - Month: - Year: -";
Log3 $name,4,"$name: Initializing statistic of '$hiddenReadingName'.";
statistics_Log $hash, 4, "Initializing statistic of '$hiddenReadingName'.";
} else {
# Do calculations if hidden reading exists
@stat = split / /, $dev->{READINGS}{$statReadingName}{VAL};
@ -702,7 +717,7 @@ statistics_doStatisticDelta ($$$$)
$stat[7] = 0;
if ($showDate == 1) { $showDate = 0; } # Do not show the "since:" value for year changes anymore
if ($showDate >= 2) { $showDate = 1; $last[9] = $stat[9]; } # Shows the "since:" value for the first year change
Log3 $name,4,"$name: Shifting current year in last value of '$statReadingName'.";
statistics_Log $hash, 4, "Shifting current year in last value of '$statReadingName'.";
}
# If change of month, change monthly statistic
if ($periodSwitch >= 3 || $periodSwitch <= -3){
@ -710,7 +725,7 @@ statistics_doStatisticDelta ($$$$)
$stat[5] = 0;
if ($showDate == 3) { $showDate = 2; } # Do not show the "since:" value for month changes anymore
if ($showDate >= 4) { $showDate = 3; $last[9] = $stat[9]; } # Shows the "since:" value for the first month change
Log3 $name,4,"$name: Shifting current month in last value of '$statReadingName'.";
statistics_Log $hash, 4, "Shifting current month in last value of '$statReadingName'.";
}
# If change of day, change daily statistic
if ($periodSwitch >= 2 || $periodSwitch <= -2){
@ -728,7 +743,7 @@ statistics_doStatisticDelta ($$$$)
$stat[9] = strftime "%Y-%m-%d", localtime(gettimeofday()+$periodChangePreset); # start
}
}
Log3 $name,4,"$name: Shifting current day in last value of '$statReadingName'.";
statistics_Log $hash,4,"Shifting current day in last value of '$statReadingName'.";
}
# If change of hour, change hourly statistic
if ($periodSwitch >= 1){
@ -736,27 +751,27 @@ statistics_doStatisticDelta ($$$$)
$stat[1] = 0;
if ($showDate == 7) { $showDate = 6; } # Do not show the "since:" value for day changes anymore
if ($showDate >= 8) { $showDate = 7; $last[9] = $stat[9]; } # Shows the "since:" value for the first hour change
Log3 $name,4,"$name: Shifting current hour in last value of '$statReadingName'.";
statistics_Log $hash, 4, "Shifting current hour in last value of '$statReadingName'.";
}
}
# Store hidden reading
$result = "LastValue: $value ShowDate: $showDate DecPlaces: $decPlaces";
readingsSingleUpdate($hash, $hiddenReadingName, $result, 0);
Log3 $name,5,"$name: Set '$hiddenReadingName'='$result'";
statistics_Log $hash, 5, "Set '$hiddenReadingName'='$result'";
# Store visible statistic readings (delta values)
$result = sprintf "Hour: %.".$decPlaces."f Day: %.".$decPlaces."f Month: %.".$decPlaces."f Year: %.".$decPlaces."f", $stat[1], $stat[3], $stat[5], $stat[7];
if ( $showDate >=2 ) { $result .= " (since: $stat[9] )"; }
readingsBulkUpdate($dev,$statReadingName,$result, 1);
Log3 $name,5,"$name: Set '$statReadingName'='$result'";
statistics_Log $hash, 5, "Set '$statReadingName'='$result'";
# if changed, store previous visible statistic (delta) values
if ($periodSwitch >= 1) {
$result = "Hour: $last[1] Day: $last[3] Month: $last[5] Year: $last[7]";
if ( $showDate =~ /1|3|5|7/ ) { $result .= " (since: $last[9] )"; }
readingsBulkUpdate($dev,$statReadingName."Last",$result, 1);
Log3 $name,4,"$name: Set '".$statReadingName."Last'='$result'";
statistics_Log $hash, 4, "Set '".$statReadingName."Last'='$result'";
}
# Store single readings
@ -791,11 +806,11 @@ statistics_doStatisticSpecialPeriod ($$$$$)
my $hiddenReadingName = ".".$dev->{NAME} . ":" . $readingName . "SpecialPeriod";
my $result = $value;
Log3 $name,4,"$name: Add $value to $hiddenReadingName";
statistics_Log $hash, 4, "Add $value to $hiddenReadingName";
if (exists ($hash->{READINGS}{$hiddenReadingName}{VAL})) { $result .= " " . $hash->{READINGS}{$hiddenReadingName}{VAL}; }
my @hidden = split / /, $result; # Internal values
if ( exists($hidden[$specialPeriod]) ) {
Log3 $name,4,"$name: Remove last value ".$hidden[$specialPeriod]." from '$hiddenReadingName'";
statistics_Log $hash, 4, "Remove last value ".$hidden[$specialPeriod]." from '$hiddenReadingName'";
delete $hidden[$specialPeriod];
}
@ -807,7 +822,7 @@ statistics_doStatisticSpecialPeriod ($$$$$)
$result = join( " ", @hidden );
readingsSingleUpdate($hash, $hiddenReadingName, $result, 0);
Log3 $name,4,"$name: Set '$hiddenReadingName = $result'";
statistics_Log $hash, 4, "Set '$hiddenReadingName = $result'";
}
@ -823,7 +838,7 @@ statistics_doStatisticDuration ($$$$)
# Get reading, cut out first number without units
my $state = $dev->{READINGS}{$readingName}{VAL};
Log3 $name, 4, "Calculating duration statistics for '".$dev->{NAME}.":$readingName = $state'";
statistics_Log $hash, 4, "Calculating duration statistics for '".$dev->{NAME}.":$readingName = $state'";
# Daily Statistic
statistics_doStatisticDurationSingle $hash, $dev, $readingName, "Day", $state, ($periodSwitch >= 2 || $periodSwitch <= -2);
# Monthly Statistic
@ -882,14 +897,14 @@ statistics_doStatisticDurationSingle ($$$$$$)
# Store current reading as last reading, Reset current reading
if ($saveLast) {
readingsBulkUpdate($dev, $statReadingName . "Last", $result, 1);
Log3 $name, 5, "Set '".$statReadingName . "Last = $result'";
statistics_Log $hash, 5, "Set '".$statReadingName . "Last = $result'";
$result = "$state: 00:00:00";
$hidden{"showDate:"} = 0;
}
# Store current reading
readingsBulkUpdate($dev, $statReadingName, $result, 0);
Log3 $name, 5, "Set '$statReadingName = $result'";
statistics_Log $hash, 5, "Set '$statReadingName = $result'";
# Store single readings
my $singularReadings = AttrVal($name, "singularReadings", "");
@ -905,7 +920,7 @@ statistics_doStatisticDurationSingle ($$$$$$)
$result .= "$key $duration";
}
readingsSingleUpdate($hash, $hiddenReadingName, $result, 0);
Log3 $name, 5, "Set '$hiddenReadingName = $result'";
statistics_Log $hash, 5, "Set '$hiddenReadingName = $result'";
return;
}
@ -922,10 +937,10 @@ statistics_storeSingularReadings ($$$$$$$$$$)
my $devName=$dev->{NAME};
if ("$devName:$readingName:$statType:$period" =~ /^($singularReadings)$/) {
readingsBulkUpdate($dev, $statReadingName, $statValue, 1);
Log3 $hashName, 5, "Set ".$statReadingName." = $statValue";
statistics_Log $hashName, 5, "Set ".$statReadingName." = $statValue";
if ($saveLast) {
readingsBulkUpdate($dev, $statReadingName."Last", $lastValue, 1);
Log3 $hashName, 5, "Set ".$statReadingName."Last = $lastValue";
statistics_Log $hashName, 5, "Set ".$statReadingName."Last = $lastValue";
}
}
}