[PATCH] Dynamische Titel für FHEMWEB

Begonnen von MarcelK, 03 Februar 2016, 15:57:06

Vorheriges Thema - Nächstes Thema

MarcelK

Wenn ich was an FHEM bastle dann tendiere ich dazu viele Tabs gleichzeitig aufzumachen, nur hab ich dann das Problem dass alle immer gleich heissen und ich nix mehr finde:

(http://forum.fhem.de/index.php?action=dlattach;topic=48668.0;attach=45606;image)

Meine Idee ist hier ein minimal-invasiver Patch, der die bei FHEM gebräuchliche "Dinge in geschweiften Klammern sind Code" Maxime auf das globale Title Attribut erweitert:


   my $t = AttrVal("global", "title", "Home, Sweet Home");
+  if ($t =~ m/^{.*}$/s) {
+    $t = eval $t;
+  }


Dann kann ich das Attribut z.B. auf "{WebTitle()}" setzen und folgene Funktion in die 99_MyUtils pflanzen:


use vars qw($FW_detail);
use vars qw($FW_room);
use vars qw(%FW_webArgs);

sub WebTitle()
{
  my $t = "";

  if ($FW_detail) {
    $t = "Detail: $FW_detail";
  } elsif ($FW_room) {
    $t = "Room: $FW_room";
  } elsif (defined $FW_webArgs{cmd}) {
    if ($FW_webArgs{cmd} =~ m/style edit (.*)/s) {
      $t = "Edit: $1";
    } elsif ($FW_webArgs{cmd} =~ m/style save (.*)/s) {
      $t = "Saved: $1";
    } elsif ($FW_webArgs{cmd} =~ m/style list.*/s) {
      $t = "File list";
    } elsif ($FW_webArgs{cmd} =~ m/style eventMonitor.*/s) {
      $t = "Event monitor";
    } else {
      $t = $FW_webArgs{cmd};
    }
  } elsif (defined $FW_webArgs{file}) {
    $t = "Log: $FW_webArgs{file}";
  } elsif (%FW_webArgs && ((keys %FW_webArgs)[0] =~ m#dashboard/(.*)#s)) {
    $t = $1;
  } else {
    $t = "Home";
  }
  return $t;
}


Ergebnis:
(http://forum.fhem.de/index.php?action=dlattach;topic=48668.0;attach=45608;image)

Kommentare dazu? Falls angenommen kann ich das so auch gerne in der CommandRef bzw. im Wiki dokumentieren.

Besten Gruß, Marcel

Edit: WebTitle(): Besserer Support für log files
Edit: WebTitle(): Perl warning und shutdown restart Problem beseitigt
Edit: WebTitle(): "Event monitor" hinzugefügt

rudolfkoenig

Habs uebernommen, kurz getestet, dokumentiert und eingecheckt.
Bei der Aenderung habe ich ein FHEMWEB eigenes title spendiert, was vor dem global Vorrang hat.

MarcelK

Wow, prompter Service, vielen lieben Dank!

Markus M.

Funktioniert, finde ich sehr sinnvoll.
Danke!
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

Icinger

Funktioniert grundsätzlich super, finde ich auch sehr toll, ABER:

Die 99_myUtils wird scheinbar zu früh eingebunden, kann das sein?
Bei einem shutdown restart wird die dann deaktiviert:
2016.02.04 11:18:08 0: Server shutdown
2016.02.04 11:18:10 1: reload: Error:Modul 99_myUtils deactivated:
Global symbol "$FW_detail" requires explicit package name at ./FHEM/99_myUtils.pm line 45.
Global symbol "$FW_detail" requires explicit package name at ./FHEM/99_myUtils.pm line 46.
Global symbol "$FW_room" requires explicit package name at ./FHEM/99_myUtils.pm line 47.
Global symbol "$FW_room" requires explicit package name at ./FHEM/99_myUtils.pm line 48.

2016.02.04 11:18:10 1: Including fhem.cfg
Subroutine myUtils_Initialize redefined at ./FHEM/99_myUtils.pm line 34, <$fh> line 9.
2016.02.04 11:18:10 1: reload: Error:Modul 99_myUtils deactivated:
Global symbol "$FW_detail" requires explicit package name at ./FHEM/99_myUtils.pm line 45, <$fh> line 9.
Global symbol "$FW_detail" requires explicit package name at ./FHEM/99_myUtils.pm line 46, <$fh> line 9.
Global symbol "$FW_room" requires explicit package name at ./FHEM/99_myUtils.pm line 47, <$fh> line 9.
Global symbol "$FW_room" requires explicit package name at ./FHEM/99_myUtils.pm line 48, <$fh> line 9.

2016.02.04 11:18:10 3: telnetPort: port 7072 opened
2016.02.04 11:18:10 3: WEB: port 8083 opened
2016.02.04 11:18:10 3: WEBphone: port 8084 opened
2016.02.04 11:18:10 3: WEBtablet: port 8085 opened
2016.02.04 11:18:11 2: eventTypes: loaded 5023 events from ./log/eventTypes.txt
2016.02.04 11:18:11 1: HMLAN_Parse: HM1 new condition disconnected
2016.02.04 11:18:11 3: Opening HM1 device 192.168.1.17:1000


Sobald ich nach dem Restart einmal auf "Edit files...." gehe und 99_myUtils.pm" öffne und wieder speichere, läufts ohne Probleme durch.

Irgendjemand ne Idee, wie man das umgehen kann?

lg, Stefan
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

MarcelK

Zitat von: Icinger am 04 Februar 2016, 11:25:52
Funktioniert grundsätzlich super, finde ich auch sehr toll, ABER:

Die 99_myUtils wird scheinbar zu früh eingebunden, kann das sein?
Bei einem shutdown restart wird die dann deaktiviert:
Ah tatsächlich. Weiß nicht ob's da noch ne bessere Lösung gibt, aber ich schalte "strict" jetzt in meinem Beispiel oben vor der Funktion aus, das behebt das Problem hier. Hab gleichzeitig auch noch ein paar Warnings beseitigt.

Gruß Marcel

justme1968

use vars qw($FW_detail);
use vars qw($FW_room);

sollte helfen.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

MarcelK

Zitat von: justme1968 am 04 Februar 2016, 18:21:19
use vars qw($FW_detail);
use vars qw($FW_room);

sollte helfen.
Ah, das gefällt mir viel besser, danke. Code angepasst.

Gruß Marcel

dirkbalzer

Ah super genau sowas habe ich noch gesucht!
Bei mir gibt es nach dem Neustart allerdings immer noch eine Warnung in der Logdatei:
2016.02.04 20:53:32 1: PERL WARNING: Use of uninitialized value in pattern match (m//) at ./FHEM/99_myUtils.pm line 81.

Die Zeile 81 meiner 99_myUtils entspricht dieser aus dem Script im ersten Post:
  } elsif (((keys %FW_webArgs)[0]) =~ m#dashboard/(.*)#s) {
Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

MarcelK

Zitat von: dirkbalzer am 04 Februar 2016, 21:01:30
Ah super genau sowas habe ich noch gesucht!
Bei mir gibt es nach dem Neustart allerdings immer noch eine Warnung in der Logdatei:
Danke, ich hab den Code aktualisiert.

Gruß Marcel

Markus

Raspberry Pi2 als FHEM-Plattform
HM, FS20, 1-Wire, PanStamp,LW12,Intertechno,ESPEasy,Alexa

P-terrible

Ganz ohne 99_MyUtils funktioniert auch

attr WEB title { if ($FW_detail) { $FW_detail } else { $FW_room } }

Fixel2012

Zitat von: P-terrible am 06 August 2017, 21:27:16
Ganz ohne 99_MyUtils funktioniert auch

attr WEB title { if ($FW_detail) { $FW_detail } else { $FW_room } }

Nette Sache. Nachteil ist allerdings, dass der Event Monitor Beispielsweise nicht angezeigt wird. Das ist in dem 99_MyUtils Code im Gegensatz der Fall.
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

nicor2k

Moin!

Ich habe den Code aus Antwort 11 mal ergänzt und eine kleine Kurz-Anleitung dazu geschrieben:
https://www.computerhilfen.de/info/fhem-raum-name-infos-im-browser-titel-zeigen-statt-home-sweet-home.html

Mit diesem Wert für den Title wird entweder der Name des Raumes angezeigt oder das Device - oder Alternative wieder "Home, Sweet Home":

{ if($FW_room) { "FHEM: $FW_room" } elsif($FW_detail) { "FHEM: $FW_detail" } else { "Home, Sweet Home" } }

Das lässt sich jetzt natürlich noch mit weiteren elsifs erweitern, wenn man noch mehr Variablen aus dem ersten Post hier übernehmen und abfragen möchte!

justme1968

wäre das im wiki nicht besser aufgehoben als auf einer 'fremden' webseite?

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968