2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-04 05:16:45 +00:00

30_HUEBridge.pm, 31_HUEDevice.pm: deconz event fixes, more button event readings

git-svn-id: https://svn.fhem.de/fhem/trunk@25553 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2022-01-24 19:11:34 +00:00
parent 700f845acb
commit 90678fee5f
2 changed files with 25 additions and 17 deletions

View File

@ -104,6 +104,8 @@ HUEBridge_Read($)
if( $data eq '?' ) { if( $data eq '?' ) {
#ignore keepalive #ignore keepalive
#RemoveInternalTimer($hash, 'HUEBridge_openWebsocket' );
#InternalTimer(gettimeofday()+300, 'HUEBridge_openWebsocket', $hash, 0);
} elsif( $op == 0x01 ) { } elsif( $op == 0x01 ) {
my $obj = eval { JSON->new->utf8(0)->decode($data) }; my $obj = eval { JSON->new->utf8(0)->decode($data) };
@ -364,6 +366,8 @@ HUEBridge_closeWebsocket($)
my ($hash) = @_; my ($hash) = @_;
my $name = $hash->{NAME}; my $name = $hash->{NAME};
RemoveInternalTimer($hash, 'HUEBridge_openWebsocket' );
delete $hash->{buf}; delete $hash->{buf};
delete $hash->{websocket}; delete $hash->{websocket};
@ -1440,7 +1444,7 @@ HUEBridge_Get($@)
} elsif($cmd eq 'ignored' ) { } elsif($cmd eq 'ignored' ) {
return join( "\n", sort keys %{$hash->{helper}{ignored}} ); return join( "\n", sort keys %{$hash->{helper}{ignored}} );
} elsif($cmd eq 'get2resources' ) { } elsif($cmd eq 'getv2resources' ) {
HUEBridge_getv2resources($hash, 1); HUEBridge_getv2resources($hash, 1);
return "done"; return "done";
@ -2422,8 +2426,8 @@ HUEBridge_dispatch($$$;$)
$buttonevent = "${input}003"; $buttonevent = "${input}003";
} }
#$obj->{state}{input} = $input; $obj->{state}{input} = $input;
#$obj->{state}{eventtype} = $eventtype; $obj->{state}{eventtype} = $eventtype;
$obj->{state}{buttonevent} = $buttonevent; $obj->{state}{buttonevent} = $buttonevent;
} elsif( $data->{type} eq 'temperature' ) { } elsif( $data->{type} eq 'temperature' ) {

View File

@ -589,7 +589,7 @@ HUEDevice_SetParam($$@)
if($cmd eq 'on') { if($cmd eq 'on') {
$obj->{'on'} = JSON::true; $obj->{'on'} = JSON::true;
# temporary disablea for everything. hast do be disabled for groups. # temporary disable for everything. hast do be disabled for groups.
# see https://forum.fhem.de/index.php/topic,11020.msg497825.html#msg497825 # see https://forum.fhem.de/index.php/topic,11020.msg497825.html#msg497825
#$obj->{'bri'} = 254 if( $name && ReadingsVal($name,"bri","0") eq 0 && AttrVal($name, 'subType', 'dimmer') ne 'switch' ); #$obj->{'bri'} = 254 if( $name && ReadingsVal($name,"bri","0") eq 0 && AttrVal($name, 'subType', 'dimmer') ne 'switch' );
$obj->{'transitiontime'} = $value * 10 if( defined($value) ); $obj->{'transitiontime'} = $value * 10 if( defined($value) );
@ -1481,25 +1481,26 @@ HUEDevice_Parse($$)
Log3 $name, 4, "parse status message for $name"; Log3 $name, 4, "parse status message for $name";
#Log3 $name, 5, Dumper $result if($HUEDevice_hasDataDumper); #Log3 $name, 5, Dumper $result if($HUEDevice_hasDataDumper);
if( !defined($hash->{has_v2_api}) # only if not already checked if( !defined($hash->{has_events}) # only if not already checked
&& $result->{v2_service} # only for updates from eventstream events && ($result->{v2_service} || $result->{v2_service}{t}) # only for updates from events
&& defined($hash->{IODev} && $hash->{IODev}{TYPE} eq 'HUEBridge') ) { && defined($hash->{IODev} && $hash->{IODev}{TYPE} eq 'HUEBridge') ) {
$hash->{has_v2_api} = $hash->{IODev}{has_v2_api} if( defined($hash->{IODev}{has_v2_api}) ); $hash->{has_events} = $hash->{IODev}{has_v2_api} if( defined($hash->{IODev}{has_v2_api}) );
$hash->{has_v2_api} = 0 if( $hash->{IODev}{is_DECONZ} ); $hash->{has_events} = 1 if( $hash->{IODev}{is_DECONZ} );
Log3 $name, 4, "$name: bridge has v2 api: ". ($hash->{has_v2_api} ? 1 : 0); Log3 $name, 4, "$name: bridge has events api: ". ($hash->{has_events} ? 1 : 0);
if( $hash->{INTERVAL} && $hash->{has_v2_api} ) { if( $hash->{INTERVAL} && $hash->{has_events} ) {
if( defined($hash->{IODev}{EventStream}) && $hash->{IODev}{EventStream} eq 'connected' ) { if( $hash->{IODev}{websocket}
|| (defined($hash->{IODev}{EventStream}) && $hash->{IODev}{EventStream} eq 'connected' )) {
delete $hash->{INTERVAL}; delete $hash->{INTERVAL};
Log3 $name, 2, "$name: bridge has v2 api, EventStream connected, removing interval"; Log3 $name, 2, "$name: bridge has events api, events connected, removing interval";
RemoveInternalTimer($hash); RemoveInternalTimer($hash);
InternalTimer(gettimeofday()+$hash->{INTERVAL}, "HUEDevice_GetUpdate", $hash, 0) if( $hash->{INTERVAL} ); InternalTimer(gettimeofday()+$hash->{INTERVAL}, "HUEDevice_GetUpdate", $hash, 0) if( $hash->{INTERVAL} );
} else { } else {
delete $hash->{has_v2_api}; delete $hash->{has_events};
Log3 $name, 2, "$name: bridge has v2 api, EventStream not jet connected"; Log3 $name, 2, "$name: bridge has events api, events not jet connected";
} }
} }
@ -1753,12 +1754,14 @@ HUEDevice_Parse($$)
$readings{state} = $state->{flag}?'1':'0' if( defined($state->{flag}) ); $readings{state} = $state->{flag}?'1':'0' if( defined($state->{flag}) );
$readings{state} = $state->{open}?'open':'closed' if( defined($state->{open}) ); $readings{state} = $state->{open}?'open':'closed' if( defined($state->{open}) );
$readings{state} = $state->{lightlevel} if( defined($state->{lightlevel}) && !defined($state->{lux}) ); $readings{state} = $state->{lightlevel} if( defined($state->{lightlevel}) && !defined($state->{lux}) );
#$readings{state} = $state->{input} if( defined($state->{input}) );
#$readings{state} = $state->{eventtype} if( defined($state->{eventtype}) );
$readings{state} = $state->{buttonevent} if( defined($state->{buttonevent}) ); $readings{state} = $state->{buttonevent} if( defined($state->{buttonevent}) );
$readings{state} = $state->{presence}?'motion':'nomotion' if( defined($state->{presence}) ); $readings{state} = $state->{presence}?'motion':'nomotion' if( defined($state->{presence}) );
$readings{state} = $state->{fire}?'fire':'nofire' if( defined($state->{fire}) ); $readings{state} = $state->{fire}?'fire':'nofire' if( defined($state->{fire}) );
$readings{input} = $state->{input} if( defined($state->{input}) );
$readings{eventtype} = $state->{eventtype} if( defined($state->{eventtype}) );
$readings{eventduration} = $state->{eventduration} if( defined($state->{eventduration}) );
$readings{dark} = $state->{dark}?'1':'0' if( defined($state->{dark}) ); $readings{dark} = $state->{dark}?'1':'0' if( defined($state->{dark}) );
$readings{humidity} = $state->{humidity} * 0.01 if( defined($state->{humidity}) ); $readings{humidity} = $state->{humidity} * 0.01 if( defined($state->{humidity}) );
$readings{daylight} = $state->{daylight}?'1':'0' if( defined($state->{daylight}) ); $readings{daylight} = $state->{daylight}?'1':'0' if( defined($state->{daylight}) );
@ -1817,7 +1820,8 @@ HUEDevice_Parse($$)
if( defined($readings{$key}) ) { if( defined($readings{$key}) ) {
if( $lastupdated ) { if( $lastupdated ) {
my $rut = ReadingsTimestamp($name,$key,undef); my $rut = ReadingsTimestamp($name,$key,undef);
if( !defined($result->{v2_service}) && $ts && defined($rut) && $ts <= time_str2num($rut) ) { if( (!defined($result->{v2_service}) || !defined($result->{t}))
&& $ts && defined($rut) && $ts <= time_str2num($rut) ) {
Log3 $name, 4, "$name: ignoring reading $key with timestamp $lastupdated, current reading timestamp is $rut"; Log3 $name, 4, "$name: ignoring reading $key with timestamp $lastupdated, current reading timestamp is $rut";
next; next;
} }