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

31_LightScene.pm: added nextScene and previousScene commands, don't save scenes from deleted LightScene device

git-svn-id: https://svn.fhem.de/fhem/trunk@10874 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
justme-1968 2016-02-19 10:00:11 +00:00
parent db3165b07d
commit a299d07586
2 changed files with 22 additions and 1 deletions

View File

@ -1,5 +1,6 @@
# 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.
- feature: LightScene: added nextScene and previousScene commands
- feature 49_SSCAM: Reading "CamExposureControl" added
- feature 49_SSCAM: set up of motion detection source now possible
- feature 55_GDS: disable conditions after 15.03.2016

View File

@ -89,6 +89,7 @@ sub LightScene_Undefine($$)
{
my ($hash,$arg) = @_;
delete $hash->{SCENES};
LightScene_Save();
return undef;
@ -581,7 +582,9 @@ LightScene_Set($@)
if( !defined($cmd) ){ return "$name: set needs at least one parameter" };
if( $cmd eq "?" ){ return "Unknown argument ?, choose one of remove:".join(",", sort keys %{$hash->{SCENES}}) ." rename save set setcmd scene:".join(",", sort keys %{$hash->{SCENES}})};
my @sorted = sort keys %{$hash->{SCENES}};
if( $cmd eq "?" ){ return "Unknown argument ?, choose one of remove:".join(",", @sorted) ." rename save set setcmd scene:".join(",", @sorted) ." nextScene:noArg previousScene:noArg"};
if( $cmd eq "save" && !defined( $scene ) ) { return "Usage: set $name save <scene_name>" };
if( $cmd eq "scene" && !defined( $scene ) ) { return "Usage: set $name scene <scene_name>" };
@ -589,10 +592,12 @@ LightScene_Set($@)
if( $cmd eq "rename" && !defined( $scene ) ) { return "Usage: set $name rename <scene_alt> <scene_neu>" };
if( $cmd eq "remove" ) {
return "no such scene $scene" if( !defined $hash->{SCENES}{$scene} );
delete( $hash->{SCENES}{$scene} );
return undef;
} elsif( $cmd eq "rename" ) {
return "no such scene $scene" if( !defined $hash->{SCENES}{$scene} );
my ($new) = @a;
if( !( $new ) ) { return "Usage: set $name rename <scene_alt> <scene_neu>" };
@ -616,6 +621,7 @@ LightScene_Set($@)
LightScene_updateHelper( $hash, AttrVal($name,"switchingOrder",undef) );
return undef;
} elsif( $cmd eq "updateToJson" && $LightScene_hasDataDumper && $LightScene_hasJSON ) {
$LightScene_hasJSON = 0;
LightScene_Load($hash);
@ -623,6 +629,20 @@ LightScene_Set($@)
$LightScene_hasJSON = 1;
LightScene_Save();
return undef;
} elsif( $cmd eq 'nextScene' || $cmd eq 'previousScene' ) {
return "no scenes defined" if( $#sorted < 0 );
my $current = ReadingsVal( $name, 'state', '' );
my( $index )= grep { $sorted[$_] eq $current } 0..$#sorted;
$index = -1 if( !defined($index) );
++$index if( $cmd eq 'nextScene' );
--$index if( $cmd eq 'previousScene' );
$index = 0 if( $index > $#sorted );
$index = $#sorted if( $index < 0 );
$cmd = 'scene';
$scene = $sorted[$index];
}