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"; + $dd.=FW_select("$hash->{NAME}-$cmd","scn", \@tv, $scn,"dropdown","submit()")."\n"; + $dd.=FW_hidden("detail",$hash->{NAME}) . "\n"; + $dd.="
\n"; + # make table + if ($scn eq "Choose scene" || $scn eq '') { + $html.=""; + } else { + $html.="
Edit scene$dd
Edit scene$dd
"; + $html .= ''; + $html .= ''."\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 .= ""; + 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 .= "
DeviceCommand
$dev
\n"; + $html.=FW_select('',"cmd1", \@cmds, $setcmd, 'select')."\n"; + $html.=FW_textfieldv("val.$dev", 50, 'class',$default)."\n"; + $html.=FW_hidden("dev.$dev", $dev) . "\n"; + $html.=FW_hidden("cmd.$dev", $set) . "\n"; + $html.=FW_submit("lse", 'saveline'); + $html.=FW_hidden("scn", $scn) . "\n"; + $html.=FW_hidden("detail",$hash->{NAME}) . "\n"; + $html .= "

\n"; + $html .= "\n"; + return $html; +} 1; =pod