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:
parent
b28e31ea19
commit
9eebfa5bda
@ -387,19 +387,23 @@ HUEBridge_Set($@)
|
||||
return undef;
|
||||
|
||||
} elsif($cmd eq 'savescene') {
|
||||
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 );
|
||||
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]),
|
||||
};
|
||||
$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 <name>|<id><br>
|
||||
Deletes the given group in the bridge and deletes the associated fhem device.</li>
|
||||
<li>savescene <id> <name> <lights><br>
|
||||
<li>savescene <name> <lights><br>
|
||||
Create a scene from the current state of <lights> in the bridge.
|
||||
The lights are given as a comma sparated list of fhem device names or bridge light numbers.</li>
|
||||
<li>scene <id><br>
|
||||
Recalls the scene with the given id.</li>
|
||||
<li>modifyscene <id> <light> <light-args><br>
|
||||
Modifys the given scene in the bridge.</li>
|
||||
<li>deletwhitelist <key><br>
|
||||
<li>deletewhitelist <key><br>
|
||||
Deletes the given key from the whitelist in the bridge.</li>
|
||||
<li>touchlink<br>
|
||||
perform touchlink action</li>
|
||||
|
@ -543,9 +543,22 @@ HUEDevice_Set($@)
|
||||
return undef;
|
||||
|
||||
} elsif( $cmd eq 'savescene' ) {
|
||||
return "usage: savescene <id>" if( @args != 1 );
|
||||
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 $aa[1] $aa[1] $hash->{NAME}" );
|
||||
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 <id></li>
|
||||
<li>deletescene <id></li>
|
||||
<li>scene</li>
|
||||
<br>
|
||||
<li>lights <lights><br>
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user