X_FW_detailFn($$$$) - Wie auf die Standard-Ansicht hin und herschalten

Begonnen von Sailor, 24 Februar 2026, 21:03:01

Vorheriges Thema - Nächstes Thema

Sailor

Ein herzerfrischendes Moin vom achtern Diek tosammen

Ich habe eine Frage:

Mit der Funktion in einem Modul "X_FW_detailFn($$$$)" kann man sich eine eigene Detail - Seite zusammenstricken.
Das funktioniert auch sehr gut!

Nun möchte ich per Attribut zwischen dem Fhem - Standard und meiner Version umschalten.

Frage a) Gibt es einen Trick wie man X_FW_detailFn($$$$) per Attribut / Befehl deaktivieren kann?
Frage b) Wenn a) = Nein, wie lautet der html - Code, der zurück gegeben werden muss, um die fhem Standard Anzeige zu darzustellen?

Ich habe mir ich der 01_FHEMWEB.pm einen Wolf gesucht aber nichts brauchbares gefunden.

Gruß und Danke vorab
    Sailor
******************************
Man wird immer besser...

DeeSPe

  $hash->{FW_deviceOverview} = 1;
  $hash->{FW_addDetailToSummary} = 1;

Damit lässt sich das steuern.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rudolfkoenig

Frage a) Gibt es einen Trick wie man X_FW_detailFn($$$$) per Attribut / Befehl deaktivieren kann?
Im AttrFn beim Setzen eines Attributes $modules{<TYPE>}{FW_detailFn} loeschen, und beim Entfernen (oder 0-Setzen) des Attributes wieder setzen.

$hash->{FW_deviceOverview} = 1;
Das bewirkt, dass die standard Darstellung des Geraetestatus in der Detailansicht auch dann erfolgt, wenn FW_DetailFn definiert ist.
Wenn FW_detailFn zusaetzlich undef zurueckliefert, dann ist das gleichwertig mit einem Modul ohne FW_detailFn (was die Detailansicht betrifft).


$hash->{FW_addDetailToSummary} = 1;Damit wird veranlasst, dass der Rueckgabewert von FW_detailFn in der Raumuebersicht zusaetzlich(!) zu der stadard Darstellung ausgegeben wird, falls der Rueckgabewert nicht undef ist.

Sailor

Moin tosammen

Ich habe mal ein wenig ausprobiert

Der Code
sub DepartureBnT_FW_detailFn($$$$) {
   my ($FW_wname, $devname, $room, $extPage) = @_;
   my $hash = $defs{$devname};
   my $name = $hash->{NAME};

   $hash->{FW_deviceOverview} = 1;
   return(undef);
}
führt dazu, dass schlichtweg nichts über dem set-Befehl angezeigt wird.


Den "$modules{X}{FW_detailFn}" zu löschen, führt dazu

Der Code
sub DepartureBnT_FW_detailFn($$$$) {
   my ($FW_wname, $devname, $room, $extPage) = @_;
   my $hash = $defs{$devname};
   my $name = $hash->{NAME};

   $modules{DepartureBnT}{FW_detailFn} = "";
   return(undef);
}

sowie

sub DepartureBnT_FW_detailFn($$$$) {
   my ($FW_wname, $devname, $room, $extPage) = @_;
   my $hash = $defs{$devname};
   my $name = $hash->{NAME};

   $hash{FW_detailFn} = "";
   return(undef);
}

führen zum gleichen Ergebnis.

Gruss
 Sailor
******************************
Man wird immer besser...

rudolfkoenig

Mein Vorschlag fuer die Aenderung war AttrFn, nicht DepartureBnT_FW_detailFn.

$modules{DepartureBnT}{FW_detailFn} muss gesetzt werden, $defs{$devname}{FW_detailFn} (aka $hash->{FW_detailFn}) interessiert niemanden.

Zu FW_deviceOverview=1: wenn gesetzt, dann kann man die zusaetzliche Anzeige der "standard" Darstellung mit dem Attribut deviceOverview steuern (siehe https://fhem.de/commandref_modular.html#FHEMWEB-attr-deviceOverview).
Muss auch als $modules{DepartureBnT}{FW_deviceOverview}=1 gesetzt werden.

Ich gehe davon aus, dass fuer die aktuelle Aufgabe FW_deviceOverview irrelevant ist.


Sailor

Hallo Rudi

Danke, wer lesen kann ist klar im Vorteil!  ;)

However, mit

sub DepartureBnT_Attr(@) {
  my @a                      = @_;
  my $name                   = $a[1];
  my $hash                   = $defs{$name};
 
  ### Check whether "ShowDetails" attribute has been provided
  elsif ($a[2] eq "ShowDetails")
  { 
      ### Log Entry for debugging purposes
      Log3 $name, 1, $name. " : DepartureBnT_Attr - ShowDetails              : " . $a[3];

      if ($a[3] eq "Fhem"){
        $modules{DepartureBnT}{FW_detailFn} = "";
      }
      elsif ($a[3] eq "Departure"){
         $modules{DepartureBnT}{FW_detailFn} = "DepartureBnT_FW_detailFn";
      }

      ### Update all Departures
      DepartureBnT_Update($hash);
   }
}

funktioniert es tatsächlich, allerdings werden dann alle Devices des gleichen TYPEs (DepartureBnT) umgeschaltet, unabhängig was im jeweiligen Attribut "ShowDetails" steht.

Mit anderen Worten: Ein klitzekleines bisschen über das Ziel herausgeschossen.
Wie kann ich dies auf eine Instanz begrenzen bzw. differenzieren.

Gruß
    Sailor
******************************
Man wird immer besser...

rudolfkoenig

ZitatMit anderen Worten: Ein klitzekleines bisschen über das Ziel herausgeschossen.
Naechster Vorschlag:
- FW_detailFn definieren und FW_deviceOverview setzen
- FW_detailFn liefert je nach ShowDetails Attribut den Inhalt oder undef zurueck.

Nebeneffekt: damit wird in der Detailansicht bei allen Instanzen von DepartureBnT immer erst die standard Anzeige angezeigt, und danach (wenn ShowDetails gesetzt) die modulspezifische Anzeige.
Der Benutzer kann das zwar mit dem deviceOverview FHEMWEB(!) Attribut uebersteuern, das gilt aber fuer alles, was ueber diese FHEMWEB-Instanz angezeigt wird.