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: +
        + show TYPE=CUL_HM
        +
      +
    +

    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: +
        + show TYPE=CUL_HM
        +
      +
    + +

    shutdown