2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-20 13:26:02 +00:00

30_HUEBridge.pm: some code cleanups

git-svn-id: https://svn.fhem.de/fhem/trunk@25674 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2022-02-13 09:49:58 +00:00
parent 4bc997b516
commit 1e4bc06ec7

View File

@ -56,6 +56,8 @@ HUEBridge_Initialize($)
HUEBridge_loadHUEDevice(); HUEBridge_loadHUEDevice();
# reopen connections if bridge module is reloaded.
# without this already running code might not be overwritten as it is not garbage collected due to strong references
if( $init_done ) { if( $init_done ) {
foreach my $chash ( values %defs ) { foreach my $chash ( values %defs ) {
next if( !$chash ); next if( !$chash );
@ -136,22 +138,27 @@ HUEBridge_Read($)
return; return;
} }
$obj->{source} = 'event';
my $code; my $code;
my $id = $obj->{id}; my $id = $obj->{id};
$id = $obj->{gid} if( $obj->{gid} && $obj->{r} eq 'scenes' );
$code = $name ."-". $id if( $obj->{r} eq 'lights' ); $code = $name ."-". $id if( $obj->{r} eq 'lights' );
$code = $name ."-S". $id if( $obj->{r} eq 'sensors' ); $code = $name ."-S". $id if( $obj->{r} eq 'sensors' );
$code = $name ."-G". $id if( $obj->{r} eq 'groups' ); $code = $name ."-G". $id if( $obj->{r} eq 'groups' );
$code = $name ."-G". $obj->{gid} if( $obj->{r} eq 'scenes' && $obj->{gid} ); $code = $name ."-G". $obj->{gid} if( $obj->{gid} && $obj->{r} eq 'scenes' );
if( !$code ) { if( !$code ) {
Log3 $name, 5, "$name: ignoring event: $data"; Log3 $name, 5, "$name: ignoring event: $data";
return; return;
} }
if( $id == 0xfff0 && $obj->{r} eq 'groups' ) { if( $id == 0xfff0
&& ($obj->{r} eq 'groups' || ($obj->{gid} && $obj->{r} eq 'scenes') ) ) {
$code = $name .'-G0'; $code = $name .'-G0';
Log3 $name, 5, "$name: websocket: assuming group 0 for id $id in event"; Log3 $name, 5, "$name: websocket: assuming group 0 for id $id in event";
} elsif( $id >= 0xff00 && $obj->{r} eq 'groups' ) { } elsif( $id >= 0xff00
&& ($obj->{r} eq 'groups' || ($obj->{gid} && $obj->{r} eq 'scenes') ) ) {
Log3 $name, 4, "$name: websocket: ignoring event for id $id"; Log3 $name, 4, "$name: websocket: ignoring event for id $id";
$hash->{helper}{ignored}{$code} = 1; $hash->{helper}{ignored}{$code} = 1;
return; return;
@ -261,7 +268,7 @@ HUEBridge_Detect($)
my ($err,$ret) = HttpUtils_BlockingGet({ my ($err,$ret) = HttpUtils_BlockingGet({
url => "https://discovery.meethue.com/", url => "https://discovery.meethue.com/",
method => "GET", #method => "GET",
}); });
if( defined($err) && $err ) { if( defined($err) && $err ) {
@ -345,9 +352,9 @@ HUEBridge_Rename($$$)
foreach my $chash ( values %{$modules{HUEDevice}{defptr}} ) { foreach my $chash ( values %{$modules{HUEDevice}{defptr}} ) {
next if( !$chash->{IODev} ); next if( !$chash->{IODev} );
next if( $chash->{IODev}{NAME} ne $new ); next if( $chash->{IODev}{NAME} ne $new ); # IODev already points to the renamed device!
HUEDevice_IODevChanged($chash, $old, $new); HUEDevice_IODevChanged($chash, $old, $new); # updete DEF & defptr key
} }
} }
sub sub
@ -597,15 +604,12 @@ HUEBridge_OpenDev($)
} }
Log3 $name, 5, "HUEBridge_OpenDev: got config " . Dumper $result; Log3 $name, 5, "HUEBridge_OpenDev: got config " . Dumper $result;
HUEBridge_fillBridgeInfo($hash, $result);
if( !defined($result->{'linkbutton'}) || !AttrVal($name, 'key', undef) ) if( !defined($result->{'linkbutton'}) || !AttrVal($name, 'key', undef) )
{ {
HUEBridge_fillBridgeInfo($hash, $result);
HUEBridge_Pair($hash); HUEBridge_Pair($hash);
return; return;
} else {
HUEBridge_fillBridgeInfo($hash, $result);
} }
$hash->{mac} = $result->{mac}; $hash->{mac} = $result->{mac};
@ -2009,18 +2013,19 @@ HUEBridge_Autocreate($;$$)
my $devname = "HUEDevice" . $id; my $devname = "HUEDevice" . $id;
$devname = $name ."_". $devname if( $hash->{helper}{count} ); $devname = $name ."_". $devname if( $hash->{helper}{count} );
my $define= "$devname HUEDevice $id IODev=$name"; my $define = "$devname HUEDevice $id IODev=$name";
Log3 $name, 4, "$name: create new device '$devname' for address '$id'"; Log3 $name, 4, "$name: create new device '$devname' for address '$id'";
my $cmdret= CommandDefine(undef,$define); my $cmdret = CommandDefine(undef,$define);
if($cmdret) { if($cmdret) {
Log3 $name, 1, "$name: Autocreate: An error occurred while creating device for id '$id': $cmdret"; Log3 $name, 1, "$name: Autocreate: An error occurred while creating device for id '$id': $cmdret";
} else { } else {
$cmdret= CommandAttr(undef,"$devname alias ".$result->{$id}{name}); $cmdret .= CommandAttr(undef,"$devname IODev $name");
$cmdret= CommandAttr(undef,"$devname room HUEDevice"); $cmdret .= CommandAttr(undef,"$devname group HUEDevice");
$cmdret= CommandAttr(undef,"$devname group HUEDevice"); $cmdret .= CommandAttr(undef,"$devname alias ". $result->{$id}{name});
$cmdret= CommandAttr(undef,"$devname IODev $name"); $cmdret .= CommandAttr(undef,"$devname room ". AttrVal( $name, 'room', 'HUEDevice') );
HUEDeviceSetIcon($devname); HUEDeviceSetIcon($devname);
$defs{$devname}{helper}{fromAutocreate} = 1 ; $defs{$devname}{helper}{fromAutocreate} = 1 ;
@ -2046,20 +2051,21 @@ HUEBridge_Autocreate($;$$)
next; next;
} }
my $devname= "HUEGroup" . $id; my $devname = "HUEGroup" . $id;
$devname = $name ."_". $devname if( $hash->{helper}{count} ); $devname = $name ."_". $devname if( $hash->{helper}{count} );
my $define= "$devname HUEDevice group $id IODev=$name"; my $define = "$devname HUEDevice group $id IODev=$name";
Log3 $name, 4, "$name: create new group '$devname' for address '$id'"; Log3 $name, 4, "$name: create new group '$devname' for address '$id'";
my $cmdret= CommandDefine(undef,$define); my $cmdret = CommandDefine(undef,$define);
if($cmdret) { if($cmdret) {
Log3 $name, 1, "$name: Autocreate: An error occurred while creating group for id '$id': $cmdret"; Log3 $name, 1, "$name: Autocreate: An error occurred while creating group for id '$id': $cmdret";
} else { } else {
$cmdret= CommandAttr(undef,"$devname alias ".$result->{$id}{name}); $cmdret .= CommandAttr(undef,"$devname IODev $name");
$cmdret= CommandAttr(undef,"$devname room HUEDevice"); $cmdret .= CommandAttr(undef,"$devname group HUEGroup");
$cmdret= CommandAttr(undef,"$devname group HUEGroup"); $cmdret .= CommandAttr(undef,"$devname alias ". $result->{$id}{name});
$cmdret= CommandAttr(undef,"$devname IODev $name"); $cmdret .= CommandAttr(undef,"$devname room ". AttrVal( $name, 'room', 'HUEDevice') );
HUEDeviceSetIcon($devname); HUEDeviceSetIcon($devname);
$defs{$devname}{helper}{fromAutocreate} = 1 ; $defs{$devname}{helper}{fromAutocreate} = 1 ;
@ -2085,20 +2091,21 @@ HUEBridge_Autocreate($;$$)
next; next;
} }
my $devname= "HUESensor" . $id; my $devname = "HUESensor" . $id;
$devname = $name ."_". $devname if( $hash->{helper}{count} ); $devname = $name ."_". $devname if( $hash->{helper}{count} );
my $define= "$devname HUEDevice sensor $id IODev=$name"; my $define = "$devname HUEDevice sensor $id IODev=$name";
Log3 $name, 4, "$name: create new sensor '$devname' for address '$id'"; Log3 $name, 4, "$name: create new sensor '$devname' for address '$id'";
my $cmdret= CommandDefine(undef,$define); my $cmdret = CommandDefine(undef,$define);
if($cmdret) { if($cmdret) {
Log3 $name, 1, "$name: Autocreate: An error occurred while creating sensor for id '$id': $cmdret"; Log3 $name, 1, "$name: Autocreate: An error occurred while creating sensor for id '$id': $cmdret";
} else { } else {
$cmdret= CommandAttr(undef,"$devname alias ".$result->{$id}{name}); $cmdret .= CommandAttr(undef,"$devname IODev $name");
$cmdret= CommandAttr(undef,"$devname room HUEDevice"); $cmdret .= CommandAttr(undef,"$devname group HUESensor");
$cmdret= CommandAttr(undef,"$devname group HUESensor"); $cmdret .= CommandAttr(undef,"$devname alias ".$result->{$id}{name});
$cmdret= CommandAttr(undef,"$devname IODev $name"); $cmdret .= CommandAttr(undef,"$devname room ". AttrVal( $name, 'room', 'HUEDevice') );
HUEDeviceSetIcon($devname); HUEDeviceSetIcon($devname);
$defs{$devname}{helper}{fromAutocreate} = 1 ; $defs{$devname}{helper}{fromAutocreate} = 1 ;
@ -2581,6 +2588,7 @@ HUEBridge_dispatch($$$;$)
#$creationtime = FmtDateTime( SVG_time_to_sec($creationtime) + $hash->{helper}{offsetUTC} ) if( defined($hash->{helper}{offsetUTC}) ); #$creationtime = FmtDateTime( SVG_time_to_sec($creationtime) + $hash->{helper}{offsetUTC} ) if( defined($hash->{helper}{offsetUTC}) );
#substr( $creationtime, 10, 1, 'T' ); #substr( $creationtime, 10, 1, 'T' );
my $obj = { state => { lastupdated => $creationtime }, my $obj = { state => { lastupdated => $creationtime },
source => 'event',
v2_id => $data->{owner}{rid}, v2_id => $data->{owner}{rid},
v2_service => $data->{id} }; v2_service => $data->{id} };
$obj->{v2_id} = $obj->{v2_service} if( $t eq 'groups' ); $obj->{v2_id} = $obj->{v2_service} if( $t eq 'groups' );
@ -3074,8 +3082,8 @@ __END__
=item tag cloudfree =item tag cloudfree
=item tag publicAPI =item tag publicAPI
=item tag protocol:zigbee =item tag protocol:zigbee
=item summary module for the philips hue bridge =item summary module for Philips HUE Bridges (and deCONZ)
=item summary_DE Modul für die Philips HUE Bridge =item summary_DE Modul für die Philips HUE Bridge (und deCONZ)
=begin html =begin html
<a id="HUEBridge"></a> <a id="HUEBridge"></a>