From dd6823610d3b85d2e4750b99eb50d40076bf92fd Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 24 Oct 2016 06:21:37 +0000 Subject: [PATCH] 01_FHEMWEB.js: add "Raw definition" in the device overview. git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@12416 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- FHEM/01_FHEMWEB.pm | 1 + docs/commandref_frame.html | 6 +- docs/commandref_frame_DE.html | 6 +- fhem.pl | 150 +++++++++++++++++++++------------- www/pgm2/fhemweb.js | 61 +++++++++++++- 5 files changed, 165 insertions(+), 59 deletions(-) diff --git a/FHEM/01_FHEMWEB.pm b/FHEM/01_FHEMWEB.pm index f059367a7..2ea3a09c2 100755 --- a/FHEM/01_FHEMWEB.pm +++ b/FHEM/01_FHEMWEB.pm @@ -1278,6 +1278,7 @@ FW_doDetail($) FW_pH "cmd=style iconFor $d", "Select icon", undef, "detLink iconFor"; FW_pH "cmd=style showDSI $d", "Extend devStateIcon", undef, "detLink showDSI"; + FW_pH "cmd=rawDef $d", "Raw defintion", undef, "detLink rawDef"; FW_pH "cmd=delete $d", "Delete this device ($d)", undef, "detLink delDev" if($d ne "global"); my $sfx = AttrVal("global", "language", "EN"); diff --git a/docs/commandref_frame.html b/docs/commandref_frame.html index e3cd948d5..24da576c7 100644 --- a/docs/commandref_frame.html +++ b/docs/commandref_frame.html @@ -886,7 +886,9 @@ The following local attributes are used by a wider range of devices:

list

diff --git a/docs/commandref_frame_DE.html b/docs/commandref_frame_DE.html index 0a25bc37a..ac9151e7b 100644 --- a/docs/commandref_frame_DE.html +++ b/docs/commandref_frame_DE.html @@ -935,7 +935,9 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:

list

