Fake Logdatei mit Jahr und Monat pollen

Begonnen von hanske, 21 Mai 2015, 12:39:25

Vorheriges Thema - Nächstes Thema

hanske

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
Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

rudolfkoenig

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.

hanske

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")}
Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

hanske

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]);;
}



Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

hanske

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.
Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

hanske

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?
Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte

rudolfkoenig

Es wird Zeit, den FileLog commandref Eintrag mal wieder zu lesen.

hanske

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.


Raspberry Pi (Wheezy), Aeon Labs Z-Wave USB Stick 2, HM-USB Adapter, EBUS 2.0 mit Wemos
diverse HM und Z-Wave Geräte