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...