FHEM Forum

FHEM => Automatisierung => Thema gestartet von: betateilchen am 25 Februar 2014, 20:08:45

Titel: [patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 25 Februar 2014, 20:08:45
Fügt der 93_DbLog eine reopen Funktion zu, die ein commit & schließen der Datenbank mit anschließendem wiederverbinden durchführt.

Hintergrund:

Die Journaldatei kann bei längerem Gebrauch (mehrere Tage) von DbLog so groß werden, dass der Speicherplatz auf einem Einplatinencomputer knapp wird, was bis Totalausfall führen kann.

Mit "set <dbLog> reopen" kann z.B. ein at definiert werden, das einmal pro Tag (vorzugsweise nachts) ein Schließen und Wiederöffnen der Log-Datenbank durchführt.

-- edit --- Patch zur Überarbeitung entfernt
Titel: Antw:[patch] 93_DbLog.pm - add command "set <dbLog> reopen"
Beitrag von: betateilchen am 26 Februar 2014, 11:51:01
Ich habe den ursprünglichen Patch nochmal überarbeitet, um eine einfache Möglichkeit zu schaffen, ggf. weitere Set-Kommandos zu implementieren (ich hab dazu noch ein paar Ideen im Hinterkopf)



Index: 93_DbLog.pm
===================================================================
--- 93_DbLog.pm (revision 5050)
+++ 93_DbLog.pm (working copy)
@@ -17,6 +17,7 @@
use warnings;
use DBI;
use Data::Dumper;
+use feature qw/say switch/;

my %columns = ("DEVICE"  => 64,
                "TYPE"    => 64,
@@ -34,6 +35,7 @@
   $hash->{DefFn}    = "DbLog_Define";
   $hash->{UndefFn}  = "DbLog_Undef";
   $hash->{NotifyFn} = "DbLog_Log";
+  $hash->{SetFn}    = "DbLog_Set";
   $hash->{GetFn}    = "DbLog_Get";
   $hash->{AttrFn}   = "DbLog_Attr";
   $hash->{ShutdownFn} = "DbLog_Shutdown";
@@ -1019,6 +1021,32 @@
   }
}

+sub
+DbLog_Set($@) {
+       my ($hash, @a) = @_;
+       my $name = $hash->{NAME};
+       my $usage = "Unknown argument, choose one of reopen:noArg";
+       return $usage if(int(@a) < 2);
+       my $ret;
+
+       given ($a[1]) {
+
+               when ('reopen') {
+                       my $dbh= $hash->{DBH};
+                       Log3($name, 4, "DbLog $name: Reopen requested.");
+                       $dbh->commit();
+                       $dbh->disconnect();
+                       DbLog_Connect($hash);
+                       $ret = "Reopen executed.";
+               }
+
+               default { $ret = $usage; }
+       }
+
+       return $ret;
+}
+
+
################################################################
#
# Charting Specific functions start here


Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 12:47:50
"set" Funktionalität um eine Zählfunktion erweitert

