Autor Thema: configDb, FileWrite Fileread usw.  (Gelesen 581 mal)

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3838
configDb, FileWrite Fileread usw.
« am: 17 September 2020, 13:22:19 »
das Thema war heute mal wieder aktuell in https://forum.fhem.de/index.php/topic,114277.msg1085763.html#msg1085763
um dort nicht weiter OT zu werden konkret die Frage : wie erstelle ich eine Liste von Dateien wenn diese nicht direkt im Dateisystem liegen sondern in einer configDb ?

Kein Entwickler sollte jemals interne Funktionen der configDB.pm in seinen eigenen Modulen direkt verwenden und aufrufen. Die Freiheit, solche Funktionen umzubenennen oder deren Schnittstelle zu ändern, nehme ich mir jederzeit.

ok, kein Problem, allerdings mit dem Wissen wie man es nicht macht komme ich leider nicht weiter. Wie könnte dann eine richtige Lösung aussehen ?
Hier mal was ich heute habe um für FHEMWEB set/get die Dropdownliste zu befüllen :
sub MAX_FileList
{
    my $dir  = shift;
    my $file = shift // '';
    my @ret;
    my $found = (!$file) ? 1 : 0;

    if (configDBUsed()) {
        my @files = split(/\n/x, _cfgDB_Filelist('notitle'));
        foreach my $f (@files) {
            next if ( $f !~ m{\A $dir}xms);
            next if ( $f !~ m{\.max\z}xms);
            $f =~ s/$dir//x;
            $f =~ s/\.max//x;
            next if (!$f);
            $found = 1 if ($f eq $file);
            push @ret, $f;
        }
    }
    else {
        return 0 if (!opendir(DH,$dir));
        while(readdir(DH)) {
            next if ( $_ !~ m{\.max\z}xms);
            $_ =~ s/\.max//x;
            $found = 1 if ($_ eq $file);
            push @ret, $_ if ($_) ;
        }
        closedir(DH);
    }
    return @ret if ($found);
    return 0;
}

   
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 22944
Antw:configDb, FileWrite Fileread usw.
« Antwort #1 am: 17 September 2020, 14:51:41 »
Falls betateilchen eine "nicht-interne" Funktion nennt, kann ich gerne eine FileList Funktion bauen.

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16586
  • s/fhem\.cfg/configDB/g
Antw:configDb, FileWrite Fileread usw.
« Antwort #2 am: 19 September 2020, 10:45:41 »
Ich habe noch nicht genau verstanden, was Wzut da genau machen will, aber ich glaube, dass es schon Mechanismen in FHEMWEB geben könnte, die das Ansinnen out-of-the-box unterstüzen.

@Wzut: schreib mich doch mal per email an und erkläre mir, was Du genau machen möchtest.

Falls betateilchen eine "nicht-interne" Funktion nennt, kann ich gerne eine FileList Funktion bauen.

@Rudi: ich komme gerne auf das Angebot zurück. Ganz so einfach wie bei FileWrite() oder FileRead() ist das nicht, sonst hätte ich längst einen entsprechenden Vorschlag gemacht. Es wären bei FileList() durchaus ein paar Spezialfälle zu berücksichtigen, die Entscheidung anhand von configDBUsed() alleine reicht auf keinen Fall aus, um ein zuverlässig "richtiges" Ergebnis zu liefern.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3838
Antw:configDb, FileWrite Fileread usw.
« Antwort #3 am: 19 September 2020, 19:26:34 »
@Wzut: schreib mich doch mal per email an und erkläre mir, was Du genau machen möchtest.
Done, und für alle anderen : Habe ich mich so unklar ausgedrückt ? Ich will einfach eine Liste der aus dem Modul heraus gespeicherten configs von den MAX Geräten.
Das speichern macht heute FileWrite , das zurück lesen FileRead. In FHEMWEB bekommt der User eine Dropdown Liste welche Geräte bisher gesichert wurden und um diese Liste zu erstellen muss ich ja irgendwie feststellen welche Dateien vorhanden sind, genau das macht die oben gepostet sub.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16586
  • s/fhem\.cfg/configDB/g
Antw:configDb, FileWrite Fileread usw.
« Antwort #4 am: 19 September 2020, 20:41:25 »
um diese Liste zu erstellen muss ich ja irgendwie feststellen welche Dateien vorhanden sind, genau das macht die oben gepostet sub.

Genau das macht aber grundsätzlich auch die von FHEMWEB bereitgestellte Funktion FW_fileList() und dabei wird automagisch configDB mit verwurstet.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3838
Antw:configDb, FileWrite Fileread usw.
« Antwort #5 am: 20 September 2020, 09:04:32 »
na prima , dann werde ich das mal mit FW_fileList(%L/^.*max$) probieren :) 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3838
Antw:configDb, FileWrite Fileread usw.
« Antwort #6 am: 18 Oktober 2020, 17:32:54 »
ich muß das Thema leider nochmal hochholen :(
Ich hatte bei mir umgebaut auf
my @list = FW_fileList('%L/.*max');Klappt bei mir und den ersten Testern auch wunderbar, aber nun schlägt ein User auf bei dem die Liste leer ist, obwohl im Log Verzeichniss einige Dateien mit der Endung .max liegen.
D.h. doch das bei ihm ( warum auch immer ) %L nicht durch global logdir ersetzt wird ?

Der User ist allerdings für mich keine echte Referenz, da bei ihm die im MAX Modul ebenfalls genutzte sub Logdir() aus fhem.pl nicht gefunden wird.
Er brachte 10_MAX erst dann ans laufen nachdem wir testweise den Einzeiler direkt ins MAX Modul übernommen haben. 
Entweder ist das ne andere Baustelle oder es steht im direkten Zusammenhang mit dem %L Problem, so ganz durchschaue ich es noch nicht. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16586
  • s/fhem\.cfg/configDB/g
Antw:configDb, FileWrite Fileread usw.
« Antwort #7 am: 18 Oktober 2020, 20:48:31 »
aber nun schlägt ein User auf bei dem die Liste leer ist, obwohl im Log Verzeichniss einige Dateien mit der Endung .max liegen.
D.h. doch das bei ihm ( warum auch immer ) %L nicht durch global logdir ersetzt wird ?

Der User ist allerdings für mich keine echte Referenz, da bei ihm die im MAX Modul ebenfalls genutzte sub Logdir() aus fhem.pl nicht gefunden wird.

Die Funktion Logdir() gibt es in der fhem.pl erst seit Rev 21337, das war Anfang März diesen Jahres.
Deshalb tippe ich auf ein Altersproblem der eingesetzten FHEM Installation, lass Dir doch mal die Versionsstände nennen.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16586
  • s/fhem\.cfg/configDB/g
Antw:configDb, FileWrite Fileread usw.
« Antwort #8 am: 18 Oktober 2020, 21:04:14 »
Hier hast Du übrigens die Bestätigung für meine Vermutung:


Zitat
2020.10.11 16:30:28 0: Server started with 6 defined entities (fhem.pl:21056/2020-01-26 perl:5.028001 os:linux user:fhem pid:24150)

"Frisches" FHEM installiert, aber kein updates gemacht.

-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Lesen gefährdet die Unwissenheit!

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3838
Antw:configDb, FileWrite Fileread usw.
« Antwort #9 am: 19 Oktober 2020, 05:49:20 »
Danke Udo für die Unterstützung, hatte ich glatt übersehen. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher