2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 03:06:37 +00:00

30_tradfri, 31_HUEDevice.pm: tradfri blind support

git-svn-id: https://svn.fhem.de/fhem/trunk@20122 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2019-09-07 13:11:42 +00:00
parent 0de7fba246
commit 156e229f4a
3 changed files with 60 additions and 17 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- feature: 30_tradfri: blind support
- feature: 93_DbLog: add-on parameter "force" for MinInterval- Forum: #97148, - feature: 93_DbLog: add-on parameter "force" for MinInterval- Forum: #97148,
new attribute traceHandles, show DB driver versions in new attribute traceHandles, show DB driver versions in
configCheck configCheck

View File

@ -244,6 +244,8 @@ tradfri_processEvent($$) {
CommandAttr(undef, "$name createGroupReadings 1") if( $decoded->{r} eq 'group' ); CommandAttr(undef, "$name createGroupReadings 1") if( $decoded->{r} eq 'group' );
CommandAttr(undef,"$cname subType blind") if( $decoded->{type} eq 'blind' );
HUEDeviceSetIcon($cname); HUEDeviceSetIcon($cname);
$defs{$cname}{helper}{fromAutocreate} = 1 ; $defs{$cname}{helper}{fromAutocreate} = 1 ;

View File

@ -179,7 +179,7 @@ sub HUEDevice_Initialize($)
"model:".join(",", sort map { $_ =~ s/ /#/g ;$_} keys %hueModels)." ". "model:".join(",", sort map { $_ =~ s/ /#/g ;$_} keys %hueModels)." ".
"setList:textField-long ". "setList:textField-long ".
"configList:textField-long ". "configList:textField-long ".
"subType:extcolordimmer,colordimmer,ctdimmer,dimmer,switch ". "subType:extcolordimmer,colordimmer,ctdimmer,dimmer,switch,blind ".
$readingFnAttributes; $readingFnAttributes;
#$hash->{FW_summaryFn} = "HUEDevice_summaryFn"; #$hash->{FW_summaryFn} = "HUEDevice_summaryFn";
@ -240,6 +240,12 @@ HUEDevice_devStateIcon($)
return ".*:$s:toggle" if( AttrVal($name, "subType", "") eq "dimmer" ); return ".*:$s:toggle" if( AttrVal($name, "subType", "") eq "dimmer" );
return ".*:$s:toggle" if( AttrVal($name, "subType", "") eq "switch" ); return ".*:$s:toggle" if( AttrVal($name, "subType", "") eq "switch" );
if( AttrVal($name, "subType", "") eq "blind" ) {
my $p = int(10-$pct/10)*10;
return ".*:fts_window_2w" if( $p == 0 );
return ".*:fts_shutter_$p";
}
#return ".*:$s:toggle" if( AttrVal($name, "model", "") eq "LWB001" ); #return ".*:$s:toggle" if( AttrVal($name, "model", "") eq "LWB001" );
#return ".*:$s:toggle" if( AttrVal($name, "model", "") eq "LWB003" ); #return ".*:$s:toggle" if( AttrVal($name, "model", "") eq "LWB003" );
#return ".*:$s:toggle" if( AttrVal($name, "model", "") eq "LWB004" ); #return ".*:$s:toggle" if( AttrVal($name, "model", "") eq "LWB004" );
@ -426,7 +432,15 @@ HUEDevice_SetParam($$@)
$cmd = 'bri'; $cmd = 'bri';
} }
if($cmd eq "pct" && $value == 0 ) { my $subtype = AttrVal($name, "subType", "extcolordimmer");
if($cmd eq 'up' ) {
$cmd = 'pct';
$value = 100;
} elsif($cmd eq 'down' ) {
$cmd = 'pct';
$value = 0;
} if($cmd eq "pct" && $value == 0 && $subtype ne 'blind' ) {
$cmd = "off"; $cmd = "off";
$value = $value2; $value = $value2;
} }
@ -443,19 +457,24 @@ HUEDevice_SetParam($$@)
$obj->{'transitiontime'} = $value * 10 if( defined($value) ); $obj->{'transitiontime'} = $value * 10 if( defined($value) );
} elsif($cmd eq "pct") { } elsif($cmd eq "pct") {
my $bri; if( $subtype eq 'blind' ) {
if( $value > 50 ) { $obj->{'pct'} = int($value);
$bri = 2.57 * ($value-50) + 128;
} else { } else {
$bri = 2.59 * ($value-50) + 128; my $bri;
if( $value > 50 ) {
$bri = 2.57 * ($value-50) + 128;
} else {
$bri = 2.59 * ($value-50) + 128;
}
$bri = 0 if( $bri < 0 );
$bri = 254 if( $bri > 254 );
#$value = 3.5 if( $value < 3.5 && AttrVal($name, "model", "") eq "LWL001" );
$obj->{'on'} = JSON::true;
#$obj->{'bri'} = int(2.55 * $value);
$obj->{'bri'} = int($bri);
$obj->{'transitiontime'} = $value2 * 10 if( defined($value2) );
} }
$bri = 0 if( $bri < 0 );
$bri = 254 if( $bri > 254 );
#$value = 3.5 if( $value < 3.5 && AttrVal($name, "model", "") eq "LWL001" );
$obj->{'on'} = JSON::true;
#$obj->{'bri'} = int(2.55 * $value);
$obj->{'bri'} = int($bri);
$obj->{'transitiontime'} = $value2 * 10 if( defined($value2) );
} elsif($cmd eq "bri") { } elsif($cmd eq "bri") {
#$value = 8 if( $value < 8 && AttrVal($name, "model", "") eq "LWL001" ); #$value = 8 if( $value < 8 && AttrVal($name, "model", "") eq "LWL001" );
@ -886,6 +905,8 @@ HUEDevice_Set($@)
$list .= " color:colorpicker,CT,2000,1,6500 ct:colorpicker,CT,154,1,500" if( $subtype =~ m/ct|ext/ ); $list .= " color:colorpicker,CT,2000,1,6500 ct:colorpicker,CT,154,1,500" if( $subtype =~ m/ct|ext/ );
$list .= " hue:colorpicker,HUE,0,1,65535 sat:slider,0,1,254 xy" if( $subtype =~ m/color/ ); $list .= " hue:colorpicker,HUE,0,1,65535 sat:slider,0,1,254 xy" if( $subtype =~ m/color/ );
$list = 'up:noArg down:noArg pct:colorpicker,BRI,0,1,100' if( $subtype eq 'blind' );
if( $hash->{IODev} && $hash->{IODev}{helper}{apiversion} && $hash->{IODev}{helper}{apiversion} >= (1<<16) + (7<<8) ) { if( $hash->{IODev} && $hash->{IODev}{helper}{apiversion} && $hash->{IODev}{helper}{apiversion} >= (1<<16) + (7<<8) ) {
$list .= " dimUp:noArg dimDown:noArg" if( $subtype =~ m/dimmer/ ); $list .= " dimUp:noArg dimDown:noArg" if( $subtype =~ m/dimmer/ );
$list .= " ctUp:noArg ctDown:noArg" if( $subtype =~ m/ct|ext/ ); $list .= " ctUp:noArg ctDown:noArg" if( $subtype =~ m/ct|ext/ );
@ -1096,9 +1117,13 @@ HUEDevice_Get($@)
return HUEDevice_devStateIcon($hash); return HUEDevice_devStateIcon($hash);
} }
my $list = "rgb:noArg RGB:noArg devStateIcon:noArg"; my $subtype = $attr{$name}{subType};
my $list;
$list .= "rgb:noArg RGB:noArg devStateIcon:noArg " if( $hash->{helper}->{devtype} ne 'S' );
$list = 'devStateIcon:noArg ' if( $subtype eq 'blind' );
if( $hash->{IODev} && $hash->{IODev}{helper}{apiversion} && $hash->{IODev}{helper}{apiversion} >= (1<<16) + (26<<8) ) { if( $hash->{IODev} && $hash->{IODev}{helper}{apiversion} && $hash->{IODev}{helper}{apiversion} >= (1<<16) + (26<<8) ) {
$list .= " startup:noArg"; $list .= "startup:noArg ";
} }
return "Unknown argument $cmd, choose one of $list"; return "Unknown argument $cmd, choose one of $list";
} }
@ -1321,6 +1346,8 @@ HUEDevice_Parse($$)
$hash->{manufacturername} = $result->{manufacturername} if( defined($result->{manufacturername}) ); $hash->{manufacturername} = $result->{manufacturername} if( defined($result->{manufacturername}) );
$hash->{luminaireuniqueid} = $result->{luminaireuniqueid} if( defined($result->{luminaireuniqueid}) ); $hash->{luminaireuniqueid} = $result->{luminaireuniqueid} if( defined($result->{luminaireuniqueid}) );
$hash->{power} = $result->{power} if( defined($result->{power}) );
if( $hash->{helper}->{devtype} eq 'S' ) { if( $hash->{helper}->{devtype} eq 'S' ) {
my %readings; my %readings;
@ -1387,6 +1414,8 @@ HUEDevice_Parse($$)
$lastupdated_local = $lastupdated; $lastupdated_local = $lastupdated;
} }
$readings{reachable} = ($state->{reachable}?1:0) if( defined($state->{reachable}) );
$readings{state} = $state->{status} if( defined($state->{status}) ); $readings{state} = $state->{status} if( defined($state->{status}) );
$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}) );
@ -1527,6 +1556,7 @@ HUEDevice_Parse($$)
$attr{$name}{webCmd} = 'ct:ct 490:ct 380:ct 270:ct 160:toggle:on:off' if( $subtype eq "ctdimmer" ); $attr{$name}{webCmd} = 'ct:ct 490:ct 380:ct 270:ct 160:toggle:on:off' if( $subtype eq "ctdimmer" );
$attr{$name}{webCmd} = 'pct:toggle:on:off' if( $subtype eq "dimmer" ); $attr{$name}{webCmd} = 'pct:toggle:on:off' if( $subtype eq "dimmer" );
$attr{$name}{webCmd} = 'toggle:on:off' if( $subtype eq "switch" ); $attr{$name}{webCmd} = 'toggle:on:off' if( $subtype eq "switch" );
$attr{$name}{webCmd} = 'up:down:pct' if( $subtype eq "blind" );
} elsif( $hash->{helper}->{devtype} eq 'G' ) { } elsif( $hash->{helper}->{devtype} eq 'G' ) {
$attr{$name}{webCmd} = 'on:off'; $attr{$name}{webCmd} = 'on:off';
} }
@ -1535,6 +1565,7 @@ HUEDevice_Parse($$)
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
my $state = $result->{'state'}; my $state = $result->{'state'};
my $config = $result->{'config'};
my $on = $state->{on}; my $on = $state->{on};
$on = $hash->{helper}{on} if( !defined($on) ); $on = $hash->{helper}{on} if( !defined($on) );
@ -1555,6 +1586,8 @@ HUEDevice_Parse($$)
my $rgb = undef; my $rgb = undef;
$rgb = $state->{rgb} if( defined($state->{rgb}) ); $rgb = $state->{rgb} if( defined($state->{rgb}) );
my $battery = undef;
$battery = $config->{battery} if( defined($config->{battery}) );
if( defined($colormode) && $colormode ne $hash->{helper}{colormode} ) {readingsBulkUpdate($hash,"colormode",$colormode);} if( defined($colormode) && $colormode ne $hash->{helper}{colormode} ) {readingsBulkUpdate($hash,"colormode",$colormode);}
if( defined($bri) && $bri != $hash->{helper}{bri} ) {readingsBulkUpdate($hash,"bri",$bri);} if( defined($bri) && $bri != $hash->{helper}{bri} ) {readingsBulkUpdate($hash,"bri",$bri);}
@ -1575,9 +1608,14 @@ HUEDevice_Parse($$)
if( defined($rgb) && $rgb ne $hash->{helper}{rgb} ) {readingsBulkUpdate($hash,"rgb",$rgb);} if( defined($rgb) && $rgb ne $hash->{helper}{rgb} ) {readingsBulkUpdate($hash,"rgb",$rgb);}
if( defined($battery) && $battery ne $hash->{helper}{battery} ) {readingsBulkUpdate($hash,"battery",$battery);}
my $s = ''; my $s = '';
my $pct = -1; my $pct = -1;
if( $on ) if( defined($state->{'pct'}) ) {
$pct = $state->{'pct'};
$s = $pct;
} elsif( $on )
{ {
$s = 'on'; $s = 'on';
if( $on != $hash->{helper}{on} ) {readingsBulkUpdate($hash,"onoff",1);} if( $on != $hash->{helper}{on} ) {readingsBulkUpdate($hash,"onoff",1);}
@ -1621,6 +1659,8 @@ HUEDevice_Parse($$)
$hash->{helper}{rgb} = $rgb if( defined($rgb) ); $hash->{helper}{rgb} = $rgb if( defined($rgb) );
$hash->{helper}{battery} = $battery if( defined($battery) );
$hash->{helper}{pct} = $pct; $hash->{helper}{pct} = $pct;
my $changed = $hash->{CHANGED}?1:0; my $changed = $hash->{CHANGED}?1:0;