From da2019a2ba21df6b8e2419b64a02c9897235f3d7 Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Tue, 14 Oct 2014 18:24:29 +0000 Subject: [PATCH] 99_SUNRISE_EL.pm: Patch from Dietmar63 (Forum #27471) git-svn-id: https://svn.fhem.de/fhem/trunk@6765 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/99_SUNRISE_EL.pm | 39 +++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/fhem/FHEM/99_SUNRISE_EL.pm b/fhem/FHEM/99_SUNRISE_EL.pm index 144b357b0..5dc7f2f1f 100755 --- a/fhem/FHEM/99_SUNRISE_EL.pm +++ b/fhem/FHEM/99_SUNRISE_EL.pm @@ -48,16 +48,17 @@ sub sr($$$$$$) { my ($rise, $seconds, $isrel, $daycheck, $min, $max) = @_; - sr_alt(time(), $rise, $isrel, $daycheck, $defaultaltit, $seconds, $min, $max); + sr_alt(time(), $rise, $isrel, $daycheck, 1, $defaultaltit,$seconds,$min,$max); } sub -sr_alt($$$$$$$$) +sr_alt($$$$$$$$$) { my $nt=shift; my $rise=shift; my $isrel=shift; my $daycheck=shift; + my $nextDay=shift; my $altit = defined($_[0]) ? $_[0] : ""; if(exists $alti{uc($altit)}) { $altit=$alti{uc($altit)}; @@ -99,8 +100,8 @@ sr_alt($$$$$$$$) $sst = hms2h($max) if(defined($max) && (hms2h($max) < $sst)); my $diff = 0; - if($data{AT_RECOMPUTE} || # compute it for tommorow - int(($nh-$sst)*3600) >= 0) { # if called a subsec earlier + if (($data{AT_RECOMPUTE} || # compute it for tommorow + int(($nh-$sst)*3600) >= 0) && $nextDay) { # if called a subsec earlier $nt += 86400; @lt = localtime($nt); my $ngmtoff = _calctz($nt,@lt); # in hour @@ -359,18 +360,30 @@ h2hms_fmt($) return sprintf("%02d:%02d:%02d", $h, $m, $s); } +sub +sr_noon($) +{ + my ($date) = @_; + my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($date); + return $date - $hour*3600 - $min*60 - $sec + 12*3600; +} + sub sunrise_coord($$$) { ($long, $lat, $tz) = @_; return undef; } -sub sunrise_rel (@) { return sr_alt(time(), 1, 1, 0, shift, shift, shift, shift) } -sub sunset_rel (@) { return sr_alt(time(), 0, 1, 0, shift, shift, shift, shift) } -sub sunrise_abs (@) { return sr_alt(time(), 1, 0, 0, shift, shift, shift, shift) } -sub sunset_abs (@) { return sr_alt(time(), 0, 0, 0, shift, shift, shift, shift) } -sub sunrise (@) { return sr_alt(time(), 1, 2, 0, shift, shift, shift, shift) } -sub sunset (@) { return sr_alt(time(), 0, 2, 0, shift, shift, shift, shift) } -sub isday (@) { return sr_alt(time(), 1, 0, 1, shift, 0, undef, undef) } +sub sunrise_rel(@) { return sr_alt(time(),1,1,0,1,shift,shift,shift,shift); } +sub sunset_rel (@) { return sr_alt(time(),0,1,0,1,shift,shift,shift,shift); } +sub sunrise_abs(@) { return sr_alt(time(),1,0,0,1,shift,shift,shift,shift); } +sub sunset_abs (@) { return sr_alt(time(),0,0,0,1,shift,shift,shift,shift); } +sub sunrise (@) { return sr_alt(time(),1,2,0,1,shift,shift,shift,shift); } +sub sunset (@) { return sr_alt(time(),0,2,0,1,shift,shift,shift,shift); } +sub isday (@) { return sr_alt(time(),1,0,1,1,shift, 0,undef,undef); } -sub sunrise_abs_dat(@) { return sr_alt(shift, 1, 0, 0, shift, shift, shift, shift) } -sub sunset_abs_dat (@) { return sr_alt(shift, 0, 0, 0, shift, shift, shift, shift) } +sub sunrise_abs_dat(@) { + return sr_alt(sr_noon(shift),1,0,0,0,shift,shift,shift,shift); +} +sub sunset_abs_dat (@) { + return sr_alt(sr_noon(shift),0,0,0,0,shift,shift,shift,shift); +} 1;