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

HUE: enabled new scene api, use new scene api in LightScene

git-svn-id: https://svn.fhem.de/fhem/trunk@11366 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2016-05-02 14:10:04 +00:00
parent b28e31ea19
commit 9eebfa5bda
3 changed files with 49 additions and 23 deletions

View File

@ -387,19 +387,23 @@ HUEBridge_Set($@)
return undef;
} elsif($cmd eq 'savescene') {
my $result;
if( $hash->{helper}{apiversion} && $hash->{helper}{apiversion} >= (1<<16) + (11<<8) ) {
return "usage: savescene <name> <lights>" if( @args < 2 );
my $obj = { 'name' => join( ' ', @args[0..@args-2]),
'recycle' => JSON::true,
'lights' => HUEBridge_string2array($args[@args-1]),
};
$result = HUEBridge_Call($hash, undef, "scenes", $obj, 'POST');
} else {
return "usage: savescene <id> <name> <lights>" if( @args < 3 );
my $obj = { 'name' => join( ' ', @args[1..@args-2]),
'lights' => HUEBridge_string2array($args[@args-1]),
};
my $result;
if( 0 && $hash->{helper}{apiversion} && $hash->{helper}{apiversion} >= (1<<16) + (11<<8) ) {
#FIXME: currently not supported. LightScene needs scene id.
$obj->{recycle} = JSON::true if( $arg );
$result = HUEBridge_Call($hash, undef, "scenes", $obj, 'POST');
} else {
$result = HUEBridge_Call($hash, undef, "scenes/$arg", $obj, 'PUT');
}
@ -531,12 +535,12 @@ HUEBridge_Get($@)
my $ret = "";
foreach my $key ( sort {$a cmp $b} keys %{$result} ) {
$ret .= sprintf( "%-20s %-20s", $key, $result->{$key}{name} );
$ret .= sprintf( "%i %i %i %-20s %-20s", $result->{$key}{recycle}, $result->{$key}{locked},$result->{$key}{version}, $result->{$key}{owner}, $result->{$key}{lastupdated} ) if( $arg eq 'detail' );
$ret .= sprintf( "%i %i %i %-40s %-20s", $result->{$key}{recycle}, $result->{$key}{locked},$result->{$key}{version}, $result->{$key}{owner}, $result->{$key}{lastupdated}?$result->{$key}{lastupdated}:'' ) if( $arg && $arg eq 'detail' );
$ret .= sprintf( " %s\n", join( ",", @{$result->{$key}{lights}} ) );
}
if( $ret ) {
my $header = sprintf( "%-20s %-20s", "ID", "NAME" );
$header .= sprintf( "%s %s %s %-20s %-20s", "R", "L", "V", "OWNER", "LAST UPDATE" ) if( $arg eq 'detail' );
$header .= sprintf( "%s %s %s %-40s %-20s", "R", "L", "V", "OWNER", "LAST UPDATE" ) if( $arg && $arg eq 'detail' );
$header .= sprintf( " %s\n", "LIGHTS" );
$ret = $header . $ret;
}
@ -1291,14 +1295,14 @@ HUEBridge_HTTP_Request($$$@)
The lights are given as a comma sparated list of fhem device names or bridge light numbers.</li>
<li>deletegroup &lt;name&gt;|&lt;id&gt;<br>
Deletes the given group in the bridge and deletes the associated fhem device.</li>
<li>savescene &lt;id&gt; &lt;name&gt; &lt;lights&gt;<br>
<li>savescene &lt;name&gt; &lt;lights&gt;<br>
Create a scene from the current state of &lt;lights&gt; in the bridge.
The lights are given as a comma sparated list of fhem device names or bridge light numbers.</li>
<li>scene &lt;id&gt;<br>
Recalls the scene with the given id.</li>
<li>modifyscene &lt;id&gt; &lt;light&gt; &lt;light-args&gt;<br>
Modifys the given scene in the bridge.</li>
<li>deletwhitelist &lt;key&gt;<br>
<li>deletewhitelist &lt;key&gt;<br>
Deletes the given key from the whitelist in the bridge.</li>
<li>touchlink<br>
perform touchlink action</li>

View File

@ -543,10 +543,23 @@ HUEDevice_Set($@)
return undef;
} elsif( $cmd eq 'savescene' ) {
if( $defs{$name}->{IODev}->{helper}{apiversion} && $defs{$name}->{IODev}->{helper}{apiversion} >= (1<<16) + (11<<8) ) {
return "usage: savescene <name>" if( @args < 1 );
return fhem( "set $hash->{IODev}{NAME} savescene ". join( ' ', @aa[1..@aa-1]). " $hash->{NAME}" );
} else {
return "usage: savescene <id>" if( @args != 1 );
return fhem( "set $hash->{IODev}{NAME} savescene $aa[1] $aa[1] $hash->{NAME}" );
}
} elsif( $cmd eq 'deletescene' ) {
return "usage: deletescene <id>" if( @args != 1 );
return fhem( "set $hash->{IODev}{NAME} deletescene $aa[1]" );
} elsif( $cmd eq 'scene' ) {
return "usage: scene <id>" if( @args != 1 );
@ -682,7 +695,7 @@ HUEDevice_Set($@)
#$list .= " dim06% dim12% dim18% dim25% dim31% dim37% dim43% dim50% dim56% dim62% dim68% dim75% dim81% dim87% dim93% dim100%" if( $subtype =~ m/dimmer/ );
$list .= " lights" if( $hash->{helper}->{devtype} eq 'G' );
$list .= " savescene scene" if( $hash->{helper}->{devtype} eq 'G' );
$list .= " savescene deletescene scene" if( $hash->{helper}->{devtype} eq 'G' );
$list .= " rename";
return SetExtensions($hash, $list, $name, @aa);
@ -1276,6 +1289,7 @@ HUEDevice_Parse($$)
<li>immediateUpdate</li>
<br>
<li>savescene &lt;id&gt;</li>
<li>deletescene &lt;id&gt;</li>
<li>scene</li>
<br>
<li>lights &lt;lights&gt;<br>

View File

@ -413,12 +413,13 @@ LightScene_Load($)
}
sub
LightScene_SaveDevice($$;$)
LightScene_SaveDevice($$;$$)
{
my($hash,$d,$scene) = @_;
my($hash,$d,$scene,$desc) = @_;
my $state = "";
my $icon = undef;
my $id = undef;
my $type = $defs{$d}->{TYPE};
$type = "" if( !defined($type) );
@ -496,10 +497,16 @@ LightScene_SaveDevice($$;$)
if( $defs{$d}->{helper}->{devtype} eq "G" ) {
if( $scene ) {
my $id = "FHEM-$hash->{NAME}-$scene";
if( ref($desc) eq 'HASH' ) {
$id = $desc->{id} if( $desc->{id} );
fhem( "set $d deletescene $id" );
}
my $name = "FHEM-$hash->{NAME}-$scene";
my $ret = fhem( "set $d savescene $name" );
if( $ret =~ m/^created (.*)/ ) {
$id = $1;
}
$state = "scene $id";
#FIXME: id too long, new POST api does not use id
fhem( "set $d savescene $id" );
} else {
$state = "<unknown>";
}
@ -537,7 +544,7 @@ LightScene_SaveDevice($$;$)
$state = Value($d);
}
return($state,$icon,$type);
return($state,$icon,$type,$id);
}
sub
@ -665,13 +672,14 @@ LightScene_Set($@)
}
if( $cmd eq "save" ) {
my($state,$icon,$type) = LightScene_SaveDevice($hash,$d,$scene);
my($state,$icon,$type,$id) = LightScene_SaveDevice($hash,$d,$scene,$hash->{SCENES}{$scene}{$d});
if( $icon || ref($state) eq 'ARRAY' || $type eq "SWAP_0000002200000003" || $type eq "HUEDevice" ) {
my %desc;
$desc{state} = $state;
my ($icon, $link, $isHtml) = FW_dev2image($d);
$desc{icon} = $icon;
$desc{id} = $id if( $id );
$hash->{SCENES}{$scene}{$d} = \%desc;
} else {
$hash->{SCENES}{$scene}{$d} = $state;