From 2a5d3c0186eb3d74f2a19c6350abe993341ac78d Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sat, 20 Jan 2018 20:12:25 +0000 Subject: [PATCH] fhem.pl: fix the $hour Bug (Forum #82991) git-svn-id: https://svn.fhem.de/fhem/trunk@15940 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/fhem.pl | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/fhem/fhem.pl b/fhem/fhem.pl index 8b4736cf3..4bf72460d 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -526,9 +526,9 @@ if($attr{global}{logfile} ne "-" && !$attr{global}{nofork}) { # FritzBox special: Wait until the time is set via NTP, # but not more than 2 hours -if(time() < 2*3600) { +if(gettimeofday() < 2*3600) { Log 1, "date/time not set, waiting up to 2 hours to be set."; - while(time() < 2*3600) { + while(gettimeofday() < 2*3600) { sleep(5); } } @@ -550,7 +550,7 @@ if(configDBUsed()) { my $stateFile = $attr{global}{statefile}; if($stateFile) { - my @t = localtime; + my @t = localtime(gettimeofday()); $stateFile = ResolveDateWildcards($stateFile, @t); if(-r $stateFile) { $ret = CommandInclude(undef, $stateFile); @@ -595,7 +595,7 @@ if($cfgRet) { } -$fhem_started = time; +$fhem_started = int(gettimeofday()); DoTrigger("global", "INITIALIZED", 1); my $osuser = "os:$^O user:".(getlogin || getpwuid($<) || "unknown"); @@ -813,7 +813,8 @@ IsDisabled($) my $dfi = $attr{$devname}{disabledForIntervals}; if(defined($dfi)) { $dfi =~ s/{([^\x7d]*)}/$cmdFromAnalyze=$1; eval $1/ge; # Forum #69787 - my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime; + my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = + localtime(gettimeofday()); my $dhms = sprintf("%s\@%02d:%02d:%02d", $wday, $hour, $min, $sec); foreach my $ft (split(" ", $dfi)) { my ($from, $to) = split("-", $ft); @@ -1046,7 +1047,8 @@ AnalyzePerlCommand($$;$) $value{$d} = $defs{$d}{STATE} } } - my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime; + my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = + localtime(gettimeofday()); my $hms = sprintf("%02d:%02d:%02d", $hour, $min, $sec); my $we = (($wday==0 || $wday==6) ? 1 : 0); if(!$we) { @@ -1283,7 +1285,7 @@ CommandInclude($$) return "Can't open $arg: $!"; } Log 1, "Including $arg"; - my @t = localtime(); + my @t = localtime(gettimeofday()); my $gcfg = ResolveDateWildcards(AttrVal("global", "configfile", ""), @t); my $stf = ResolveDateWildcards(AttrVal("global", "statefile", ""), @t); if(!$init_done && $arg ne $stf && $arg ne $gcfg) { @@ -1489,7 +1491,8 @@ WriteStatefile() my $stateFile = AttrVal('global','statefile',undef); return "No statefile specified" if(!defined($stateFile)); - my @t = localtime; + my $now = gettimeofday(); + my @t = localtime($now); $stateFile = ResolveDateWildcards($stateFile, @t); if(!open(SFH, ">$stateFile")) { @@ -1498,7 +1501,7 @@ WriteStatefile() return $msg; } - my $t = localtime; + my $t = localtime($now); print SFH "#$t\n"; foreach my $d (sort keys %defs) { @@ -1697,7 +1700,7 @@ ReplaceSetMagic($$@) # Forum #38276 if($s && ($s eq ":t" || $s eq ":sec")) { return $all if (!$r || !$r->{$n}); $val = $r->{$n}{TIME}; - $val = time() - time_str2num($val) if($s eq ":sec"); + $val = int(gettimeofday()) - time_str2num($val) if($s eq ":sec"); return $val; } $val = $r->{$n}{VAL} if($r && $r->{$n}); @@ -2574,7 +2577,7 @@ GlobalAttr($$$$) return undef if($type ne "set"); ################ if($name eq "logfile") { - my @t = localtime; + my @t = localtime(gettimeofday()); my $ret = OpenLogfile(ResolveDateWildcards($val, @t)); if($ret) { return $ret if($init_done); @@ -3184,7 +3187,7 @@ SignalHandling() sub TimeNow() { - return FmtDateTime(time()); + return FmtDateTime(gettimeofday()); } ##################################### @@ -3633,7 +3636,7 @@ HandleArchiving($;$) } $file =~ s/%./.+/g; - my @t = localtime; + my @t = localtime(gettimeofday()); $dir = ResolveDateWildcards($dir, @t); return if(!opendir(DH, $dir)); my @files = sort grep {/^$file$/} readdir(DH); @@ -4134,7 +4137,7 @@ ReadingsAge($$$) { my ($device,$reading,$default) = @_; my $ts = ReadingsTimestamp($device,$reading,undef); - return time() - time_str2num($ts) if(defined($ts)); + return int(gettimeofday() - time_str2num($ts)) if(defined($ts)); return $default; } @@ -4928,7 +4931,7 @@ sub createUniqueId() { my $uniqueID; - srand(time) if(!$srandUsed); + srand(gettimeofday()) if(!$srandUsed); $srandUsed = 1; $uniqueID = join "",map { unpack "H*", chr(rand(256)) } 1..16; return $uniqueID; @@ -5256,7 +5259,7 @@ computeAlignTime($$@) my ($tmErr, $hr, $min, $sec, undef) = GetTimeSpec($timeSpec); return ("timeSpec: $tmErr", undef) if($alErr); - my $now = time(); + my $now = int(gettimeofday()); my $alTime = ($alHr*60+$alMin)*60+$alSec-fhemTzOffset($now); my $step = ($hr*60+$min)*60+$sec; my $ttime = ($triggertime ? int($triggertime) : $now); @@ -5333,7 +5336,7 @@ restoreDir_init() return "" if($nDirs == 0); my $rdName = "restoreDir"; - my @t = localtime; + my @t = localtime(gettimeofday()); my $restoreDir = sprintf("$rdName/%04d-%02d-%02d", $t[5]+1900, $t[4]+1, $t[3]); Log 1, "MKDIR $restoreDir" if(! -d "$root/restoreDir");