Hallo,
kann man ein event für ein filelog auch zu bestimmten Zeiten erzeugen? Nett wäre eine Art event-on-date.
Use Case: Ich habe avg Werte mit dem Modul statistics erzeugt und möchte diese in ein Filelog schreiben. Es macht aber nur Sinn die Werte am Ende einer Periode zu loggen (z.B. Tageswerte täglich um 23:59 Uhr etc). Momentan mache ich das indem ich mit einem at um 23:59 Uhr den Wert in ein dummy schreibe und diesen dann mit event-on-change in ein filelog, aber das würde einfacher gehen mit einem event-on-date...
Ich verwende dafür addLog.
Welches Modul ist das? addLog finde ich nicht in der commandref.
addLog ist auch kein FHEM-Modul.
Im Wiki wirst du aber fündig. ;)
http://www.fhemwiki.de/wiki/Plot-Abriss_vermeiden (http://www.fhemwiki.de/wiki/Plot-Abriss_vermeiden)
ok, mit addlog kann ich log-einträge generieren. aber wie verhindere ich, dass er sonst keine logeinträge vornimmt? ich will ja nur zum ende der periode (z.b. täglich 23:59 uhr) loggen.
Das kannst du einfach mit einem eigenen Reading machen. Du erstellst dieses reading per setreading zu dieser Uhrzeit und lässt nur dieses loggen (Regex etc.).
Wow, das ist mal ne gute Idee. Da fällt mir auch gleich was ein, was ich damit lösen kann.
ok, das habe ich ja bisher genau so gemacht (nur mit dummy), aber ich hatte gehofft es gibt eine simplere lösung, da ich das häufiger brauche. würde ein neues attribut wie z.b. event-on-date nicht sinn machen?
oder besser ein event-at mit einer at-zeitangabe (z.b. *23:59)
Könnte man das mit dem Attribut event-min-interval und reading:86400 machen, wenn es um 23:59 gesetzt wird?
Warum nicht einfach ein at mit setreading? Das ist doch deutlich unkomplizierter.
ZitatDas kannst du einfach mit einem eigenen Reading machen. Du erstellst dieses reading per setreading zu dieser Uhrzeit und lässt nur dieses loggen (Regex etc.).
Ich habe das gleiche Problem. Kann mir jemand erklären, wie man das mit setreading genau macht? Ich möchte ja um 23:59 den aktuellen Wert verwenden und mit setreading kann ich ja nur einen eigenen Wert definieren, oder gibt es dafür eine mir nicht bekannte Lösung?
Hier ging es um einen dummy. Da kann man mit set oder setreading arbeiten. Ein reading kann man per setreading (siehe commandref) jederzeit setzen. Bei Hardware-Devices wäre ich da vorsichtig. Aber es ist ja kein Problem userReadings oder eigene Readings zusätzlich zu loggen. Dein Stichwort ist dann sicher noch ReadingsVal().
Hallo,
um mein Problem noch einmal zu erklären. Ich möchte täglich um 23:59:00 den Wert des Readings "rain_day" von meinem Device "Wetterstation" in mein dazugehöriges (oder von mir aus auch eigenes) Logfile schreiben.
Vermutlich ganz einfach aber ich habs leider nicht drauf :-(
Es geht doch nur darum, einen Event zu erzeugen, nicht um das Setzen eines readings...
define at_2359 at *23:59 { CommandTrigger(undef,"Wetterstation rain_day ".ReadingsVal('Wetterstation','rain_day',0)) }
DANKE!
Funktioniert perfekt. So, jetzt werde ich diese Zeile mal genau "untersuchen", damit ich sie letztendlich dann auch verstehe.
LG Karl
Das ist eigentlich ganz einfach erklärt. FHEM kennt einen Befehl "trigger" der genau das tut, was Du möchtest: einen bestimmten event erzeugen (siehe commandref oder "help trigger")
Die Funktion CommandTrigger() ist die interne Funktion, die dabei ausgeführt wird. Das muss man als Anwender nicht wissen, aber für mich als Entwickler war es die kürzeste Lösung für die gestellte Aufgabe, ohne perl und FHEM Befehl mischen zu müssen.
Hallo betateilchen,
danke für die Erklärung. Leider habe ich mit meiner Fragestellung das Pferd von hinten aufgezäumt :-( Was ich brauchen würde wäre, dass ich diesen Wert von 23:59 in ein eigenes, dafür neu erstelltes Logfile schreiben könnte. Nachdem ich nicht in der Lage bin diese "Profientwicklerversion" mangels Verständnis entsprechend umzuschreiben, würde ich dich bitten, mir eine, wie du sagst "perl Fhem gemischte Version" dafür zur Verfügung zu stellen. Vielleicht reicht mein Wissen dann aus diese Version zu verstehen und in Zukunft bei Bedarf auch entsprechend anzupassen und ggf. umzuschreiben.
LG Karl
Hallo Karl,
du brauchst doch jetzt nur noch ein FileLog-Device (http://commandref.fhem.de/#FileLog), das auf den erzeugten Event lauscht.
Also sowas hier:
define logRainDay FileLog ./log/logRainDay.log Wetterstation:rain_day.*
Wenn du wirklich nur einen Wert um 23:59 erzeugen willst kannst du den Trigger auch so anpassen , dass kein Event für ein tatsächliches Reading erzeugt wird, sondern ein beliebig benannter (hier mal der Vollständigkeit halber mit Vermischung von Perl und FHEM-Code):
define at_2359 at *23:59 { fhem('trigger Wetterstation mySpecialRainDayValue '.ReadingsVal('Wetterstation','rain_day',0)) }
Dann muss natürlich das FileLog entsprechend angepasst werden:
define logRainDay FileLog ./log/logRainDay.log Wetterstation:mySpecialRainDayValue.*
gb#
Herzlichen Dank, funktioniert wie ich das benötige und ich glaube diese Zeilen hab ich auch verstanden, da ich damit schon ein wenig experimentiert habe. Ich bin euch allen wirklich dankbar, dass ihr einen alten Herrn aus der Analog Ära unterstützt, denn für mich sind diese Dinge nicht immer ganz einfach zu verstehen.
LG Karl