mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-09 01:34:19 +00:00
HUE: try to move also for websocket events autosave after move
git-svn-id: https://svn.fhem.de/fhem/trunk@20980 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
d1ebfbbb81
commit
28eb11e89d
@ -96,23 +96,28 @@ HUEBridge_Read($)
|
||||
Log3 $name, 5, "$name: websocket data: ". Dumper $obj;
|
||||
} else {
|
||||
Log3 $name, 2, "$name: unhandled websocket text $data";
|
||||
}
|
||||
|
||||
my $code;
|
||||
my $id = $obj->{id};
|
||||
$code = $name ."-". $id if( $obj->{r} eq 'lights' );
|
||||
$code = $name ."-S". $id if( $obj->{r} eq 'sensors' );
|
||||
$code = $name ."-G". $id if( $obj->{r} eq 'groups' );
|
||||
if( !$code ) {
|
||||
Log3 $name, 5, "$name: ignoring event: $code";
|
||||
return;
|
||||
}
|
||||
|
||||
if( $obj->{t} eq 'event' && $obj->{e} eq 'changed' ) {
|
||||
my $code;
|
||||
my $id = $obj->{id};
|
||||
$code = $name ."-". $id if( $obj->{r} eq 'lights' );
|
||||
$code = $name ."-S". $id if( $obj->{r} eq 'sensors' );
|
||||
$code = $name ."-G". $id if( $obj->{r} eq 'groups' );
|
||||
if( !$code ) {
|
||||
Log3 $name, 5, "$name: ignoring event: $code";
|
||||
return;
|
||||
}
|
||||
|
||||
if( my $chash = $modules{HUEDevice}{defptr}{$code} ) {
|
||||
HUEDevice_Parse($chash, $obj);
|
||||
HUEBridge_updateGroups($hash, $chash->{ID}) if( !$chash->{helper}{devtype} );
|
||||
|
||||
} elsif( HUEDevice_moveToBridge( $obj->{uniqueid}, $name, $obj->{id} ) ) {
|
||||
if( my $chash = $modules{HUEDevice}{defptr}{$code} ) {
|
||||
HUEDevice_Parse($chash, $obj);
|
||||
}
|
||||
|
||||
} else {
|
||||
Log3 $name, 4, "$name: message for unknown device received: $code";
|
||||
}
|
||||
@ -123,7 +128,13 @@ HUEBridge_Read($)
|
||||
|
||||
} elsif( $obj->{t} eq 'event' && $obj->{e} eq 'added' ) {
|
||||
Log3 $name, 5, "$name: websocket add: $data";
|
||||
HUEBridge_Autocreate($hash);
|
||||
if( !HUEDevice_moveToBridge( $obj->{uniqueid}, $name, $obj->{id} ) ) {
|
||||
HUEBridge_Autocreate($hash);
|
||||
}
|
||||
|
||||
if( my $chash = $modules{HUEDevice}{defptr}{$code} ) {
|
||||
HUEDevice_Parse($chash, $obj);
|
||||
}
|
||||
|
||||
} elsif( $obj->{t} eq 'event' && $obj->{e} eq 'deleted' ) {
|
||||
Log3 $name, 5, "$name: todo: handle websocket delete $data";
|
||||
@ -1907,31 +1918,13 @@ HUEBridge_dispatch($$$;$)
|
||||
$changed .= "," if( $changed );
|
||||
$changed .= $chash->{ID};
|
||||
}
|
||||
|
||||
} elsif( HUEDevice_moveToBridge( $lights->{$id}{uniqueid}, $name, $id ) ) {
|
||||
HUEDevice_Parse($hash, $lights->{$id});
|
||||
|
||||
} else {
|
||||
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} );
|
||||
Log3 $name, 3, "$name: message for unknown device received: $code";
|
||||
|
||||
my $cname = $chash->{NAME};
|
||||
my $old = AttrVal( $cname, 'IODev', '<unknown>' );
|
||||
|
||||
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 );
|
||||
|
@ -323,8 +323,37 @@ HUEDevice_IODevChanged($$$;$)
|
||||
return $new;
|
||||
}
|
||||
|
||||
sub HUEDevice_Define($$)
|
||||
{
|
||||
sub
|
||||
HUEDevice_moveToBridge($$$) {
|
||||
my ($serial, $new, $new_id) = @_;
|
||||
|
||||
my $found;
|
||||
|
||||
return $found if( !$serial );
|
||||
return $found if( !$new_id );
|
||||
|
||||
foreach my $hash ( values %{$modules{HUEDevice}{defptr}} ) {
|
||||
next if( !$hash->{uniqueid} );
|
||||
next if( $hash->{helper}{devtype} );
|
||||
next if( $serial ne $hash->{uniqueid} );
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
my $old = AttrVal( $name, 'IODev', '<unknown>' );
|
||||
|
||||
Log3 $name, 2, "moving $name [$serial] from $old to $new";
|
||||
|
||||
HUEDevice_IODevChanged($hash, undef, $new, $new_id);
|
||||
CommandSave(undef,undef) if( AttrVal( "autocreate", "autosave", 1 ) );
|
||||
|
||||
$found = 1;
|
||||
last;
|
||||
}
|
||||
|
||||
return $found;
|
||||
}
|
||||
|
||||
sub
|
||||
HUEDevice_Define($$) {
|
||||
my ($hash, $def) = @_;
|
||||
|
||||
return $@ unless ( FHEM::Meta::SetInternals($hash) );
|
||||
|
Loading…
x
Reference in New Issue
Block a user