mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 16:56:54 +00:00
98_MSwitch.pm:second fix Calculation time range over date limit
git-svn-id: https://svn.fhem.de/fhem/trunk@18052 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
22da6c9d47
commit
0c8e5b9e59
@ -6560,7 +6560,7 @@ sub MSwitch_checkcondition($$$) {
|
||||
my $lastpart = $3;
|
||||
my $exec = "\$field = " . $2;
|
||||
|
||||
# MSwitch_LOG( $name, 0,"$name: secondpart -> " .$secondpart );
|
||||
#MSwitch_LOG( $name, 0,"$name: secondpart -> " .$secondpart );
|
||||
|
||||
if ( $secondpart =~ m/(!\$.*|\$.*)/ ) {
|
||||
|
||||
@ -6572,7 +6572,7 @@ sub MSwitch_checkcondition($$$) {
|
||||
}
|
||||
|
||||
#MSwitch_LOG( $name, 0,"$name: exec -> " .$exec );
|
||||
|
||||
# MSwitch_LOG( $name, 0,"$name: field -> " .$field );
|
||||
#
|
||||
|
||||
#if ($field eq "!\$we" || $field eq "\$we" )
|
||||
@ -6590,7 +6590,7 @@ sub MSwitch_checkcondition($$$) {
|
||||
last if $x > 10; #notausstieg
|
||||
}
|
||||
|
||||
#MSwitch_LOG( $name, 0,"$name: searchstring erreicht -> " .$condition );
|
||||
# MSwitch_LOG( $name, 0,"$name: searchstring erreicht -> " .$condition );
|
||||
|
||||
if ( $attrrandomnumber ne '' ) {
|
||||
MSwitch_Createnumber($hash);
|
||||
@ -6931,64 +6931,103 @@ sub MSwitch_Checkcond_time($$) {
|
||||
############ timecondition 1
|
||||
my $timecondtest;
|
||||
my $timecond1;
|
||||
|
||||
#MSwitch_LOG( $name, 0, "$name: hour1-> " . $hour1 );
|
||||
#MSwitch_LOG( $name, 0, "$name: hour2-> " . $hour2 );
|
||||
my $timecond2;
|
||||
|
||||
# MSwitch_LOG( $name, 0, "$name: hour1-> " . $hour1 );
|
||||
# MSwitch_LOG( $name, 0, "$name: hour2-> " . $hour2 );
|
||||
#MSwitch_LOG( $name, 0, "$name: akthour-> " . $akthour );
|
||||
|
||||
#my $time1;
|
||||
my ( $tday, $tmonth, $tdate, $tn ); #my ($tday,$tmonth,$tdate,$tn,$time1);
|
||||
if ( ( $akthour < $hour1 && $akthour <= $hour2 ) && $hour2 < $hour1 ) # und
|
||||
{
|
||||
use constant SECONDS_PER_DAY => 60 * 60 * 24;
|
||||
$timecondtest = localtime( time - SECONDS_PER_DAY );
|
||||
|
||||
|
||||
$timecondtest = localtime;
|
||||
$timecondtest =~ s/\s+/ /g;
|
||||
( $tday, $tmonth, $tdate, $tn, $time1 ) = split( / /, $timecondtest );
|
||||
$timecond1 = timelocal( '00', $min1, $hour1, $tdate, $tmonth, $time1 );
|
||||
$adday = 1;
|
||||
}
|
||||
else {
|
||||
$timecondtest = localtime;
|
||||
$timecondtest =~ s/\s+/ /g;
|
||||
( $tday, $tmonth, $tdate, $tn, $time1 ) = split( / /, $timecondtest );
|
||||
$timecond1 = timelocal( '00', $min1, $hour1, $tdate, $tmonth, $time1 );
|
||||
}
|
||||
|
||||
$timecond2 = timelocal( '00', $min2, $hour2, $tdate, $tmonth, $time1 );
|
||||
my $timeaktuell =timelocal( '00', $aktmin, $akthour, $date, $month, $time1 );
|
||||
|
||||
#MSwitch_LOG( $name, 0, "$name: timecond1-> " . $timecond1 );
|
||||
#MSwitch_LOG( $name, 0, "$name: timecond2-> " . $timecond2 );
|
||||
#MSwitch_LOG( $name, 0, "$name: timeaktuell-> " . $timeaktuell );
|
||||
|
||||
### new
|
||||
if ( $timeaktuell < $timecond2 && $timecond2 < $timecond1 )
|
||||
{
|
||||
use constant SECONDS_PER_DAY => 60 * 60 * 24;
|
||||
$timecond1 = $timecond1 - SECONDS_PER_DAY;
|
||||
$adday = 1
|
||||
}
|
||||
|
||||
|
||||
######## old
|
||||
# if ( ( $akthour < $hour1 && $akthour <= $hour2 ) && $hour2 < $hour1 ) # und
|
||||
# {
|
||||
# use constant SECONDS_PER_DAY => 60 * 60 * 24;
|
||||
# $timecondtest = localtime( time - SECONDS_PER_DAY );
|
||||
# $timecondtest =~ s/\s+/ /g;
|
||||
# ( $tday, $tmonth, $tdate, $tn, $time1 ) = split( / /, $timecondtest );
|
||||
# $timecond1 = timelocal( '00', $min1, $hour1, $tdate, $tmonth, $time1 );
|
||||
# $adday = 1;
|
||||
# }
|
||||
# else {
|
||||
# $timecondtest = localtime;
|
||||
# $timecondtest =~ s/\s+/ /g;
|
||||
# ( $tday, $tmonth, $tdate, $tn, $time1 ) = split( / /, $timecondtest );
|
||||
# $timecond1 = timelocal( '00', $min1, $hour1, $tdate, $tmonth, $time1 );
|
||||
|
||||
# }
|
||||
##################
|
||||
|
||||
|
||||
############# timecondition 2
|
||||
my $timecond2;
|
||||
$timecondtest = localtime;
|
||||
if ( $hour2 < $hour1 ) {
|
||||
if ( $akthour < $hour1 && $akthour < $hour2 ) {
|
||||
$timecondtest = localtime;
|
||||
$timecondtest =~ s/\s+/ /g;
|
||||
( $tday, $tmonth, $tdate, $tn, $time1 ) =
|
||||
split( / /, $timecondtest );
|
||||
$timecond2 =
|
||||
timelocal( '00', $min2, $hour2, $tdate, $tmonth, $time1 );
|
||||
}
|
||||
else {
|
||||
use constant SECONDS_PER_DAY => 60 * 60 * 24;
|
||||
$timecondtest = localtime( time + SECONDS_PER_DAY );
|
||||
$timecondtest =~ s/\s+/ /g;
|
||||
my ( $tday, $tmonth, $tdate, $tn, $time1 ) =
|
||||
split( / /, $timecondtest );
|
||||
$timecond2 =
|
||||
timelocal( '00', $min2, $hour2, $tdate, $tmonth, $time1 );
|
||||
$adday = 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$timecondtest = localtime;
|
||||
$timecondtest =~ s/\s+/ /g;
|
||||
( $tday, $tmonth, $tdate, $tn, $time1 ) = split( / /, $timecondtest );
|
||||
$timecond2 = timelocal( '00', $min2, $hour2, $tdate, $tmonth, $time1 );
|
||||
}
|
||||
my $timeaktuell =
|
||||
timelocal( '00', $aktmin, $akthour, $date, $month, $time1 );
|
||||
# my $timecond2;
|
||||
# $timecondtest = localtime;
|
||||
# if ( $hour2 < $hour1 ) {
|
||||
# if ( $akthour < $hour1 && $akthour < $hour2 ) {
|
||||
# $timecondtest = localtime;
|
||||
# $timecondtest =~ s/\s+/ /g;
|
||||
# ( $tday, $tmonth, $tdate, $tn, $time1 ) =
|
||||
# split( / /, $timecondtest );
|
||||
# $timecond2 =
|
||||
# timelocal( '00', $min2, $hour2, $tdate, $tmonth, $time1 );
|
||||
# }
|
||||
# else {
|
||||
# use constant SECONDS_PER_DAY => 60 * 60 * 24;
|
||||
# $timecondtest = localtime( time + SECONDS_PER_DAY );
|
||||
# $timecondtest =~ s/\s+/ /g;
|
||||
# my ( $tday, $tmonth, $tdate, $tn, $time1 ) =
|
||||
# split( / /, $timecondtest );
|
||||
# $timecond2 =
|
||||
# timelocal( '00', $min2, $hour2, $tdate, $tmonth, $time1 );
|
||||
# $adday = 1;
|
||||
# }
|
||||
# }
|
||||
# else {
|
||||
# $timecondtest = localtime;
|
||||
# $timecondtest =~ s/\s+/ /g;
|
||||
# ( $tday, $tmonth, $tdate, $tn, $time1 ) = split( / /, $timecondtest );
|
||||
# $timecond2 = timelocal( '00', $min2, $hour2, $tdate, $tmonth, $time1 );
|
||||
# }
|
||||
|
||||
|
||||
|
||||
# my $timeaktuell =
|
||||
# timelocal( '00', $aktmin, $akthour, $date, $month, $time1 );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
my $return = "($timecond1 < $timeaktuell && $timeaktuell < $timecond2)";
|
||||
if ( $days ne '' ) {
|
||||
$daycondition = MSwitch_Checkcond_day( $days, $name, $adday, $day );
|
||||
$return = "($return $daycondition)";
|
||||
}
|
||||
|
||||
#MSwitch_LOG( $name, 0, "$name: return-> " . $return);
|
||||
|
||||
return $return;
|
||||
}
|
||||
####################
|
||||
|
Loading…
x
Reference in New Issue
Block a user