diff --git a/FHEM/10_RESIDENTS.pm b/FHEM/10_RESIDENTS.pm index fd643af29..c1b0b6a77 100644 --- a/FHEM/10_RESIDENTS.pm +++ b/FHEM/10_RESIDENTS.pm @@ -60,6 +60,8 @@ sub RESIDENTS_Define($$) { Log3 $name, 5, "RESIDENTS $name: called function RESIDENTS_Define()"; + RESIDENTStk_findResidentSlaves($hash); + # set default settings on first define if ( $init_done && !defined( $hash->{OLDDEF} ) ) { $attr{$name}{alias} = "Residents"; @@ -129,8 +131,6 @@ sub RESIDENTS_Notify($$) { && defined( $defs{$devName}{TYPE} ) && $defs{$devName}{TYPE} =~ /^(ROOMMATE|GUEST|DUMMY)$/ ); - RESIDENTStk_findResidentSlaves($hash); - my @registeredRoommates = split( /,/, $hash->{ROOMMATES} ) if ( defined( $hash->{ROOMMATES} ) @@ -268,15 +268,13 @@ sub RESIDENTS_Set($@) { my ( $hash, @a ) = @_; my $name = $hash->{NAME}; my $state = ReadingsVal( $name, "state", "initialized" ); + my $roommates = ( $hash->{ROOMMATES} ? $hash->{ROOMMATES} : "" ); + my $guests = ( $hash->{GUESTS} ? $hash->{GUESTS} : "" ); Log3 $name, 5, "RESIDENTS $name: called function RESIDENTS_Set()"; return "No Argument given" if ( !defined( $a[1] ) ); - RESIDENTStk_findResidentSlaves($hash); - my $roommates = ( $hash->{ROOMMATES} ? $hash->{ROOMMATES} : "" ); - my $guests = ( $hash->{GUESTS} ? $hash->{GUESTS} : "" ); - # depending on current FHEMWEB instance's allowedCommands, # restrict set commands if there is "set-user" in it my $adminMode = 1; diff --git a/FHEM/20_GUEST.pm b/FHEM/20_GUEST.pm index b99842021..d1cc6ee68 100644 --- a/FHEM/20_GUEST.pm +++ b/FHEM/20_GUEST.pm @@ -131,7 +131,9 @@ sub GUEST_Undefine($$) { RESIDENTStk_RemoveInternalTimer( "DurationTimer", $hash ); if ( defined( $hash->{RESIDENTGROUPS} ) ) { - foreach ( split( /,/, $hash->{RESIDENTGROUPS} ) ) { + my $old = $hash->{RESIDENTGROUPS}; + delete $hash->{RESIDENTGROUPS}; + foreach ( split( /,/, $old ) ) { RESIDENTStk_findResidentSlaves( $defs{$_} ) if ( defined( $defs{$_} ) ); } diff --git a/FHEM/20_ROOMMATE.pm b/FHEM/20_ROOMMATE.pm index ce59266d3..599c5d3d8 100644 --- a/FHEM/20_ROOMMATE.pm +++ b/FHEM/20_ROOMMATE.pm @@ -136,7 +136,9 @@ sub ROOMMATE_Undefine($$) { RESIDENTStk_RemoveInternalTimer( "DurationTimer", $hash ); if ( defined( $hash->{RESIDENTGROUPS} ) ) { - foreach ( split( /,/, $hash->{RESIDENTGROUPS} ) ) { + my $old = $hash->{RESIDENTGROUPS}; + delete $hash->{RESIDENTGROUPS}; + foreach ( split( /,/, $old ) ) { RESIDENTStk_findResidentSlaves( $defs{$_} ) if ( defined( $defs{$_} ) ); }