2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-16 23:06:05 +00:00

98_WeekdayTimer: 'state' inactive if disabled (#133492) + another try to fix holiday bug

git-svn-id: https://svn.fhem.de/fhem/trunk@27586 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
Beta-User 2023-05-17 13:43:31 +00:00
parent c87a771b34
commit 80ca7208ea

View File

@ -1,4 +1,4 @@
# $Id$ # $Id$we Beta-User $
############################################################################# #############################################################################
# #
# 98_WeekdayTimer.pm # 98_WeekdayTimer.pm
@ -1068,7 +1068,7 @@ sub checkIfDeviceIsHeatingType {
my $allSets = getAllSets($dName); my $allSets = getAllSets($dName);
for my $ts (@tempSet) { for my $ts (@tempSet) {
if ($allSets =~ m{$ts}xms) { if ($allSets =~ m{$ts}xms) {
Log3( $hash, 4, "[$name] device type heating recognized, setModifier:$ts" ); Log3( $hash, 4, "[$name] device type heating recognized, setModifier:$ts" );
$hash->{setModifier} = $ts; $hash->{setModifier} = $ts;
return $ts return $ts
@ -1297,7 +1297,7 @@ sub checkDaysCondition {
################################################################################ ################################################################################
sub getDaysAsHash { sub getDaysAsHash {
my $hash = shift; my $hash = shift;
my $tage = shift //return {}; my $tage = shift // return {};
my %days = map {$_ => 1} @{$tage}; my %days = map {$_ => 1} @{$tage};
delete @days{7,8}; delete @days{7,8};
@ -1308,7 +1308,7 @@ sub getDaysAsHash {
################################################################################ ################################################################################
sub getDaysAsCondition { sub getDaysAsCondition {
my $tage = shift; my $tage = shift;
my $overrulewday = shift // 0; my $overrulewday = shift;
my %days = map {$_ => 1} @{$tage}; my %days = map {$_ => 1} @{$tage};
@ -1316,7 +1316,7 @@ sub getDaysAsCondition {
my $notWe = $days{8}; delete $days{8}; #!$we my $notWe = $days{8}; delete $days{8}; #!$we
my $tageExp = 'defined $days->{$wday}'; my $tageExp = 'defined $days->{$wday}';
$tageExp .= ' && !$we' if $overrulewday; $tageExp .= ' && !$we' if defined $overrulewday;
$tageExp .= ' || $we' if defined $we; $tageExp .= ' || $we' if defined $we;
$tageExp .= ' || !$we' if defined $notWe; $tageExp .= ' || !$we' if defined $notWe;
return $tageExp; return $tageExp;
@ -1327,11 +1327,11 @@ sub Attr {
my ($cmd, $name, $attrName, $attrVal) = @_; my ($cmd, $name, $attrName, $attrVal) = @_;
$attrVal = 0 if !defined $attrVal; $attrVal = 0 if !defined $attrVal;
my $hash = $defs{$name}; my $hash = $defs{$name} // return 'error: device not defined!';
if ( $attrName eq 'WDT_eventMap' ) { if ( $attrName eq 'WDT_eventMap' ) {
if($cmd eq 'set') { if($cmd eq 'set') {
my @ret = split m{[: \r\n]}x, $attrVal; my @ret = split m{[: \r\n]}x, $attrVal;
return "WDT_eventMap: Odd number of elements" if int(@ret) % 2; return 'WDT_eventMap: Odd number of elements' if int(@ret) % 2;
my %ret = @ret; my %ret = @ret;
for (keys %ret) { for (keys %ret) {
$ret{$_} =~ s{\+}{ }gxms; $ret{$_} =~ s{\+}{ }gxms;
@ -1341,22 +1341,22 @@ sub Attr {
delete $hash->{WDT_EVENTMAP}; delete $hash->{WDT_EVENTMAP};
} }
$attr{$name}{$attrName} = $attrVal; $attr{$name}{$attrName} = $attrVal;
return if (!$init_done); return if !$init_done;
return WDT_Start($hash); return WDT_Start($hash);
} }
return if !$init_done; return if !$init_done;
if( $attrName eq 'disable' ) { if( $attrName eq 'disable' ) {
_DeleteTimer($hash); _DeleteTimer($hash);
###RemoveInternalTimer($fnHash);
readingsSingleUpdate ($hash, 'disabled', $attrVal, 1); readingsSingleUpdate ($hash, 'disabled', $attrVal, 1);
$attr{$name}{$attrName} = $attrVal; $attr{$name}{$attrName} = $attrVal;
return RemoveInternalTimer($hash,\&WDT_SetTimerOfDay) if $attrVal; if ( $attrVal ) {
readingsSingleUpdate ($hash, 'state', 'inactive', 1);
return RemoveInternalTimer($hash,\&WDT_SetTimerOfDay);
}
return WDT_Start($hash); return WDT_Start($hash);
#return WDT_SetTimerOfDay( { HASH => $hash} ) if !$attrVal;
} }
if ( $attrName eq 'weekprofile' ) { if ( $attrName eq 'weekprofile' ) {
$attr{$name}{$attrName} = $attrVal; $attr{$name}{$attrName} = $attrVal;
#return WDT_Start($hash);
} }
if ( $attrName eq 'switchInThePast' ) { if ( $attrName eq 'switchInThePast' ) {
$attr{$name}{$attrName} = $attrVal; $attr{$name}{$attrName} = $attrVal;
@ -1385,7 +1385,6 @@ sub Attr {
return; return;
} }
################################################################################ ################################################################################
sub WeekdayTimer_SetParm { sub WeekdayTimer_SetParm {
my $name = shift // return; my $name = shift // return;