From 4c74ebb96a04b84f6e7a90fb6987edb47c9ee539 Mon Sep 17 00:00:00 2001 From: borisneubert Date: Sat, 28 Aug 2021 16:40:02 +0000 Subject: [PATCH] 11_OWDevice: bugfix for new attribute disable (forum #122563) git-svn-id: https://svn.fhem.de/fhem/trunk@24882 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/CHANGED | 1 + fhem/FHEM/11_OWDevice.pm | 38 +++++++++++++++----------------------- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/fhem/CHANGED b/fhem/CHANGED index 8168927a9..1b675ba65 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # 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. + - bugfix: 11_OWDevice: bugfix for new attribute disable (forum #122563) - feature: 57_Calendar: new attribute timeout - change: 10_KNX: major rewrite of the module. pls. check forum https://forum.fhem.de/index.php/topic,122582.0.html diff --git a/fhem/FHEM/11_OWDevice.pm b/fhem/FHEM/11_OWDevice.pm index 05eb71b31..2e13f8de9 100644 --- a/fhem/FHEM/11_OWDevice.pm +++ b/fhem/FHEM/11_OWDevice.pm @@ -378,8 +378,8 @@ OWDevice_Initialize($) $hash->{GetFn} = "OWDevice_Get"; $hash->{SetFn} = "OWDevice_Set"; $hash->{DefFn} = "OWDevice_Define"; - $hash->{NotifyFn} = "OWDevice_Notify"; - $hash->{NotifyOrderPrefix}= "50b-"; + #$hash->{NotifyFn} = "OWDevice_Notify"; + #$hash->{NotifyOrderPrefix}= "50b-"; $hash->{UndefFn} = "OWDevice_Undef"; $hash->{AttrFn} = "OWDevice_Attr"; @@ -580,13 +580,13 @@ OWDevice_Attr($@) delete $hash->{fhem}{interfaces} if(defined($hash->{fhem}{interfaces})); Log3 $name, 5, "$name: no interfaces"; } - } - elsif($attrName eq "disable" && ($cmd eq 'del' || $attrVal == 0)) { # restart after disable - RemoveInternalTimer($hash); - InternalTimer(int(gettimeofday()) + $hash->{fhem}{interval}, "OWDevice_UpdateValues", $hash, 0) - if(defined($hash->{fhem}{interval})); - } -} + } elsif($attrName eq "disable" && ($cmd eq 'del' || !$attrVal)) { # restart after disable + $init_done ? RemoveInternalTimer($hash) + : RemoveInternalTimer("OWDevice_UpdateValues");# just to be sure...; + InternalTimer(int(gettimeofday()) + $hash->{fhem}{interval}, "OWDevice_UpdateValues", $hash, 0) + if defined $hash->{fhem}{interval}; + } +} ################################### sub @@ -702,28 +702,19 @@ OWDevice_Define($$) $hash->{fhem}{alerting}= $alerting; Log3 $name, 5, "$name: alerting: $alerting"; - $hash->{NOTIFYDEV} = "global"; - - if( $init_done ) { - OWDevice_InitValues($hash); - OWDevice_UpdateValues($hash) if(defined($hash->{fhem}{interval})); - } - + InternalTimer(int(gettimeofday())+ 12, 'OWDevice_Start', $hash, 0); # wait for fhem ready return undef; } sub -OWDevice_Notify($$) +OWDevice_Start($$) { my ($hash,$dev) = @_; my $name = $hash->{NAME}; my $type = $hash->{TYPE}; - return if($dev->{NAME} ne "global"); - return if(!grep(m/^INITIALIZED|REREADCFG$/, @{$dev->{CHANGED}})); - - return if($attr{$name} && $attr{$name}{disable} == 1); - + return if IsDisabled( $name ); + OWDevice_InitValues($hash); RemoveInternalTimer($hash); # http://forum.fhem.de/index.php/topic,16945.0/topicseen.html#msg110673 @@ -731,8 +722,9 @@ OWDevice_Notify($$) Log3 $name, 5, "$name: initial delay: $delay"; InternalTimer(int(gettimeofday())+$delay, "OWDevice_UpdateValues", $hash, 0) if(defined($hash->{fhem}{interval})); - return undef; + return; } + sub OWDevice_InitValues($) {