Ich hatte im Forum eine Möglichkeit gefunden meine eigenen (externen) Logdateien zu pollen.
Es funktioniert auch super so:
+*00:01 {
my @a = split(" ", `tail -1 ./log/solar_2015-05.log`);;
fhem("set dm_Solar ".$a[2]);;
}
Leider muss Jahr und Monat dynamisch angepasst werden.
Ich hatte es mit %Y und strftime("%Y",localtime) versucht.
Es funktioniert aber nicht.
Mein letzter Versuch war:
+*00:01 {
my @a = split(" ", `tail -1 ./log/solar_`.strftime("%Y",localtime).`-`.strftime("%m",localtime).`.log`);;
fhem("set dm_Solar ".$a[2]);;\
}
Wie kann ich den Logdateinamen dynamisch erstellen?
Danke
Schau dir mal ResolveDateWildcards() in fhem.pl an.
Ich vermute, dass der direkte Aufruf von localtime in strftime nicht funktioniert, da localtime je nach Umgebung ein String oder ein Array zurueckliefert.
Hallo,
ich glaube es liegt generell am Concatenaten in diesem Apostrophstring.
Selbst
{(split(" ", `tail -1 ./log/solar_`."2015".`-05.log`))[2]}
funktioniert schon nicht.
Ich hatte auch noch probiert tail() direkt aufzurufen um das Problem zu entzerren, ist aber nicht implementiert
{tail("--lines=1","./log/solar_2015-05.log")}
Ich habe es jetzt so gedacht zu lösen:
{
my @a = "./log/solar_".strftime("%Y",localtime)."-".strftime("%m",localtime).".log";;
my @b = (split(" ", `tail -1 @a`));;
}
Es funktioniert auch in der FHEM Commandozeile.
Wenn ich es aber in den Timer einbaue bekomme ich immer die Meldung:
at_pollSolar: Unknown command {, try help.
Es liegt wahrscheinlich an den nicht escapeten Steuerzeichen '@' und '%', oder?
Folgendes geht aber leider auch nicht im Timercontext:
{ my @a = "./log/solar_".strftime("%%Y",localtime)."-".strftime("%%m",localtime).".log";;
my @b = (split(" ", `tail -1 @@a`));;
fhem("set dm_Solar ".$a[2]);;
}
so funktioniert es jetzt:
+*00:01 {
my @a = "./log/solar_".strftime("%Y",localtime)."-".strftime("%m",localtime).".log";;
my @b = split(" ", `tail -1 @a`);;
fhem("set dm_Solar ".$b[2]);;
}
aber eigentlich hat sich zu meinem ersten Versuch nichts geändert.
Vielleicht waren Zeilenumbrüche oder Leerzeichen schuld.
Nach ein kleiner Hinweis zum Fakelog:
Nach einem Neustart von Fhem funktionierte das Polling aus meinem externen Log noch, aber das Fakelog nicht mehr:
Can't open ./log//solar_2015-06.log: Permission denied
Offensichtlich benötigt das Fakelog Schreibrechte auf dem externen Log, das Polling aber nicht.
Kann man vielleicht mal ändern, schreiben soll das Fakelog ja nicht, oder?
Es wird Zeit, den FileLog commandref Eintrag mal wieder zu lesen.
Hatte ich sogar gemacht und verzweifelt nach dem Begriff "fakelog" gesucht, der mir entfallen war und leider nach dem Neustart von FHEM auch aus meiner cfg Datei gelöscht wurde, weil die externe Logdatei inzwischen nur noch Leserechte hatte.
Ich hätte erwartet, das fakelogs per se schon readonly sind.
Aber danke für den Hinweis auf das "readonly" Attribut für Logs.
Das sollte helfen.