Hallo Fhem-Gemeinde,
ich bin neu hier, habe schon einiges durch das Form gelernt und erfolgreich ausprobiert. So auch das einrichten der Mail-Funktion aus Fhem. Jetzt habe ich allerdings ein Problem mein tägliches Logfile mit aktuellem Datum als Anhang zu senden. Wie kann ich das Format -%d,-%m.log in den Anhang einbinden,dass jeden Tag die richtige Datei gesendet wird? ::)
Gruß
Kai
Der aktuelle Logfilename steht in "global" im Internal "currentlogfile", das kanst Du mit einer Funktion InternalVal abfragen, s. Commandref, Perl-Besonderheiten.
Hallo Ellert,
Ich glaube, ich habe mich schlecht ausgedrückt. Ich meinte, dass ich täglich einen Logfile mit Wetterdaten erstelle und diese Aufzeichnung automatisiert täglich einer Mail anhängen möchte. Das heisst,dass die Datei ./log/wetter-2016-02-18.log im Anhang ohne weiteres raus geht, aber eben die automatisierte Version ./log/wetter-%y-%m-%d.log nicht funktioniert. Ich bin aber nicht sehr fündig geworden und kenne mich ehrlich gesagt auch nicht besonders gut aus in Perl. In den Perl-Specials habe ich schon geschaut, kann da aber nichts erkennen,was mein Problem lösen würde. :-\
Gruss
Kai
Dann hast Du die Zeit und Datumsvariablen ($month, $year, ...) übersehen, die könntest Du nutzen.
In den Geräten vom Typ FileLog findest Du auch "currentlogfile".
Jetzt hab ich's kapiert.
Es funktioniert. Danke für den Hinweis.
Moin Kai,
ich möchte auch eine Log-Datei als Anlage per email versenden. Habe mich deshalb auch dankbar auf deinen Beitrag gestürzt.
Aber was soll ich sagen: Ich bekomme das nicht hin!
Wie hast Du letztendlich das Problem bei dir lösen können?
Bin über jeden Hinweis dankbar, eventuell teilst du netterweise deine Programmierung mit mir / uns.
Gruß Ulf
Wenn Du auch mitteilen würdest an welcher Stelle es hapert, dann könnte man Dir schneller/einfacher helfen ohne bei Adam und Eva anzufangen.
Hallo!
Ich grabe mal diesen alten Thread wieder aus, da ich genau gleiches Problem habe, jedoch die Lösung leider nicht konkret hinterlassen wurde, um's für mich ohne Frage auch selbst hin zu bekommen.
Ich hab einen Stromzähler einen Monats-Log gebastelt, den ich mir zum Monatswechsel per Mail automatisch zusenden lassen möchte.
Das Versenden von Mails funktioniert bereits problemlos - auch mit Anhängen.
In meiner Naivität hab ich es für den Monatslog auch erst mal mit %y und %m als "Wildcard" versucht, was ja nicht funktioniert.
Aktuell hab ich es so mit einem DOIF gemacht - was ja nicht funktioniert, aber verdeutlicht, was ich erreichen möchte:
([00:05] and $mday==1) ({DebianMail('<ZIELMAILADRESSE>','Monatsbericht','Monatsbericht','/opt/fhem/log/Monatsbericht-%Y-%m.log.txt)')})
Wie ich gesehen und verstanden habe, gibt's ja für das Logfile in internal "currentlogfile", das genau den aktuellen Logfile-Namen enthält - konkret steht da aktuell "./log/Monatsbericht-2019-11.log".
Das heisst doch, dass ich mir einen String, bestehend aus erstem Teil des Absolutpfades /opt/fhem/ und zweiten Teil aus Internal currentlogfile, zusammenbauen muss, das ich dann zusammen als Pfadangabe mitgeben muss - also sinngemäss "/opt/fhem/sprintf(ReadingsVal('FileLog_Monatsbericht','currentlogfile'))".
Nur scheitere ich bisher dran... >:(
Zitat von: parabacus am 04 November 2019, 15:10:35
Wie ich gesehen und verstanden habe, gibt's ja für das Logfile in internal "currentlogfile", das genau den aktuellen Logfile-Namen enthält - konkret steht da aktuell "./log/Monatsbericht-2019-11.log".
Das heisst doch, dass ich mir einen String, bestehend aus erstem Teil des Absolutpfades /opt/fhem/ und zweiten Teil aus Internal currentlogfile, zusammenbauen muss, das ich dann zusammen als Pfadangabe mitgeben muss - also sinngemäss "/opt/fhem/sprintf(ReadingsVal('FileLog_Monatsbericht','currentlogfile'))".
Nur scheitere ich bisher dran... >:(
Hallo,
hast du es mal nur mit dem Value von currentlogfile ausprobiert? Von FHEM aus, sollte es ja genau an der Stelle erreichbar sein.
Gruß
Stütti
So - ich komme der Sache näher.. ;D
Ich hab jetzt mittels at den Inhalt von currentlogfile auslesen können:
Damit ist zumindest schon mal der Inhalt von currentlogfile "./log/Monatsbericht-2019-11.log" in Reading Logfile da! ;D
Internals:
COMMAND setreading Monats_Log Logfile {(InternalVal("FileLog_Monatsbericht","currentlogfile","none"))}
DEF *21:10:00 setreading Monats_Log Logfile {(InternalVal("FileLog_Monatsbericht","currentlogfile","none"))}
FUUID 5dc08557-f33f-869f-b3cf-e0b1e857d6709d0b
NAME Monats_Log
NR 1328
PERIODIC yes
RELATIVE no
REP -1
STATE Next: 21:10:00
TIMESPEC 21:10:00
TRIGGERTIME 1572984600
TRIGGERTIME_FMT 2019-11-05 21:10:00
TYPE at
READINGS:
2019-11-04 21:10:00 Logfile ./log/Monatsbericht-2019-11.log
2019-11-04 21:10:00 state Next: 21:10:00
Attributes:
Dann müsste man doch das Reading Logfile mittels ReadingsVal("Monats_Log","Logfile","none") verwenden können.
Wie baue ich mir aber jetzt den erforderlichen Absolutpfad zusammen? Ich brauche ja /opt/fhem/log/Monatsbericht-2019-11.log
Ich muss wohl den Punkt aus dem String eliminieren und dann mit /opt/fhem/ verknüpfen!?
...wer eine gute Idee bis morgen hat, kann sie gerne hierlassen. ;) Ich bin froh heute soweit gekommen zu sein.
Hi,
warum gehst Du davon aus, dass der relative Pfad nicht brauchbar ist? Du willst doch die Datei einfach als Anhang, also mach es doch einfach so. Der relative Pfad wird ordentlich aufgelöst, keine Sorge. Ich habe es getestet :)
([00:05] and $mday==1) ({DebianMail('<ZIELMAILADRESSE>','Monatsbericht','Monatsbericht',ReadingsVal("Monats_Log","Logfile","none"))})
Wobei Du den Umweg nicht brauchst, Du kannst auch InternalVal("FileLog_Monatsbericht","currentlogfile","none") direkt verwenden.
([00:05] and $mday==1) ({DebianMail('<ZIELMAILADRESSE>','Monatsbericht','Monatsbericht',InternalVal("FileLog_Monatsbericht","currentlogfile","none"))})
Gruß Otto
Oh man... - der Lösung so nah und doch vorbei.... - ist ja klasse! So funktioniert's ja auch!!!
Da hab ich mich wohl irritieren lassen. Im anderen Fall, in dem ich mir eine Mail mit Anhang senden lasse, hab ich einen Absolutpfad verwendet. Daher dachte ich, dass ich das auch jetzt brauche. So gefällt mir das aber fast noch besser. ;D
Danke Otto...! Wieder mal was (von dir) gelernt!
Zitat von: parabacus am 04 November 2019, 22:01:55
Ich muss wohl den Punkt aus dem String eliminieren und dann mit /opt/fhem/ verknüpfen!?
Brauchst Du ja hier jetzt nicht, aber das ginge in der Art:
{my $var="./log/Monatsbericht-2019-11.log";;$var=~s/^.//;;return "/opt/fhem".$var}
Der Code ist jetzt nur zum schnellen Test in der FHEM Kommandozeile, die Funktion ist hier:
Lösche erstes Zeichen: $var=~s/^.//
"concatenation" Strings: "/opt/fhem".$var
..und nochmal danke - werde ich mir hoffentlich merken, da ich das ganz sicher irgendwann mal brauchen werde.
Am Löschen des ersten Zeichens hätte ich mir wohl noch lange die Zähne ausgebissen - zusammensetzten hätte ich schon geschafft. ;)