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.
Prinzipiell gut, aber warum nutzt Du DOIF?
Ist es nicht etwas mit "Kanonen auf Spatzen"? Gibt doch at?
Ansonsten "nett"
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
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}
Woebi ... könnte man damit nicht einen "Raum" füllen? So wird bei vielen Logfiles das Menü relativ groß ...
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 ;)
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. :)
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#