From d1ebfbbb818166c5cd8777fc8c343121bb79f0b6 Mon Sep 17 00:00:00 2001 From: justme-1968 Date: Tue, 14 Jan 2020 18:24:08 +0000 Subject: [PATCH] HUE: move device to new bridge if uniqueid stays the same git-svn-id: https://svn.fhem.de/fhem/trunk@20979 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/30_HUEBridge.pm | 25 ++++++++++++++++++++++++- fhem/FHEM/31_HUEDevice.pm | 7 +++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/fhem/FHEM/30_HUEBridge.pm b/fhem/FHEM/30_HUEBridge.pm index a3a5bf01f..14e4ad2e8 100644 --- a/fhem/FHEM/30_HUEBridge.pm +++ b/fhem/FHEM/30_HUEBridge.pm @@ -1908,7 +1908,30 @@ HUEBridge_dispatch($$$;$) $changed .= $chash->{ID}; } } else { - Log3 $name, 2, "$name: message for unknown device received: $code"; + my $found; + if( my $serial = $lights->{$id}{uniqueid} ) { + foreach my $chash ( values %{$modules{HUEDevice}{defptr}} ) { + next if( !$chash->{uniqueid} ); + next if( $chash->{helper}{devtype} ); + next if( $serial ne $chash->{uniqueid} ); + + my $cname = $chash->{NAME}; + my $old = AttrVal( $cname, 'IODev', '' ); + + Log3 $name, 2, "moving $cname [$serial] from $old to $name"; + + HUEDevice_IODevChanged($chash, undef, $name, $id); + + HUEDevice_Parse($chash, $lights->{$id}); + + $found = 1; + last; + } + } + + if( !$found ) { + Log3 $name, 3, "$name: message for unknown device received: $code"; + } } } HUEBridge_updateGroups($hash, $changed) if( $changed ); diff --git a/fhem/FHEM/31_HUEDevice.pm b/fhem/FHEM/31_HUEDevice.pm index dfd54ffcd..0e3c33e15 100644 --- a/fhem/FHEM/31_HUEDevice.pm +++ b/fhem/FHEM/31_HUEDevice.pm @@ -280,6 +280,10 @@ HUEDevice_IODevChanged($$$;$) Log3 $name, 1, "$name: can't change IODev for TYPE $hash->{TYPE}"; return undef; } + if( $new_id && $hash->{helper}->{devtype} ) { + Log3 $name, 1, "$name: can't change IODev for groups and sensors"; + return undef; + } $old = AttrVal($name, "IODev", undef) if( !$old ); @@ -311,6 +315,9 @@ HUEDevice_IODevChanged($$$;$) } elsif( $new ) { $hash->{DEF} .= " IODev=$new" } + + $hash->{DEF} =~ s/[^\s]+/$new_id/ if( $new_id ); + $hash->{DEF} =~ s/ / /g; return $new;