FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: Vaddi am 06 Oktober 2018, 18:10:13

Titel: Logfile-Auflistung in FHEM
Beitrag von: Vaddi am 06 Oktober 2018, 18:10:13
Hallo zusammen.
Ich habe mir eine kleine Logfileauflistung in Fhem gebaut, so kann
man sich schnell die Logfiles von den letzten Tagen anschauen.
Meine Logfiles werden täglich erstellt und für 5 Tage behalten.

Mit folgendem Code ist es möglich, entweder nur Logfiles anzeigen zu lassen,
welche fhem im Namen haben, oder aber alle Logfiles im Ordner /opt/fhem/log,
dafür muss die eine kommentierte Zeile auskommentiert und die andere genutzt
werden (eigentlich selbsterklärend)

sub ListLogfiles()
{
    my $menuentry = AttrVal("WEB","menuEntries","");
my $Verzeichnis = "/opt/fhem/log";

opendir(DIR, $Verzeichnis) or die $!;

my @array = grep(/.*fhem.*\.log$/,readdir(DIR)); #Nur .log Dateien mit fhem im Namen
#my @array = grep(/\.log$/,readdir(DIR)); #Alle .log Dateien

closedir(DIR) or die $!;

@array = sort @array;
my $logfilestring = "";
my @menuparts = split(",,,--------Logfiles--------,,",$menuentry);

foreach my $variable (@array)
{
    $logfilestring .= ",".$variable .",/fhem/FileLog_logWrapper?dev=Logfile&type=text&file=" . $variable;
}


if (@menuparts eq 0 || $menuparts[0] eq "" || (substr $menuparts[0],0,24) eq "--------Logfiles--------")
{
fhem("attr WEB menuEntries --------Logfiles--------,".$logfilestring)
}else{
fhem("attr WEB menuEntries ".$menuparts[0].",,,--------Logfiles--------,".$logfilestring)
}

Log 1, ("Logfileanzeige wurde aktualisiert");

}


Anschließend habe ich mir noch ein DOIF erstellt, welches obige Funktion jede Nacht um 00:05 Uhr
aufruft.
defmod DOIF_ListLogfiles DOIF ([00:05]) ({ListLogfiles()})
attr DOIF_ListLogfiles do always


Das ganze ist natürlich nicht für jeden geeignet, kommt ganz darauf an, wie viele Logfiles sich im entsprechenden Ordner
befinden.
Das ganze nutzt das Attribut menuEntries vom WEB Device, eure bisherigen Einträge bleiben unberührt, da mein
Code am Ende angefügt wird.
Titel: Antw:Logfile-Auflistung in FHEM
Beitrag von: Wernieman am 06 Oktober 2018, 18:53:28
Prinzipiell gut, aber warum nutzt Du DOIF?
Ist es nicht etwas mit "Kanonen auf Spatzen"? Gibt doch at?

Ansonsten "nett"
Titel: Antw:Logfile-Auflistung in FHEM
Beitrag von: Vaddi am 06 Oktober 2018, 19:12:21
Du hast vollkommen recht. Ich habe das vor Wochen erstellt, aber
warum ich dort DOIF genommen habe anstatt nen AT, kann
ich dir beim besten Willen nicht mehr sagen xD
Titel: Antw:Logfile-Auflistung in FHEM
Beitrag von: Damian am 06 Oktober 2018, 19:55:53
Zitat von: Vaddi am 06 Oktober 2018, 19:12:21
Du hast vollkommen recht. Ich habe das vor Wochen erstellt, aber
warum ich dort DOIF genommen habe anstatt nen AT, kann
ich dir beim besten Willen nicht mehr sagen xD

Man könnte auch die Frage stellen, warum hast du nicht alles in ein Modul gepackt ;)

defmod di_log DOIF subs {\
sub ListLogfiles()\
{\
    my $menuentry = AttrVal("WEB","menuEntries","");;\
my $Verzeichnis = "/opt/fhem/log";;\
\
opendir(DIR, $Verzeichnis) or die $!;;\
\
my @array = grep(/.*fhem.*\.log$/,readdir(DIR));; #Nur .log Dateien mit fhem im Namen\
#my @array = grep(/\.log$/,readdir(DIR));; #Alle .log Dateien\
\
closedir(DIR) or die $!;;\
\
@array = sort @array;;\
my $logfilestring = "";;\
my @menuparts = split(",,,--------Logfiles--------,,",$menuentry);;\
\
foreach my $variable (@array)\
{\
    $logfilestring .= ",".$variable .",/fhem/FileLog_logWrapper?dev=Logfile&type=text&file=" . $variable;;\
}\
\
\
if (@menuparts eq 0 || $menuparts[0] eq "" || (substr $menuparts[0],0,24) eq "--------Logfiles--------")\
{\
fhem("attr WEB menuEntries --------Logfiles--------,".$logfilestring)\
}else{\
fhem("attr WEB menuEntries ".$menuparts[0].",,,--------Logfiles--------,".$logfilestring)\
}\
\
Log 1, ("Logfileanzeige wurde aktualisiert");;\
\
}\
}\
{[00:05];;ListLogfiles}
Titel: Antw:Logfile-Auflistung in FHEM
Beitrag von: Wernieman am 06 Oktober 2018, 19:59:40
Woebi ... könnte man damit nicht einen "Raum" füllen? So wird bei vielen Logfiles das Menü relativ groß ...
Titel: Antw:Logfile-Auflistung in FHEM
Beitrag von: Vaddi am 06 Oktober 2018, 21:19:08
Zitat von: Damian am 06 Oktober 2018, 19:55:53
Man könnte auch die Frage stellen, warum hast du nicht alles in ein Modul gepackt ;)
Weil dafür mein Wissen in der ganzen Fhem-Thematik noch nicht weit genug Fortgeschritten ist ;)
Titel: Antw:Logfile-Auflistung in FHEM
Beitrag von: Damian am 06 Oktober 2018, 21:25:09
Zitat von: Vaddi am 06 Oktober 2018, 21:19:08
Weil dafür mein Wissen in der ganzen Fhem-Thematik noch nicht weit genug Fortgeschritten ist ;)

Immerhin kennst du dich mit Perl offenbar schon ganz gut aus, der Rest sind paar Ereignis- bzw. Zeittrigger, die deinen Code ausführen, das dürfte für einen Programmierer auch kein Problem sein. :)
Titel: Antw:Logfile-Auflistung in FHEM
Beitrag von: Benni am 06 Oktober 2018, 21:34:03
Wenn ich mir das Standard-Logfile-Device (NAME=Logfile) anzeigen lasse, habe ich genau diese Auflistung doch automatisch gleich im Device mit drin, das brauche ich doch eigentlich nicht im Menü.

gb#