30_HUEBridge.pm: some code cleanups

git-svn-id: https://svn.fhem.de/fhem/trunk@25616 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2022-02-02 17:18:07 +00:00
parent 6581844842
commit cd778d44b0

View File

@ -125,10 +125,15 @@ HUEBridge_Read($)
} elsif( $op == 0x01 ) { } elsif( $op == 0x01 ) {
my $obj = eval { JSON->new->utf8(0)->decode($data) }; my $obj = eval { JSON->new->utf8(0)->decode($data) };
if( $obj ) { if( !$obj ) {
Log3 $name, 2, "$name: websocket: unhandled text $data";
return;
}
Log3 $name, 5, "$name: websocket data: ". Dumper $obj; Log3 $name, 5, "$name: websocket data: ". Dumper $obj;
} else {
Log3 $name, 2, "$name: unhandled websocket text $data"; if( $obj->{t} ne 'event' ) {
Log3 $name, 2, "$name: websocket: unhandled message type: $data";
return;
} }
my $code; my $code;
@ -142,15 +147,17 @@ HUEBridge_Read($)
return; return;
} }
if( $id == 0xfff0 ) { if( $id == 0xfff0 && $obj->{r} eq 'groups' ) {
$code = $name .'-G0'; $code = $name .'-G0';
Log3 $name, 5, "$name: websocket: assuming group 0 for id $id in event";
} elsif( $id >= 0xff00 ) { } elsif( $id >= 0xff00 && $obj->{r} eq 'groups' ) {
Log3 $name, 4, "$name: websocket: ignoring event for id $id";
$hash->{helper}{ignored}{$code} = 1; $hash->{helper}{ignored}{$code} = 1;
return; return;
} }
if( $obj->{t} eq 'event' && $obj->{e} eq 'changed' ) { if( $obj->{e} eq 'changed' ) {
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} );
@ -168,14 +175,14 @@ HUEBridge_Read($)
Log3 $name, 2, "$name: websocket: event for unknown device received: $code"; Log3 $name, 2, "$name: websocket: event for unknown device received: $code";
} }
} elsif( $obj->{t} eq 'event' && $obj->{e} eq 'scene-called' ) { } elsif( $obj->{e} eq 'scene-called' ) {
if( my $chash = $modules{HUEDevice}{defptr}{$code} ) { if( my $chash = $modules{HUEDevice}{defptr}{$code} ) {
#HUEDevice_Parse($chash, $obj); #HUEDevice_Parse($chash, $obj);
HUEDevice_Parse($chash, { state => { scene => $obj->{scid} } } ); HUEDevice_Parse($chash, { state => { scene => $obj->{scid} } } );
#readingsSingleUpdate($hash, 'scene', $obj->{scid}, 1 ); #readingsSingleUpdate($hash, 'scene', $obj->{scid}, 1 );
} }
} elsif( $obj->{t} eq 'event' && $obj->{e} eq 'added' ) { } elsif( $obj->{e} eq 'added' ) {
Log3 $name, 5, "$name: websocket add: $data"; Log3 $name, 5, "$name: websocket add: $data";
if( !HUEDevice_moveToBridge( $obj->{uniqueid}, $name, $obj->{id} ) ) { if( !HUEDevice_moveToBridge( $obj->{uniqueid}, $name, $obj->{id} ) ) {
HUEBridge_Autocreate($hash); HUEBridge_Autocreate($hash);
@ -186,23 +193,29 @@ HUEBridge_Read($)
$obj = $obj->{light}; $obj = $obj->{light};
} elsif( $obj->{r} eq 'sensors' ) { } elsif( $obj->{r} eq 'sensors' ) {
$obj = $obj->{sensor}; $obj = $obj->{sensor};
} elsif( $obj->{r} eq 'goups' ) { } elsif( $obj->{r} eq 'groups' ) {
$obj = $obj->{group}; $obj = $obj->{group};
} }
#maybe this instead?
#given( $obj->{r} ){
# when('lights'){ $obj = $obj->{light}; }
# when('sensors'){ $obj = $obj->{sensor}; }
# when('groups'){ $obj = $obj->{group}; }
#}
HUEDevice_Parse($chash, $obj); HUEDevice_Parse($chash, $obj);
} }
} elsif( $obj->{t} eq 'event' && $obj->{e} eq 'deleted' ) { } elsif( $obj->{e} eq 'deleted' ) {
Log3 $name, 5, "$name: todo: handle websocket delete $data"; Log3 $name, 5, "$name: todo: handle websocket delete $data";
# do what ? # do what ?
} else { } else {
Log3 $name, 5, "$name: unknown websocket data: $data"; Log3 $name, 2, "$name: websocket: unhandled event type: $data";
} }
} else { } else {
Log3 $name, 2, "$name: unhandled websocket data: $data"; Log3 $name, 2, "$name: websocket: unhandled opcode: $data";
} }
} while( $hash->{buf} && !$close ); } while( $hash->{buf} && !$close );