mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-01 15:44:52 +00:00
98_statistics: fix dst at month end bug (#123815)
git-svn-id: https://svn.fhem.de/fhem/trunk@26152 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
fb4dcaa0d7
commit
626d6512fd
@ -316,6 +316,7 @@ sub statistics_PeriodChange($)
|
||||
|
||||
# Determine the next day change time
|
||||
my @th=localtime();
|
||||
my $now = gettimeofday();
|
||||
my $dayChangeDelay = 0;
|
||||
my $dayChangeTime = timelocal(0,0,0,$th[3],$th[4],$th[5]+1900);
|
||||
if (AttrVal($name, "dayChangeTime", "00:00") =~ /(\d+):(\d+)/ && $1<24 && $1 >=0 && $2<60 && $2>=0) {
|
||||
@ -323,13 +324,15 @@ sub statistics_PeriodChange($)
|
||||
if ($dayChangeDelay == 0) { $dayChangeTime += 24*3600; } # Otherwise it would always lay in the past
|
||||
$dayChangeTime += $dayChangeDelay - $periodChangePreset;
|
||||
}
|
||||
my $dstcorr = HOURSECONDS * ((localtime($now - DAYSECONDS))[8] - $th[8]);
|
||||
$dayChangeTime += $dstcorr;
|
||||
|
||||
RemoveInternalTimer($hash);
|
||||
# Run period change procedure each full hour ("periodChangePreset" second before).
|
||||
my $periodEndTime = 3600 * ( int((gettimeofday()+$periodChangePreset)/3600) + 1 ) - $periodChangePreset ;
|
||||
my $periodEndTime = 3600 * ( int(($now+$periodChangePreset)/3600) + 1 ) - $periodChangePreset ;
|
||||
# Run procedure also for given dayChangeTime
|
||||
$val = "";
|
||||
if ( gettimeofday()<$dayChangeTime && $dayChangeTime<=$periodEndTime ) {
|
||||
if ( $now<$dayChangeTime && $dayChangeTime<=$periodEndTime ) {
|
||||
$periodEndTime = $dayChangeTime;
|
||||
$val = " (Day Change)";
|
||||
}
|
||||
@ -360,16 +363,17 @@ sub statistics_PeriodChange($)
|
||||
# get time values for 50 seconds before a new day
|
||||
($dummy, $dummy, $hourLast, $dayLast, $monthLast, $yearLast) = localtime ($curPeriodChangeTime - $dayChangeDelay + $periodChangePreset - 59);
|
||||
# get time values for next day
|
||||
($dummy, $dummy, $hourNow, $dayNow, $monthNow, $yearNow) = localtime (gettimeofday() + $periodChangePreset);
|
||||
($dummy, $dummy, $hourNow, $dayNow, $monthNow, $yearNow) = localtime ($now + $periodChangePreset);
|
||||
$periodSwitch = -2;
|
||||
if ($yearNow != $yearLast) { $periodSwitch = -4; }
|
||||
elsif ($monthNow != $monthLast) { $periodSwitch = -3; }
|
||||
# Positiv Value if periode changes at full hour
|
||||
$periodSwitch = abs($periodSwitch) if $dayChangeDelay % 3600 == 0;
|
||||
} else {
|
||||
($dummy, $dummy, $hourLast, $dummy, $dummy, $dummy) = localtime (gettimeofday());
|
||||
($dummy, $dummy, $hourNow, $dummy, $dummy, $dummy) = localtime (gettimeofday() + $periodChangePreset);
|
||||
if ($hourNow != $hourLast) {
|
||||
($dummy, $dummy, $hourLast, $dummy, $dummy) = localtime($now);
|
||||
($dummy, $dummy, $hourNow , $dummy, $dummy) = localtime($now + $periodChangePreset);
|
||||
if ( $hourNow != $hourLast
|
||||
|| $hourNow == $hourLast && $th[8] != (localtime($now - $dstcorr + $periodChangePreset))[8]) {
|
||||
$periodSwitch = 1;
|
||||
statistics_Log $hash,4,"Calculating hour change";
|
||||
} else {
|
||||
|
Loading…
x
Reference in New Issue
Block a user