From 5c862301b4e6a7db6a1fc361203f0d485546427e Mon Sep 17 00:00:00 2001
From: rudolfkoenig <>
Date: Mon, 18 Feb 2019 08:14:24 +0000
Subject: [PATCH] 01_FHEMWEB.pm: extraRooms from justme1968 (Forum #97351)
git-svn-id: https://svn.fhem.de/fhem/trunk@18627 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/01_FHEMWEB.pm | 81 ++++++++++++++++++++++--------
fhem/docs/commandref_frame.html | 18 ++++++-
fhem/docs/commandref_frame_DE.html | 18 +++++++
3 files changed, 94 insertions(+), 23 deletions(-)
diff --git a/fhem/FHEM/01_FHEMWEB.pm b/fhem/FHEM/01_FHEMWEB.pm
index 3eaba5cfb..73d1afd06 100644
--- a/fhem/FHEM/01_FHEMWEB.pm
+++ b/fhem/FHEM/01_FHEMWEB.pm
@@ -108,6 +108,7 @@ my %FW_icons; # List of icons
my @FW_iconDirs; # Directory search order for icons
my $FW_RETTYPE; # image/png or the like
my %FW_rooms; # hash of all rooms
+my %FW_extraRooms; # hash of extra rooms
my @FW_roomsArr; # ordered list of rooms
my %FW_groups; # hash of all groups
my %FW_types; # device types, for sorting
@@ -167,6 +168,7 @@ FHEMWEB_Initialize($)
editFileList:textField-long
endPlotNow:1,0
endPlotToday:1,0
+ extraRooms:textField-long
forbiddenroom
fwcompress:0,1
hiddengroup
@@ -1253,6 +1255,19 @@ FW_updateHashes()
$FW_types{$d} = $t;
}
+ %FW_extraRooms = ();
+ if(my $extra = AttrVal($FW_wname, "extraRooms", undef)) {
+ foreach my $room (split(/ |\n/, $extra)) {
+ next if(!$room || $room =~ /^#/);
+ $room =~ m/name=([^:]+):devspec=([^\s]+)/;
+ my $r = $1;
+ my $d = "#devspec=$2";
+ $FW_rooms{$r}{$d} = 1;
+ $FW_extraRooms{$r} = $d;
+ }
+ }
+
+
$FW_room = AttrVal($FW_detail, "room", "Unsorted") if($FW_detail);
if(AttrVal($FW_wname, "sortRooms", "")) { # Slow!
@@ -1605,8 +1620,16 @@ FW_roomOverview($)
next if($r eq "hidden" || $FW_hiddenroom{$r});
$FW_room = AttrVal($FW_wname, "defaultRoom", $r)
if(!$FW_room && $FW_ss);
- push @list1, FW_htmlEscape($r);
- push @list2, "$FW_ME?room=".urlEncode($r);
+ if(my $devspec = $FW_extraRooms{$r}) {
+ my $r = $r;
+ $r =~ s/ / /g;
+ push @list1, FW_htmlEscape($r);
+ push @list2, "$FW_ME?room=".urlEncode($devspec);
+ } else {
+ push @list1, FW_htmlEscape($r);
+ push @list2, "$FW_ME?room=".urlEncode($r);
+ }
+
}
my $sfx = AttrVal("global", "language", "EN");
$sfx = ($sfx eq "EN" ? "" : "_$sfx");
@@ -1656,6 +1679,9 @@ FW_roomOverview($)
my $tblnr = 1;
my $roomEscaped = FW_htmlEscape($FW_room);
+ my $current;
+ $current = "$FW_ME?room=".urlEncode($FW_room) if($FW_room);
+ $current = "$FW_ME?cmd=".urlEncode($cmd) if($cmd);
foreach(my $idx = 0; $idx < @list1; $idx++) {
my ($l1, $l2) = ($list1[$idx], $list2[$idx]);
if(!$l1) {
@@ -1666,7 +1692,7 @@ FW_roomOverview($)
}
} else {
- FW_pF "
", $l1 eq $roomEscaped ? " class=\"sel\"" : "";
+ FW_pF "
", ($current && $current eq $l2) ? " class=\"sel\"" : "";
my $class = "menu_$l1";
$class =~ s/[^A-Z0-9]/_/gi;
@@ -2719,6 +2745,14 @@ FW_Attr(@)
}
}
+ if($attrName eq "extraRooms") {
+ foreach my $room (split(/ |\n/, $param[0])) {
+ next if(!$room || $room =~ /^#/);
+ return "Bad extraRooms entry $room, not name=:devspec="
+ if($room !~ m/name=([^:]+):devspec=([^\s]+)/);
+ }
+ }
+
if($attrName eq "longpoll" && $type eq "set" && $param[0] eq "websocket") {
return "$devName: Could not load Digest::SHA on startup, no websocket"
if(!$FW_use{sha});
@@ -3702,6 +3736,17 @@ FW_show($$)
+
+ extraRooms
+ Space or newline separated list of dynamic rooms to add to the room
+ list.
+ Example:
+ attr WEB extraRooms
+ name=open:devspec=contact=open.*
+ name=closed:devspec=contact=closed.*
+
+
+
forbiddenroom
just like hiddenroom (see below), but accessing the room or the
@@ -4124,15 +4169,6 @@ FW_show($$)
-
- show
-
- show [devspec]
-
- Show a temporary room with devices from <devspec>
- Note: this command is only available through the FHEMWEB interface
-
-
=end html
=begin html_DE
@@ -4431,6 +4467,17 @@ FW_show($$)
am aktuellen Tag, sonst wird die aktuelle Woche/Monat angezeigt.
+
+ extraRooms
+ Durch Leerzeichen oder Zeilenumbruch getrennte Liste von dynamischen
+ Räumen, die zusätzlich angezeigt werden sollen.
+ Beispiel:
+ attr WEB extraRooms
+ name=Offen:devspec=contact=open.*
+ name=Geschlossen:devspec=contact=closed.*
+
+
+
forbiddenroom
Wie hiddenroom, aber der Zugriff auf die Raum- oder Detailansicht
@@ -4854,16 +4901,6 @@ FW_show($$)
-
-
- show
-
- show [devspec]
-
- Zeigt einen temporären Raum mit dem Inhalt der <devspec>
- Achtung: dieser Befehl steht nur über das FHEMWEB Interface zur
- Verfügung.
-
=end html_DE
diff --git a/fhem/docs/commandref_frame.html b/fhem/docs/commandref_frame.html
index 22e8f0e69..e2949f6f6 100644
--- a/fhem/docs/commandref_frame.html
+++ b/fhem/docs/commandref_frame.html
@@ -67,7 +67,8 @@
setdefaultattr
setreading
setstate
- setuuid
+ setuuid
+ show
shutdown
sleep
trigger
@@ -1308,6 +1309,21 @@ The following local attributes are used by a wider range of devices:
+
+show
+
+ show <devspec>
+
+ show a temporary room with devices from <devspec>. The command ist only
+ available through FHEMWEB.
See the Device
+ specification section for details on <devspec>.
+
+ Example:
+
+
+
shutdown
diff --git a/fhem/docs/commandref_frame_DE.html b/fhem/docs/commandref_frame_DE.html
index 1f1137a53..68fcf678c 100644
--- a/fhem/docs/commandref_frame_DE.html
+++ b/fhem/docs/commandref_frame_DE.html
@@ -69,6 +69,7 @@
setreading
setstate
setuuid
+ show
shutdown
sleep
trigger
@@ -1391,6 +1392,23 @@ Die folgenden lokalen Attribute werden von mehreren Geräten verwendet:
+
+show
+
+ show <devspec>
+
+ Zeigt einen temporären Raum mit Geräten aus <devspec>,
+ verfügbar nur über FHEMWEB.
Siehe den Abschnitt über Geräte-Spezifikation für Details der
+ <devspec>.
+
+ Example:
+
+
+
+
shutdown