mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-21 07:56:03 +00:00
31_LightScene.pm: added traversalOrder attribute
git-svn-id: https://svn.fhem.de/fhem/trunk@15108 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
0ec22d1e4c
commit
0680c2352c
@ -29,7 +29,7 @@ sub LightScene_Initialize($)
|
||||
$hash->{SetFn} = "LightScene_Set";
|
||||
$hash->{GetFn} = "LightScene_Get";
|
||||
$hash->{AttrFn} = "LightScene_Attr";
|
||||
$hash->{AttrList} = "async_delay followDevices:1,2 lightSceneRestoreOnlyIfChanged:1,0 showDeviceCurrentState:1,0 switchingOrder ". $readingFnAttributes;
|
||||
$hash->{AttrList} = "async_delay followDevices:1,2 lightSceneRestoreOnlyIfChanged:1,0 showDeviceCurrentState:1,0 switchingOrder traversalOrder ". $readingFnAttributes;
|
||||
|
||||
$hash->{FW_detailFn} = "LightScene_detailFn";
|
||||
$data{FWEXT}{"/LightScene"}{FUNC} = "LightScene_CGI"; #mod
|
||||
@ -640,22 +640,31 @@ LightScene_Set($@)
|
||||
return undef;
|
||||
|
||||
} elsif( $cmd eq 'nextScene' || $cmd eq 'previousScene' ) {
|
||||
return "no scenes defined" if( $#sorted < 0 );
|
||||
my $sorted = \@sorted;
|
||||
if( my $list = AttrVal($name, 'traversalOrder', undef ) ) {
|
||||
my @parts = split( /[ ,\n]/, $list );
|
||||
$sorted = \@parts;
|
||||
}
|
||||
my $max = scalar @{$sorted}-1;
|
||||
|
||||
return "no scenes defined" if( $max < 0 );
|
||||
my $current = ReadingsVal( $name, 'state', '' );
|
||||
my( $index )= grep { $sorted[$_] eq $current } 0..$#sorted;
|
||||
my( $index )= grep { $sorted->[$_] eq $current } 0..$max;
|
||||
$index = -1 if( !defined($index) );
|
||||
|
||||
++$index if( $cmd eq 'nextScene' );
|
||||
--$index if( $cmd eq 'previousScene' );
|
||||
|
||||
return if( $scene && $scene eq 'nowrap' && $index > $#sorted );
|
||||
return if( $scene && $scene eq 'nowrap' && $index > $max );
|
||||
return if( $scene && $scene eq 'nowrap' && $index < 0 );
|
||||
|
||||
$index = 0 if( $index > $#sorted );
|
||||
$index = $#sorted if( $index < 0 );
|
||||
$index = 0 if( $index > $max );
|
||||
$index = $max if( $index < 0 );
|
||||
|
||||
$cmd = 'scene';
|
||||
$scene = $sorted[$index];
|
||||
$scene = $sorted->[$index];
|
||||
|
||||
return "no such scene: $scene" if( !defined $hash->{SCENES}{$scene} );
|
||||
}
|
||||
|
||||
|
||||
@ -1087,6 +1096,10 @@ LightScene_editTable($) {
|
||||
<code>define media LightScene TV,DVD,Amplifier,masterPower<br>
|
||||
attr media switchingOrder .*On:masterPower,.* allOff:!.*,masterPower</code>
|
||||
</li>
|
||||
<li>traversalOrder<br>
|
||||
comma separated list of scene names that should be traversed by the prevoiusScene and nextScene commands.<br>
|
||||
default not set -> all scenes will be traversed in alphabetical order
|
||||
</li>
|
||||
<li><a href="#readingFnAttributes">readingFnAttributes</a></li>
|
||||
</ul><br>
|
||||
</ul>
|
||||
|
Loading…
x
Reference in New Issue
Block a user