Hallo,
ich möchte in einer Perl- Routine gerne den aktuellen Namen des Logfiles zu einem betimmten device ermitteln. Hat jemand einen heißen Tip für mich?
Gruß gevoo
[Lösung]:
Der Lösungsansatz bei Arbeit mit Filelog wurde von betateilchen http://forum.fhem.de/index.php/topic,24347.msg178266.html#msg178266 (http://forum.fhem.de/index.php/topic,24347.msg178266.html#msg178266) geliefert.
Oder man entscheidet sich zum Umstieg auf Dblog.
Das dürfte schwierig werden, denn ein device weiss überhaupt nicht, ob es ein Logfile gibt, in dem seine Daten gespeichert werden.
Hallo betateilchen,
vielen Dank für Deine Antwort. Die Definition des Logs sieht ja so aus:
define LogDevice FileLog ./log/Filename-%Y-%m.log irgendwas:Z:.*
Damit ist auf jeden Fall der LogDevice- Name bekannt. Kann man mit dessen Hilfe den Filename...
ermitteln?
Gruß gevoo
Zitat von: gevoo am 06 Juni 2014, 10:14:59
define LogDevice FileLog ./log/Filename-%Y-%m.log irgendwas:Z:.*
Damit ist auf jeden Fall der LogDevice- Name bekannt.
ich würde sagen du kannst es ausschließlich am regexp des Logfile-defines festmachen (wenn es nicht gerade *:.* ist).
in deinem beispiel würde das device "irgendwas" heißen.
wenn du also ein device hast und wissen willst ob es ein logfile dazu gibt müsstest du die regexp der logs nach [devicename] durchsuchen um das pasende log zu finden, dazu gehört nat. auch ein log das alles loged
Hallo chris1284,
ich will es einmal anders formulieren:
Ich benötige am 01. des Monats für Auswertungszwecke noch Daten aus der Logdatei des Vormonats. Dabei stoße ich auf folgendes Problem:
get GasTag_Log - - 2014-05-31 20:00:00 2014-05-31 24:00:00 4:::
liefert mir nicht die Daten vom 31.05. sondern:
2014-06-01_23:59:00 31404.797
2014-06-02_23:59:00 31407.557
2014-06-03_23:59:00 31410.397
2014-06-04_23:59:00 31413.257
2014-06-05_23:59:00 31415.707
bzw. wenn noch nichts im log von Juni steht, überhaupt kein Ergebnis.
Wie komme ich an die gewünschten Daten?
Gruß gevoo
Jahreslogs oder Dblog
Hallo,
du hast das Logfile falsch definiert.
Joachim hat dir ja schon den passenden Tipp gegeben.
Grüße
Hallo,
vielen Dank für Eure Tipps. Ich habe mich für Dblog entschieden. Jahreslog fällt aus, weil das unüberschaubar wird und sich überflüssige Daten nur im Handbetrieb löschen lassen. Dann hat Dblog noch einige geniale Nebeneffekte, wie ich erst nach der Installation festgestellt habe:
- ich verwende Mysql
- arbeitet sehr schnell
- Plots lassen sich von mehreren Devices in einem Plot super darstellen
- Monatsübergreifende Auswertungen sind kein Problem mehr
- überflüssige Daten lassen sich im Bulk leicht löschen
Wenns jemanden interresiert könnte ich mal eine Schnellanleitung für den Umstieg von "normal- Log" auf Dblog schreiben.
Gruß gevoo
Hallo,
kannst du machen.
Aber im Wiki unter Charting-Frontend ist zumindest für einen RasPi (klappt auch auf einem Cubieboard 2) und sqlite3 erklärt wie man dblog einrichtet.
Zumindest Punkt 3 und 4 aus deiner Aufzählung wurden hier schon einige Male genannt ;)
Aber deine Punkte waren auch für mich damals der Grund auf dblog umzustellen.
Grüße
Hallo Puschel74,
ja die Beschreibung habe ich gelesen. Das ist aber noch nicht alles. Das Umstellen der Trigger und der Plots usw. gehört meiner Meinung auch dazu.
Gruß
Hallo,
Plots ok - das hab ich dort nicht beschrieben.
Was meinst du mit trigger?
Wenn dblog mit .*:.* definiert wird loggt alles in die Datenbank.
Mit dem Device-Attribut DbLogExclude nehme ich Geräte raus die ich nicht in der DB brauche / haben will.
Klar kann man sich beim Define von dblog schon das regexp mit definieren.
Wenn aber später ein Gerät hinzu kommt muss evtl. immer das regexp angepasst werden.
Daher mein "Umweg" mit DbLogExclude.
Grüße
Hallo,
ich ermittle z.B. die absolute Feuchte durch Berechnung und logge diese Werte auch. Die lösen aber kein Event aus. Können also normalerweise nicht von selbst gelogt werden.
Deshalb kommt hier, jetzt nach Umstellung auf Dblog, setreading zum Einsatz. Vor der Umstellunjg war es Trigger.
Grüße
Zitat von: Puschel74 am 21 Juni 2014, 13:24:16
Wenn aber später ein Gerät hinzu kommt muss evtl. immer das regexp angepasst werden.
... oder du hast eine Namensstruktur, bei der das nicht nötig ist ;)
Hallo,
ich hab eine Namensstrukutue (wenn man das dazu sagen kann ;D ).
Ich habe aber im EG Sensoren die ich in der DB haben möchte.
Meine ganze Beleuchtung im EG will ich aber nicht in der DB haben.
Also habe ich mein dblog mit .*:.* angelegt und bei jedem Beleuchtungsaktor das Attribut gesetzt.
Genauso für die restlichen Geräte.
Klar könnte ich auch bei den Namen noch "feilen".
Das wurde mir aber dann zu "mühsam" und ich bin auf das Attribut umgestiegen.
Dafür ist es ja schliesslich das 8)
Zitat von: gevoo am 21 Juni 2014, 13:28:49
Hallo,
ich ermittle z.B. die absolute Feuchte durch Berechnung und logge diese Werte auch. Die lösen aber kein Event aus. Können also normalerweise nicht von selbst gelogt werden.
Deshalb kommt hier, jetzt nach Umstellung auf Dblog, setreading zum Einsatz. Vor der Umstellunjg war es Trigger.
Grüße
Ok.
Wobei ich bei meinen Sensoren auch die absolute Feuchte berechnen lasse.
Das löst aber anscheinend bei mir ein Event aus da ich diese Werte auch in der DB habe.
Ohne setreading oder trigger.
Ich muss gleich mal nachschauen ob das stimmt was ich da schreibe ???
Grüße
Um mal auf die Ausgangsfrage zurückzukommen:
Zitat von: gevoo am 06 Juni 2014, 08:52:58
ich möchte in einer Perl- Routine gerne den aktuellen Namen des Logfiles zu einem betimmten device ermitteln.
Mit "list TYPE=FileLog DEF" bekommt man eine Liste mit allen DEFs vom type FileLog.
Diese Liste (sie enthält pro Zeile zwei Werte: Den Namen und das DEF) kann man in ein Array lesen und dann mit foreach prüfen, ob das gesuchte Device im gerade bearbeiteten DEF vorkommt.
Hat man ein DEF gefunden, in dem das gewünschte device vorkommt, hat man die Aufgabe gelöst.
Hallo betateilchen,
danke für den Tipp. Das ist jetzt aber zu spät, da ich es jetzt schon mit Dblog gelöst habe.
Trotzdem Danke.
Gruß
Hallo,
dann wirf doch bitte dennoch dem Titel ein Gelöst vorne dran und beschreib kurz im ersten Beitrag wie du es gelöst hast.
Und zitier bitte noch betateilchens Lösung im ersten Beitrag.
Wenn mal jemand nach sowas sucht findet er wenigstens sofort die Lösung.
Danke.
Grüße