Schönen Sonntag zusammen,
nach längerer Suche im Forum als auch dem Einsteiger PDF und auch Onkel Google bin ich nicht wirklich fündig geworden.
Ich würde gerne meine FileLogs in ein DBLog umstellen.
So wie es aussieht macht FHEM beim FileLog für jede Komponente ein eigenes FileLog.
Wie handhabt ihr das denn so mit dem DbLog?
Macht ihr da nur einen einzigen Eintrag in die Config, wo dann sämtliche Devices/Events oder was auch immer geloggt wird?
Oder legt ihr ähnlich dem FHEM Standard mehrere DBLogs an, wo dann die einzelnen Komponenten definiert loggen können?
Letzendlich landet es ja doch in der gleichen DB.
Oder macht ihr u.U. auch noch mehrere Configs, wo auch mehrere Datenbanken zugreift?
Quasi bin ich auf der Suche nach der Best Practice. :)
der eigentliche vorteil von dblog ist ja gerade alles zusammen in einem log zu haben und z.b. plots über beliebige devices zu kombinieren.
gruss
andre
Zitat von: justme1968 am 05 Januar 2014, 11:37:24
der eigentliche vorteil von dblog ist ja gerade alles zusammen in einem log zu haben...
..und mit einem einzigen SQL-Statement regelmäßig "aufräumen" zu können ... zB alle Einträge älter 30 Tage löschen
define DBlog.DeleteOldData at *00:05:00 {`mysql --host=192.168.xxx.xxx --user=xxx --password=xxx <dbname> -e "delete from history where now()-TIMESTAMP > 102000000;"`}
Okay, ich habe das nun mal umgestellt.
Aber wie errechnet sich denn die 102000000 da hinten im SQL Statement für 30 Tage?
Irgendwie kann ich da hin und her rechnen, komme da aber nicht drauf.
30 Tage * 24 Stunden * 60 Minuten * 60 Sekunden = 2592000 Sekunden
Irgendwo habe ich gelesen, dass anstatt 60 Sekunden pro Minute 100 Sekunden pro Minute bei SQL angesetzt werden, dann wäre ich aber bei
30 Tage * 24 Stunden * 60 Minuten * 100 Sekunden = 4320000 Sekunden
(http://www.smiley-paradies.de/smileys/denkend/denkend_0006.gif)
Zitat von: maxritti am 05 Januar 2014, 21:25:20
Aber wie errechnet sich denn die 102000000 da hinten im SQL Statement für 30 Tage?
Irgendwie kann ich da hin und her rechnen, komme da aber nicht drauf.
Stimmt, ich hatte es nur blind kopiert und es passte auch nicht wirklich - keine Ahnung wie sich die Zahl der Differenz errechnet.
Hier die "saubere" Lösung für mysql:
define DbLog.DeleteOldData at *00:05:00 {`mysql --host=<ip-adresse> --user=<user> --password=<pass> <dbname> -e "DELETE FROM history WHERE TIMESTAMP < DATE_SUB(NOW(),INTERVAL 31 DAY);"`}
Nachtrag:
Ein
SELECT NOW()-DATE_SUB(NOW(),INTERVAL 1 DAY) liefert 1000000 zurück - also ist 1 Tag = 1000000 ... mit Sekunden oder so hat das nichts zu tun.
Heute morgen ist es wohl noch ein wenig früh.
DbLog muss ich doch bestimmt durch mein Objekt ersetzen, so wie ich DbLog bei mir definiert habe oder?
Ist aber eigentlich auch egal, denn sowohl bei
define DbLog.DeleteOldData at *00:05:00 {`mysql --host=<ip-adresse> --user=<user> --password=<pass> <dbname> -e "DELETE FROM history WHERE TIMESTAMP < DATE_SUB(NOW(),INTERVAL 31 DAY);"`}
oder
define myDbLog.DeleteOldData at *00:05:00 {`mysql --host=<ip-adresse> --user=<user> --password=<pass> <dbname> -e "DELETE FROM history WHERE TIMESTAMP < DATE_SUB(NOW(),INTERVAL 31 DAY);"`}
natürlich nach Ersetzungen von ip-adresse use quitiert mit fhem das so, obwohl es ein DBLog gibt.
Zitat von: maxritti am 06 Januar 2014, 07:25:13
DbLog muss ich doch bestimmt durch mein Objekt ersetzen, so wie ich DbLog bei mir definiert habe oder?
Es wird ein
at definiert welches ein Systemcommand ausführt (innerhalb der Backticks) - wie du das nennst ist egal, mit der Definition deines DBLog hat es auch nichts zu tun - ob es DbLog.DeleteOldData oder Liegestuhl heisst ist dabei egal ;-)
Er mag aber nicht das Semikolon innerhalb des Commands - kann man auch weglassen.
define myDbLog.DeleteOldData at *00:05:00 {`mysql --host=<ip-adresse> --user=<user> --password=<pass> <dbname> -e "DELETE FROM history WHERE TIMESTAMP < DATE_SUB(NOW(),INTERVAL 31 DAY)"`}
Okay, jetzt habe ich es.
Danke Dir und noch einen schönen Tag.
Hallo roedert,
wie müsste denn diese Zeile:
Zitatdefine myDbLog.DeleteOldData at *00:05:00 {`mysql --host=<ip-adresse> --user=<user> --password=<pass> <dbname> -e "DELETE FROM history WHERE TIMESTAMP < DATE_SUB(NOW(),INTERVAL 31 DAY)"`}
für eine sqlite3 DB aussehen?
Danke & Gruß
Thomas
Könnte das funktionieren?
define DbLog.DeleteOldData at *00:03:00 {`sqlite3 /opt/fhem/fhem.db "DELETE FROM history WHERE TIMESTAMP < datetime('now','6 month');"`}
das geht doch viel einfacher und mit fhem Bordmitteln:
set <dblogName> deleteOldDays 30
wie wäre es denn mal mit Lesen der commandref?
(http://up.picr.de/19204092ls.jpg)
Na prima, danke für den Hinweis. :)
Ich muss dieses Thema einmal aufgreifen.. ich bin auch auf Datenbank-LOG umgestiegen und das mit dem aufräumen finde ich eine gute Idee.
Nur möchte ich bspw. die Temperaturwerte oder Stromverbrauch für einen sehr langen Zeitraum auswerten können, andere Einträge in den Logs könnten gerne regelmässig gelöscht werden.
Wie geht Ihr in diesem Fall denn vor? Oder habe ich mal wieder eine verworrene Idee?
Gibt es eigentlich auch die Möglichkeit, eine weitere Datenbank anzusprechen? Ich würde gerne die Daten parallel auf meinem root-Server speichern und dann dort gewisse Auswertungen auf einer Webseite präsentieren. Ich habe schon den Thread mit dem rss gelesen, würde aber gerne eine Datenbank beliefern.
Aktuell schaut es so aus, dass ich fhem auf meinem Raspberry Pi2 laufen habe und die Datenbank auf meiner lokalen Synology.
Gruß aus dem hohen Norden
Sven
Hi, ich stehe gerade vor der selben Frage. Da mir das deleteOldDays zu rigoros erscheint, habe ich auf der Synology direkt in der MariaDB ein tägliches Event eingeplant, welches festgelegte Devices löscht. Du musst aber höchstwahrscheinlich auch in der my.cnf vorher folgendes eintragen:
SET GLOBAL event_scheduler = ON;
Im Event:
delete from history where device like 'iPhone%' or device like 'Sauna%' or ...
VG
F.
Hallo,
@SventeHof: hab momentan noch FHEM auf meiner Syno und auf einer Raspi laufen. Wollte erst die NAS als Hauptserver laufen lassen, hab aber jetzt die Idee aufgegriffen alles auf der Raspi laufen zu lassen und den RS485 Adapter auf der NAS nur per ser2net anzusprechen.
Die Raspi läuft mit read only Filesystem mit /var/log var/temp/ als tempfs und und ich dachte ich mounte einfach die NAS für den /fhem/log Folder.
Wird bei deinem Setup mit der DB auf der NAS noch irgendwas auf der NAS geschrieben oder könnte ich so die Raspi im read only modus betreiben?
Lg,
Andi
Um auf die Eingangsfrage zurückzukommen:
Bei mir gibt es ein einziges DbLog, in dem all das geloggt wird, was ich für nötig halte. Das Log wird jede Nacht reorganisiert.
Zusätzliche FileLogs lege ich nur temporär an, wenn ich das für Debugging-Zwecke eines bestimmten Devices brauche.
Zitat von: betateilchen am 07 Februar 2016, 16:46:20
Bei mir gibt es ein einziges DbLog, in dem all das geloggt wird, was ich für nötig halte. Das Log wird jede Nacht reorganisiert.
Mich treibt die Neugier: Was genau passiert denn beim Reorganisieren? Ist das mehr als alte Log-Einträge zu löschen und wie setzt du es konkret um (cron-Job)?
Zitat von: crispyduck am 07 Februar 2016, 15:53:42
Die Raspi läuft mit read only Filesystem mit /var/log var/temp/ als tempfs und und ich dachte ich mounte einfach die NAS für den /fhem/log Folder.
Dieselbe Überlegung hatte ich auch, um die sdcarte des Raspberry nicht unnötig mit dem Logging zu stressen (weil das Dateisystem ja nach Murphy direkt zu Beginn eines mehrwöchigen Urlaubs kaputt geht, nachdem jahrelang alles problemlos lief)...
Aber: Was passiert, wenn die NAS bzw. der Fileserver nicht erreichbar ist? Wenn das dblog auf einer externen Datenbank läuft, die nicht erreichbar ist, scheint es jedenfalls Probleme zu geben, siehe hier (http://forum.fhem.de/index.php/topic,44031.0.html).
Danke für den Hinweis!
Der Patch von Hausautomat schaut mal sehr vielversprechend aus:
http://forum.fhem.de/index.php/topic,42976.msg405627.html#msg405627 (http://forum.fhem.de/index.php/topic,42976.msg405627.html#msg405627)
Finde es spitze das sich hier so viel tut, alleine durch das lesen neuer Beiträge komme ich schon ständig auf neue Ideen. ;-)
Meine Raspi läuft jetzt mit ro /boot und ro / super, da ich jetzt 10 Tage auf Dienstreise bin und so wie jetzt gerade via VPN aus einer Airport Lounge in meinem Heimnetzwerk bin, habe ich daheim einfach zwei Kopien meiner Rspi SD angefärtigt, sollte ich die Rasp wieder mal zerschießen (was wahrscheinlich zu 90% der Fall sein wird) hat meine Frau daheim schon Anweisung die SD Karte zu tauschen. ;-)
Ich hab auf meiner Raspi 2 B HDMI deaktiviert um auch Strom zu sparen und arbeite darauf eigentlich nur via SSH als root.
Solltest du auch vorhaben ro und tempfs zu aktivieren stell erst mal in der sshd.config "UsePrivilegeSeparation" to "no". Hab mich bei der Umstellung auf read only ohne diese Änderung nämlich siecher 4 mal aus dem System gesperrt und musste neu flashen.
Lg,
Andi