FHEM Forum

FHEM => Automatisierung => Thema gestartet von: hanske am 21 Mai 2015, 12:39:25

Titel: Fake Logdatei mit Jahr und Monat pollen
Beitrag von: hanske am 21 Mai 2015, 12:39:25
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
Titel: Antw:Fake Logdatei mit Jahr und Monat pollen
Beitrag von: rudolfkoenig am 21 Mai 2015, 12:49:39
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.
Titel: Antw:Fake Logdatei mit Jahr und Monat pollen
Beitrag von: hanske am 21 Mai 2015, 13:29:39
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")}
Titel: Antw:Fake Logdatei mit Jahr und Monat pollen
Beitrag von: hanske am 22 Mai 2015, 09:53:02
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]);;
}



Titel: Antw:Fake Logdatei mit Jahr und Monat pollen
Beitrag von: hanske am 22 Mai 2015, 12:42:26
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.
Titel: Antw:Fake Logdatei mit Jahr und Monat pollen
Beitrag von: hanske am 10 Juni 2015, 09:41:40
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?
Titel: Antw:Fake Logdatei mit Jahr und Monat pollen
Beitrag von: rudolfkoenig am 10 Juni 2015, 10:20:16
Es wird Zeit, den FileLog commandref Eintrag mal wieder zu lesen.
Titel: Antw:Fake Logdatei mit Jahr und Monat pollen
Beitrag von: hanske am 11 Juni 2015, 09:07:47
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.