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:
@@ -96,23 +96,28 @@ HUEBridge_Read($)
|
|||||||
Log3 $name, 5, "$name: websocket data: ". Dumper $obj;
|
Log3 $name, 5, "$name: websocket data: ". Dumper $obj;
|
||||||
} else {
|
} else {
|
||||||
Log3 $name, 2, "$name: unhandled websocket text $data";
|
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' ) {
|
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} ) {
|
if( my $chash = $modules{HUEDevice}{defptr}{$code} ) {
|
||||||
HUEDevice_Parse($chash, $obj);
|
HUEDevice_Parse($chash, $obj);
|
||||||
HUEBridge_updateGroups($hash, $chash->{ID}) if( !$chash->{helper}{devtype} );
|
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 {
|
} else {
|
||||||
Log3 $name, 4, "$name: message for unknown device received: $code";
|
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' ) {
|
} elsif( $obj->{t} eq 'event' && $obj->{e} eq 'added' ) {
|
||||||
Log3 $name, 5, "$name: websocket add: $data";
|
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' ) {
|
} elsif( $obj->{t} eq 'event' && $obj->{e} eq 'deleted' ) {
|
||||||
Log3 $name, 5, "$name: todo: handle websocket delete $data";
|
Log3 $name, 5, "$name: todo: handle websocket delete $data";
|
||||||
@@ -1907,31 +1918,13 @@ HUEBridge_dispatch($$$;$)
|
|||||||
$changed .= "," if( $changed );
|
$changed .= "," if( $changed );
|
||||||
$changed .= $chash->{ID};
|
$changed .= $chash->{ID};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} elsif( HUEDevice_moveToBridge( $lights->{$id}{uniqueid}, $name, $id ) ) {
|
||||||
|
HUEDevice_Parse($hash, $lights->{$id});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
my $found;
|
Log3 $name, 3, "$name: message for unknown device received: $code";
|
||||||
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', '<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 );
|
HUEBridge_updateGroups($hash, $changed) if( $changed );
|
||||||
|
|||||||
@@ -323,8 +323,37 @@ HUEDevice_IODevChanged($$$;$)
|
|||||||
return $new;
|
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) = @_;
|
my ($hash, $def) = @_;
|
||||||
|
|
||||||
return $@ unless ( FHEM::Meta::SetInternals($hash) );
|
return $@ unless ( FHEM::Meta::SetInternals($hash) );
|
||||||
|
|||||||
Reference in New Issue
Block a user