2
0
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:
justme-1968 2020-01-14 21:07:21 +00:00
parent d1ebfbbb81
commit 28eb11e89d
2 changed files with 58 additions and 36 deletions

View File

@ -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 );

View File

@ -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) );