Logfile-Auflistung in FHEM

Begonnen von Vaddi, 06 Oktober 2018, 18:10:13

Vorheriges Thema - Nächstes Thema

Vaddi

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.
fhem auf RPi 3
HM-MOD-RPI-PCB sowie 433mhz Sender
Mehrere HM und 433mhz Produkte

Wernieman

Prinzipiell gut, aber warum nutzt Du DOIF?
Ist es nicht etwas mit "Kanonen auf Spatzen"? Gibt doch at?

Ansonsten "nett"
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Vaddi

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
fhem auf RPi 3
HM-MOD-RPI-PCB sowie 433mhz Sender
Mehrere HM und 433mhz Produkte

Damian

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}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Wernieman

Woebi ... könnte man damit nicht einen "Raum" füllen? So wird bei vielen Logfiles das Menü relativ groß ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Vaddi

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 ;)
fhem auf RPi 3
HM-MOD-RPI-PCB sowie 433mhz Sender
Mehrere HM und 433mhz Produkte

Damian

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. :)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Benni

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#