(http://up.picr.de/17502632pq.png)



sub DbLog_Set($@) {
my ($hash, @a) = @_;
my $name = $hash->{NAME};
my $usage = "Unknown argument, choose one of reopen:noArg count:noArg";
return $usage if(int(@a) < 2);
my $dbh = $hash->{DBH};
my $ret;

given ($a[1]) {

when ('reopen') {
Log3($name, 4, "DbLog $name: Reopen requested.");
$dbh->commit();
$dbh->disconnect();
DbLog_Connect($hash);
$ret = "Reopen executed.";
}

when ('count') {
my $c = $dbh->selectrow_array('SELECT count(*) FROM history');
readingsSingleUpdate($hash, 'countHistory', $c ,1);
$c = $dbh->selectrow_array('SELECT count(*) FROM current');
readingsSingleUpdate($hash, 'countCurrent', $c ,1);
}

default { $ret = $usage; }

}

return $ret;

}



Als nächstes kommen Löschbefehle, um alte Einträge zu löschen.
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 12:58:11
Schön wäre mE die Möglichkeit, beliebige SQL-Befehler per notify abzusetzen?
Wenn dies über dieses Modul ginge, müsste man keinen eigenes Notify mit Passwort im Klartext verwenden...
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 13:12:56
kein Problem.... aber die Nutzung geht dann nur auf eigene Verantwortung  8)
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 13:17:36
Na klar!! :D
Hab auch schob überlegt, das ganze abzusichern, indem man zB nur stored procedures erlaubt.... aber viel zu aufwendig!!
Und wer ein "delete all" absetzt, ist selber schuld!
Damit möchte ich gerne meine Stundenzusammenfassungen der Readings in die DB schreiben.
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 13:20:56
und wer immer nur an Microsoft SQL Server denkt, ist doof...  8)
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 13:25:02
ich denke an mysql!
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 13:36:51
ja, mag sein, ändert nichts daran, dass sqlite keine stored procedures kennt ;)

userCommand funktioniert (siehe zugehörige Readings im Screenshot)

(http://up.picr.de/17502949sr.png)

Man müsste natürlich noch eine ganze Reihe komplexerer Befehle testen.
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 13:39:18
set <dbLog> deleteOldDays <n>

Funktioniert inzwischen auch, es werden alle Einträge gelöscht, die älter als <n> Tage sind.
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 13:48:57
bekomm ich eine Version zum testen?
gibt es auch mehrere Usercommands?  ;-)
Ich bräuchte je eines für: Tages-Wochen-Monats-Jahresstatistik, ...
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 13:52:11
Du kannst als userCommand eingeben, was auch immer Du möchtest, das ist ja gerade Sinn und Zweck.

Das Modul protokolliert lediglich den eingegebenen Befehl (und sein Ergebnis) als reading, damit man sich das "delete from history" danach nochmal vor Augen führen kann  ;D

Schick mir eine email hier über das Forum zweckst Testversion. Ich will die hier nicht reinstellen, um keine Verwirrung mit unterschiedlichen Versionen zu stiften, zumal es überhaupt nicht "mein" Modul ist.
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 16:58:25
Zitat von: betateilchen am 28 Februar 2014, 13:52:11
Schick mir eine email hier über das Forum zweckst Testversion.


Mitglied 'betateilchen' hat deine Mitteilungen geblockt.
;-)
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 17:01:20
Ja, und weiter? Wer lesen kann, ist klar im Vorteil, guckst Du nochmal genau ...

Hatte ich EMAIL oder hatte ich PN geschrieben?
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 17:19:12
Ohne deine emailadresse zu haben, nicht so einfach.
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 17:21:36
Herr schmeiß Hirn ra...

(http://up.picr.de/17504869zd.png)

Was glaubst Du eigentlich, wofür der Briefumschlag da gut ist?
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 17:26:52
Und das ist jetzt nicht OT? Mann, sags doch einfach und gut ist.
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 17:30:06
was soll ich sagen? Den PN Button hattest Du doch auch gefunden...
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 17:32:19
Da stehts mit Text beschrieben! Dass der Brief was anderes bedeutet als PN schicken... tja, wußte ich nicht.
Jeder der es anders macht wie du, ist blöd, oder?
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 17:36:42
Nö. Aber wenn ich email schreibe, meine ich auch email.

Und auch im Profil gibts den Briefumschlag...

(http://up.picr.de/17505028ll.png)

Aber inzwischen wirds wirklich offtopic.
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: JoeALLb am 28 Februar 2014, 17:43:24
aber ohne Text, nur mit TTT. Nicht ganz offensichtlich!
Titel: Antw:[patch] 93_DbLog.pm - add "set" commands
Beitrag von: betateilchen am 28 Februar 2014, 17:46:41
Das wird mir jetzt echt zu blöd hier.