diff --git a/fhem.pl b/fhem.pl index a5fe280d7..8f3c1acf3 100755 --- a/fhem.pl +++ b/fhem.pl @@ -348,7 +348,7 @@ $readingFnAttributes = "event-on-change-reading event-on-update-reading ". "iowrite" => { Fn=>"CommandIOWrite", Hlp=>" ,write raw data with iodev" }, "list" => { Fn=>"CommandList", - Hlp=>"[devspec],list definitions and status info" }, + Hlp=>"[-r] [devspec],list definitions and status info" }, "modify" => { Fn=>"CommandModify", Hlp=>"device ,modify the definition (e.g. at, notify)" }, "quit" => { Fn=>"CommandQuit", @@ -1349,6 +1349,46 @@ CommandQuit($$) return undef; } +sub +GetAllReadings($) +{ + my ($d) = @_; + my @ret; + my $val = $defs{$d}{STATE}; + if(defined($val) && + $val ne "unknown" && + $val ne "Initialized" && + $val ne "???") { + $val =~ s/;/;;/g; + $val =~ s/\n/\\\n/g; + push @ret, "setstate $d $val"; + } + + ############# + # Now the detailed list + my $r = $defs{$d}{READINGS}; + if($r) { + foreach my $c (sort keys %{$r}) { + + my $rd = $r->{$c}; + if(!defined($rd->{TIME})) { + Log 4, "WriteStatefile $d $c: Missing TIME, using current time"; + $rd->{TIME} = TimeNow(); + } + + if(!defined($rd->{VAL})) { + Log 4, "WriteStatefile $d $c: Missing VAL, setting it to 0"; + $rd->{VAL} = 0; + } + my $val = $rd->{VAL}; + $val =~ s/;/;;/g; + $val =~ s/\n/\\\n/g; + push @ret,"setstate $d $rd->{TIME} $c $val"; + } + } + return @ret; +} + ##################################### sub WriteStatefile() @@ -1380,44 +1420,46 @@ WriteStatefile() print SFH "define $d $defs{$d}{TYPE} $def\n"; } - my $val = $defs{$d}{STATE}; - if(defined($val) && - $val ne "unknown" && - $val ne "Initialized" && - $val ne "???") { - $val =~ s/;/;;/g; - $val =~ s/\n/\\\n/g; - print SFH "setstate $d $val\n" - } - - ############# - # Now the detailed list - my $r = $defs{$d}{READINGS}; - if($r) { - foreach my $c (sort keys %{$r}) { - - my $rd = $r->{$c}; - if(!defined($rd->{TIME})) { - Log 4, "WriteStatefile $d $c: Missing TIME, using current time"; - $rd->{TIME} = TimeNow(); - } - - if(!defined($rd->{VAL})) { - Log 4, "WriteStatefile $d $c: Missing VAL, setting it to 0"; - $rd->{VAL} = 0; - } - my $val = $rd->{VAL}; - $val =~ s/;/;;/g; - $val =~ s/\n/\\\n/g; - print SFH "setstate $d $rd->{TIME} $c $val\n"; - } - } + my @arr = GetAllReadings($d); + printf SFH join(@arr, "\n") if(@arr); } return "$attr{global}{statefile}: $!" if(!close(SFH)); return ""; } +sub +GetDefAndAttr($) +{ + my ($d) = @_; + my @ret; + + if($d ne "global") { + my $def = $defs{$d}{DEF}; + if(defined($def)) { + $def =~ s/;/;;/g; + $def =~ s/\n/\\\n/g; + push @ret,"define $d $defs{$d}{TYPE} $def"; + } else { + push @ret,"define $d $defs{$d}{TYPE}"; + } + } + + foreach my $a (sort { + return -1 if($a eq "userattr"); # userattr must be first + return 1 if($b eq "userattr"); + return $a cmp $b; + } keys %{$attr{$d}}) { + next if($d eq "global" && + ($a eq "configfile" || $a eq "version")); + my $val = $attr{$d}{$a}; + $val =~ s/;/;;/g; + $val =~ s/\n/\\\n/g; + push @ret,"attr $d $a $val"; + } + return @ret; +} + ##################################### sub CommandSave($$) @@ -1432,7 +1474,7 @@ CommandSave($$) @structChangeHist = (); DoTrigger("global", "SAVE", 1); - my $ret = WriteStatefile(); + my $ret = WriteStatefile(); return $ret if($ret); $ret = ""; # cfgDB_SaveState may return undef @@ -1484,29 +1526,9 @@ CommandSave($$) next; } - if($d ne "global") { - my $def = $defs{$d}{DEF}; - if(defined($def)) { - $def =~ s/;/;;/g; - $def =~ s/\n/\\\n/g; - print $fh "define $d $defs{$d}{TYPE} $def\n"; - } else { - print $fh "define $d $defs{$d}{TYPE}\n"; - } - } + my @arr = GetDefAndAttr($d); + print $fh join("\n", @arr)."\n" if(@arr); - foreach my $a (sort { - return -1 if($a eq "userattr"); # userattr must be first - return 1 if($b eq "userattr"); - return $a cmp $b; - } keys %{$attr{$d}}) { - next if($d eq "global" && - ($a eq "configfile" || $a eq "version")); - my $val = $attr{$d}{$a}; - $val =~ s/;/;;/g; - $val =~ s/\n/\\\n/g; - print $fh "attr $d $a $val\n"; - } } print SFH "include $attr{global}{lastinclude}\n" @@ -2143,6 +2165,22 @@ CommandList($$) my ($cl, $param) = @_; my $str = ""; + if($param =~ m/^-r *(.*)$/) { + my $arg = ($1 ? $1 : ".*"); + foreach my $d (devspec2array($arg,$cl)) { + if(!defined($defs{$d})) { + $str .= "No device named $d found"; + last; + } + $str .= "\n" if($str); + my @a = GetDefAndAttr($d); + $str .= join("\n", @a)."\n" if(@a); + @a = GetAllReadings($d); + $str .= join("\n", @a)."\n" if(@a); + } + return $str; + } + if(!$param) { # List of all devices $str = "\nType list for detailed info.\n"; diff --git a/www/pgm2/fhemweb.js b/www/pgm2/fhemweb.js index 633bdb040..9c7163ca2 100644 --- a/www/pgm2/fhemweb.js +++ b/www/pgm2/fhemweb.js @@ -212,8 +212,8 @@ FW_jqueryReadyFn() FW_smallScreenCommands(); - FW_inlineModify(); + FW_rawDef(); } function @@ -583,6 +583,65 @@ FW_inlineModify() // Do not generate a new HTML page upon pressing modify }); } +function +FW_rawDef() +{ + $("div.rawDef a").each(function(){ // Help on detail window + var dev = FW_getLink(this).split(" ").pop(); + $(this).unbind("click"); + $(this).attr("href", "#"); // Desktop: show underlined Text + $(this).removeAttr("onclick"); + + $(this).click(function(evt){ + if($("#rawDef").length) { + $("#rawDef").remove(); + return; + } + + $("#content").append('
'+ + '