diff --git a/CHANGED b/CHANGED
index 46492ebca..8be6960e7 100644
--- a/CHANGED
+++ b/CHANGED
@@ -1,6 +1,7 @@
# 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.
- SVN
+ - feature: LightScene: added scene editor from UliM
- feature: SYSMON: New method: SYSMON_ShowValuesText
- feature: configDB.pm use sql database instead of fhem.cfg (betateilchen)
- feature: new module 98_geodata collect location based data (betateilchen)
diff --git a/FHEM/31_LightScene.pm b/FHEM/31_LightScene.pm
index 622a41f38..f475a480c 100644
--- a/FHEM/31_LightScene.pm
+++ b/FHEM/31_LightScene.pm
@@ -16,6 +16,7 @@ use vars qw(%FW_webArgs); # all arguments specified in the GET
my $LightScene_hasJSON = 1;
my $LightScene_hasDataDumper = 1;
+my $scn = ''; # scene used for edit-table
sub LightScene_Initialize($)
{
@@ -30,6 +31,7 @@ sub LightScene_Initialize($)
$hash->{AttrList} = "switchingOrder";
$hash->{FW_detailFn} = "LightScene_detailFn";
+ $data{FWEXT}{"/LightScene"}{FUNC} = "LightScene_CGI"; #mod
addToAttrList("lightSceneParamsToSave");
addToAttrList("lightSceneRestoreOnlyIfChanged:1,0");
@@ -188,8 +190,9 @@ LightScene_detailFn()
Log3 $hash->{NAME}, 5, "opened: $FW_cname";
$hash->{helper}->{myDisplay}->{$FW_cname} = 1;
}
-
- return LightScene_2html($d);
+ my $html = LightScene_2html($d); #mod
+ $html .= LightScene_editTable($hash); #mod
+ return $html;
}
sub
@@ -746,7 +749,83 @@ LightScene_Attr($@)
return;
}
+sub
+LightScene_CGI {
+ my ($cgi) = @_;
+ my ($cmd,$c)=FW_digestCgi($cgi);
+ $scn = $FW_webArgs{scn};
+ $cmd =~ s/ set / setcmd / if( defined($FW_webArgs{cmd1}) && $FW_webArgs{cmd1} eq 'setcmd' );
+# Debug "LS758: cmd: $cmd";
+ AnalyzeCommand(undef,$cmd);
+ #redirect to return to detail screen
+ my $tgt = "?detail=$FW_webArgs{detail}";
+ $tgt = $FW_ME.$tgt;
+ $c = $defs{$FW_cname}->{CD};
+ print $c "HTTP/1.1 302 Found\r\n",
+ "Content-Length: 0\r\n",
+ "Location: $tgt\r\n",
+ "\r\n";
+ return;
+}
+sub
+LightScene_editTable($) {
+ my ($hash) = @_;
+ my $html="\n\n\n";
+ my $cmd='scn';
+ #make dropdown
+ my @tv = (sort keys %{ $hash->{SCENES} });
+ unshift (@tv,'Choose scene');
+ my $dd.="
\n";
+ # make table
+ if ($scn eq "Choose scene" || $scn eq '') {
+ $html.="Edit scene | $dd |
";
+ } else {
+ $html.="";
+ $html .= '';
+ $html .= 'Device | Command |
'."\n";
+ my $row=0;
+ my @devices;
+ if( $scn && defined($hash->{switchingOrder}) && defined($hash->{switchingOrder}{$scn}) ) {
+ @devices = @{$hash->{switchingOrder}{$scn}};
+ } else {
+ @devices = @{$hash->{devices}};
+ }
+ #table rows
+ my @cmds = qw(set setcmd);
+ my $set = "set $hash->{NAME} set $scn";
+ my $setcmd = '';
+ foreach my $dev (@devices) {
+ $row+=1;
+ $html .= "";
+ $html .= "$dev | ";
+ my $default = $hash->{SCENES}{$scn}{$dev};
+ if ($hash->{SCENES}{$scn}{$dev} =~ m/^;/) {
+ $default =~ s/^;//;
+ $setcmd='setcmd';
+ } else {
+ $setcmd='set';
+ }
+ $default = $default->{state} if( ref($default) eq 'HASH' );
+ $html.=" | \n";
+ }
+ }
+ #table end
+ $html .= "
\n";
+ $html .= "\n";
+ return $html;
+}
1;
=pod