2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 03:06:37 +00:00

98_WeekdayTimer: fix sunday handling in some cases

git-svn-id: https://svn.fhem.de/fhem/trunk@27423 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Beta-User 2023-04-10 18:47:49 +00:00
parent 4b7f6fa025
commit f0831ef7d1
2 changed files with 18 additions and 13 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- bugfix: 98_WeekdayTimer: sunday handling in special cases
- bugfix: 74_AMADDevice: much more bugfixes - bugfix: 74_AMADDevice: much more bugfixes
- change: Update Synology lib modules - change: Update Synology lib modules
- bugfix: 72_FRITZBOX: Fehlerkorrekturen: u.a. Verhalten bei disable - bugfix: 72_FRITZBOX: Fehlerkorrekturen: u.a. Verhalten bei disable

View File

@ -331,29 +331,28 @@ sub _Profile {
my $idx = 0; my $idx = 0;
for my $st ( @{$hash->{SWITCHINGTIMES}} ) { for my $st ( @{$hash->{SWITCHINGTIMES}} ) {
my ($tage,$time,$parameter,$overrulewday) = _SwitchingTime ($hash, $st); my ($tage,$time,$parameter,$overrulewday) = _SwitchingTime ($hash, $st);
$idx++; $idx++;
for my $d (@{$tage}) { for my $d (@{$tage}) {
my @listeDerTage = ($d); my @listeDerTage = ($d);
push (@listeDerTage, _getDaysList($hash, $d, $time)) if ($d>=7); push (@listeDerTage, _getDaysList($hash, $d, $time)) if ($d>=7);
for my $day (@listeDerTage) { for my $day (@listeDerTage) {
my $dayOfEchteZeit = $day; my $dayOfEchteZeit = $day;
#####
if ($day < 7) { if ($day < 7) {
my $relativeDay = ($day - $wday ) % 7; my $relativeDay = ($day - $wday ) % 7;
#my $relativeDay = $day - $wday; $dayOfEchteZeit = undef if $hash->{helper}{WEDAYS}{$relativeDay} && defined $overrulewday && $overrulewday !~ m{$day}x;
#$relativeDay = $relativeDay + 7 if $relativeDay < 0 ; } elsif ($day==7) {
$dayOfEchteZeit = undef if ($hash->{helper}{WEDAYS}{$relativeDay} && $overrulewday); $dayOfEchteZeit = ($wday>=1&&$wday<=5) ? 6 : $wday; # ggf. Samstag
} elsif ($day==8) {
$dayOfEchteZeit = ($wday==0||$wday==6) ? 1 : $wday; # ggf. Montag
} }
$dayOfEchteZeit = ($wday>=1&&$wday<=5) ? 6 : $wday if ($day==7); # ggf. Samstag $wday ~~ [1..5]
$dayOfEchteZeit = ($wday==0||$wday==6) ? 1 : $wday if ($day==8); # ggf. Montag $wday ~~ [0, 6]
if (defined $dayOfEchteZeit) { if (defined $dayOfEchteZeit) {
my $echtZeit = _getHHMMSS($hash, $dayOfEchteZeit, $time); my $echtZeit = _getHHMMSS($hash, $dayOfEchteZeit, $time);
$hash->{profile} {$day}{$echtZeit} = $parameter; $hash->{profile} {$day}{$echtZeit} = $parameter;
$hash->{profile_IDX}{$day}{$echtZeit} = $idx; $hash->{profile_IDX}{$day}{$echtZeit} = $idx;
} }
}; }
} }
} }
# ---- Zeitpunkte des aktuellen Tages mit EPOCH ermitteln -------------- # ---- Zeitpunkte des aktuellen Tages mit EPOCH ermitteln --------------
@ -427,17 +426,22 @@ sub _SwitchingTime {
my ($daylist, $time, $timeString, $para); my ($daylist, $time, $timeString, $para);
my @st = split m{\|}xms, $switchingtime; my @st = split m{\|}xms, $switchingtime;
my $overrulewday = 0; my $overrulewday;
if ( @st == 2 || @st == 3 && $st[2] eq 'w') { if ( @st == 2 || @st == 3 && $st[2] eq 'w') {
$daylist = ($globalDaylistSpec ne '') ? $globalDaylistSpec : '0123456'; $daylist = ($globalDaylistSpec ne '') ? $globalDaylistSpec : '0123456';
$time = $st[0]; $time = $st[0];
$para = $st[1]; $para = $st[1];
$overrulewday = 1 if defined $st[2] && $st[2] eq 'w'; $overrulewday = 'w' if defined $st[2] && $st[2] eq 'w';
} elsif ( @st == 3 || @st == 4) { } elsif ( @st == 3 || @st == 4) {
$daylist = $st[0]; $daylist = $st[0];
$time = $st[1]; $time = $st[1];
$para = $st[2]; $para = $st[2];
$overrulewday = 1 if defined $st[3] && $st[3] eq 'w' || $st[0] == 8; if ( defined $st[3] && $st[3] eq 'w' ) {
$overrulewday = 'w';
} elsif ($st[0] =~ m{8}x ) {
$overrulewday = $daylist;
$overrulewday =~ s{8}{}x;# was: $st[0] == 8; might be: $st[0] eq '8'?!?
}
} }
my @tage = @{_daylistAsArray($hash, $daylist)}; my @tage = @{_daylistAsArray($hash, $daylist)};
@ -529,7 +533,7 @@ sub _getHHMMSS {
# Zeitangabe verarbeiten. # Zeitangabe verarbeiten.
$time = qq{"$time"} if $time !~ m{\A\{.*\}\z}xms; $time = qq{"$time"} if $time !~ m{\A\{.*\}\z}xms;
my $date = $now+($d-$wday)*DAYSECONDS; my $date = $now+abs($d-$wday)*DAYSECONDS;
my $timeString = '{ my $date='."$date;" .$time."}"; my $timeString = '{ my $date='."$date;" .$time."}";
my $eTimeString = AnalyzePerlCommand( $hash, $timeString ); # must deliver HH:MM[:SS] my $eTimeString = AnalyzePerlCommand( $hash, $timeString ); # must deliver HH:MM[:SS]