[gelöst] - Logfilename für ein bestimmtes device ermitteln

Begonnen von gevoo, 06 Juni 2014, 08:52:58

Vorheriges Thema - Nächstes Thema

gevoo

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 geliefert.
Oder man entscheidet sich zum Umstieg auf Dblog.

betateilchen

Das dürfte schwierig werden, denn ein device weiss überhaupt nicht, ob es ein Logfile gibt, in dem seine Daten gespeichert werden.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

gevoo

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

chris1284

#3
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

gevoo

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

Joachim

FHEM aktuellste Version auf FB 7570 und 7390 mit Zebradem Toolbox Freetz
FHEM auf Raspberry
1-Wire mit LinkUSBi und Rs-Pi ds2482-800  1-Wire-9 Board; Max mit Cube, HMLAN
div. 1-Wire Sensoren; MAX-Thermostaten; Homematic-Komponenten, Zehnder KWL über RS-232

Puschel74

Hallo,

du hast das Logfile falsch definiert.

Joachim hat dir ja schon den passenden Tipp gegeben.

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

gevoo

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

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

gevoo

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ß

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

gevoo

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

marvin78

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

Puschel74

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
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!