93_DbLog - Überlegungen zur Optimierung (RPI und andere Systeme)

Begonnen von JoeALLb, 27 Januar 2017, 22:16:19

Vorheriges Thema - Nächstes Thema

DS_Starter

Hallo Joe,

Zitat
Edit1: @Heiko: Schön wäre es noch, wenn ich für das Erstellen eines Exportfiles ein Reading nutzen könnte. Dann wüßte ich mit Sicherheit, wann das letzte Exportfile entstanden ist und ob Handlungsbedarf für mich besteht.

Woran hast du dabei gedacht ?
D.h. wie sollte das Reading deiner Meinung nach gestaltet sein ?

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

JoeALLb

Hallo Heiko,
Zitat von: DS_Starter am 23 März 2017, 00:59:55
Woran hast du dabei gedacht ?
D.h. wie sollte das Reading deiner Meinung nach gestaltet sein ?

In der Art:
lastLog = cache_sql_2017-03-19_14-01-50
Damit wäre alles, was ich in diesem Zusammenhang bräuchte, erschlagen. Weitere Informationen wie den Modus (nopurge, purgecache) benötige ich nicht.
Ob dies für andere Einsatzzwecke wichtig ist, kann ich im Moment nicht beurteilen...
Den Zeitstempel des Readings kann ich für die Benachrichtigungen nutzen, somit wäre meine Benachrichtigungsfunktion damit möglich.
GGf. sollte dort auch ein Fehler angezeigt werden, wenn das schreiben nicht funktioniert hat.

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Omega

Hallo Heiko,

danke für deine ausführlichen Erläuterungen.

Wenn ich das richtig interpretiere, wird contrib beim Update nicht aktualisiert. Meine db_create_mysql.sql ist vom 09.11.2014 – und noch mit den geringeren Feldlängen. Ebenso im Wiki, an dass ich mich auch gehalten hatte. Für viele Anfänger sehe ich da eine potenzielle Fehlerquelle. Kein Vorwurf!

Mittlerweile habe ich die DB mit den größeren Feldlängen neu angelegt. Wenn ich das richtig verstehe, brauche ich mich dann um die Attribute col.* nicht zu kümmern.

Danke noch mal
Holger
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

DS_Starter

#213
Hallo zusammen,

anbei wieder eine weiterentwickelte Version 2.14.2 mit folgenden Ergänzungen:

* neues Reading "lastCachefile".
  Es wird das letzte exportierte bzw. importierte Cachefile mit einem Status angedruckt.

* Wurde ein Cachefile erfolgreich in die DB importiert, wird es mit einem Präfix "impdone_" versehen und erscheint dann nicht mehr in der Drop-Down-Liste der möglichen Importfiles

Gerne wieder Feedback nach euren Tests ...

@Holger, im Wiki habe ich die Feldlängen aktualisiert. Müssen wir sowieso noch einiges ergänzen was die neuen Funktionen von DbLog betrifft. Vllt mag da einer mitwirken ?!

viele Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

DS_Starter

Hallo miteinander,

anbei die Version 2.14.3.
Es ist die commandref um die neuen Funktionen ergänzt aber auch die Get-Funktion bezüglich DB-Handle Verwendung etwas umgebaut.
Ich habe die berechtigte Hoffnung damit nun ein Problem behoben zu haben, dass mit plotfork=1 unter der Voraussetzung dass
mehrere Plots in einem Raum vorhanden sind und man SQLite einsetzt, Plots u.U. alternierend nicht vollständig bzw. abgeschnitten dargestellt werden.

Ich hatte viele Versuche gemacht und ausschließlich bei SQLite dieses Verhalten registriert und auch nicht generell, sondern nur dann wenn eine größere
(unbestimmte) Anzahl SQLite-Plots im Raum vorhanden ist.

Bitte testet diese Version bei euch, insbesondere wenn ihr dieses beschriebene Problem mit SQLite/plotfork=1 habt.
Achtet natürlich darauf dass alles andere nach wie vor funktioniert wie gewohnt.
Diese Version habe ich für den Check-In vorgesehen.

FHEM-Restart ist erforderlich !

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

JoeALLb

Bei einer Umstellung aktuell ist noch ein Wunsch aufgekommen:
Schön wäre es, wenn man bei excludeDevs auch <devspec> angeben könnte, dessen Device dann mittels devspec ermittelt wird. (Siehe auch commandfref unter "Device specification (devspec)").
Grund: Ich würde gerne sämtliche roommates von einem Logging ausschließen, leider werden diese bei mir dynamisch erzeugt und haben manchmal unterschiedliche Namensformate.

Mit einem
list TYPE=ROOMMATE
kann ich diese alle ermitteln, per
set TYPE=ROOMMATE disable 1
kann ich beispielsweise alle disablen oder analog dazu auch löschen.
Da devspec eine fhem-typische Funktion ist, denke ich, wäre es gut dies hier auch zu unterstützen.
Zusätzlich wäre es noch schön, wenn Multiline ebenfalls als Trenner für excludeDevs genutzt werden kann.

So hat es Rudi beim Dummy eingebaut
https://svn.fhem.de/trac/changeset?reponame=&new=12700%40trunk%2Ffhem%2FFHEM%2F98_dummy.pm&old=12688%40trunk%2Ffhem%2FFHEM%2F98_dummy.pm
und so wurde es auch beim DOIF übernommen:
https://svn.fhem.de/trac/changeset?reponame=&new=12703%40trunk%2Ffhem%2FFHEM%2F98_DOIF.pm&old=12691%40trunk%2Ffhem%2FFHEM%2F98_DOIF.pm

FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

DS_Starter

Hallo miteinander, hallo Joe,

habe die angehängte Version 2.14.4 gebaut.

Änderungen:

* Im Asynch-Mode habe ich den Pre-Connection check in der Funktion DbLog_execmemcache entfernt.
  Das geht auf zurück auf https://forum.fhem.de/index.php/topic,69702.0.html und hat nach meinen Tests nach auch keine negativen Seiteneffekte
 
* das Attribut excludeDevs kann nun als Geräte-Spezifikation (devspec) angegeben werden. Z.B. so: global,Log.*,Cam.*,TYPE=DbLog

Gibt es denn schon Testergebnisse zur 2.14.3, alles ok ?

Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

MichaelT

#217
Hallo Heiko,

ich habe derzeit 2.14.0 in Betrieb, ohne Auffälligkeiten.

Gruß
Michael


EDIT: Habe nun 2.1.4.4 aktiviert. Sieht erstmal gut aus.
Großes Mischmasch aus HM, Philips, WLAN und Eigenprojekte.
ABER alles mit FHEM.

JoeALLb

Zitat von: DS_Starter am 29 März 2017, 00:16:29
* Im Asynch-Mode habe ich den Pre-Connection check in der Funktion DbLog_execmemcache entfernt.

* das Attribut excludeDevs kann nun als Geräte-Spezifikation (devspec) angegeben werden. Z.B. so: global,Log.*,Cam.*,TYPE=DbLog

Hallo Heiko,

danke für das Update.
Da ich am Test-FHEM zum Connect SOCKS verwende, gehe ich davon aus, dass es mich nicht betrifft. Habe die Version jedenfalls aktiviert und funktioniert bisher
problemlos!
Danke für die devspec-Ergänzung... das werde ich exzessiv nutzen!


schöne Grüße Joe.
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Newbie

Hallo Heiko,

mit der Version 2.14.3 sind die sporadischen Plot-Fehler in Verbindung mit SQLite bei mir nicht mehr aufgetreten.
Danke und Daumen hoch.

vg Jens
fhem-6.1 (configDB+DbLog)  auf ODROID-XU4

DS_Starter

Hallo @all,

danke für die Rückmeldungen !
Auch bei mir sind diese Plot-Fehler in Verbindung mit SQLite nicht mehr aufgetreten. Habe viel kreuz und quer getestet.
Dann werde ich die Version 2.14.4 dann mal einchecken....

viele Grüße
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

JoeALLb

Ich habe auch excludeDevs weiter getestet, auch die Mehrzeilen-Variante: Funktioniert ohne Auffälligkeiten!
Danke für die neue Version und fürs einchecken!
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

#222
Ich habe bei Readings festgestellt, dass sie, sofern wie im Sommer mit 0 gefüllt, meine Datenbank spammen.
Bei einer Recherche habe ich diesen Thread gefunden, der leider auch keine Lösung enthält.
https://forum.fhem.de/index.php/topic,63731.0.html

In readingsProxy wurde dieser Fehler gerade mit diesem Changeset korrigiert:
https://svn.fhem.de/trac/changeset?old_path=%2F&old=13861&new_path=%2F&new=13861

Nun suche ich nach einer Lösung für dbLog: Wäre es nicht einfach die Lösung,
Zeile 1090 zu entfernen? Dadurch wird der Wert nicht gesetzt und die nächste Vergleichsprüfung
$lv = "" if(!$lv);
in Zeile 1092 sollte erfolgreich sein... oder übersehe ich hier etwas?

Edit1: In fhem.pl finde ich diese Prüfung für "event-min-interval" auch nicht....
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

JoeALLb

#223
Anbei ein Patch um ein Attribut valueFn hinzuzufügen.

Beispiel für valueFn
{
  if ($DEVICE eq "dummy3"){
    $UNIT="°C ";;
    $VALUE= $VALUE/10 ;;
  }
}


Hier wird beim dummy3 das Unit korrekt gesetzt.

Patch
*** C:/Users/Privat/93_DbLog.pm Sat Apr 01 15:35:58 2017
--- C:/Users/Privat/93_DbLogMINE.pm Sat Apr 01 17:30:24 2017
***************
*** 153,158 ****
--- 153,159 ----
    "showNotifyTime:1,0 ".
    "timeout " .
                                "DbLogSelectionMode:Exclude,Include,Exclude/Include ".
+                               "valueFn:textField-long ".
    $readingFnAttributes;
 
    # Das Attribut DbLogSelectionMode legt fest, wie die Device-Spezifischen Atrribute
***************
*** 1026,1031 ****
--- 1027,1040 ----
     
    #one Transaction
    eval { 
+       my $value_fn = AttrVal( $name, "valueFn", "" );
+  if( $value_fn =~ m/^\s*(\{.*\})\s*$/s ) {
+    $value_fn=$1;
+  }
+ else{
+    $value_fn='';
+ }
+
        for (my $i = 0; $i < $max; $i++) {
        my $event = $dev_hash->{CHANGED}[$i];
            Log3 $name, 4, "DbLog $name -> check Device: $dev_name , Event: $event" if($vb4show);
***************
*** 1106,1111 ****
--- 1115,1144 ----
    my $colevent   = AttrVal($name, 'colEvent', undef);
    my $colreading = AttrVal($name, 'colReading', undef);
    my $colvalue   = AttrVal($name, 'colValue', undef);
+
+   ##ValueFB
+     if( $value_fn ne '' ) {
+ my $TIMESTAMP  = $timestamp;
+ my $DEVICE      = $dev_name;
+ my $DEVICETYPE = $dev_type;
+ my $EVENT      = $event;
+ my $READING    = $reading;
+       my $VALUE = $value;
+ my $UNIT    = $unit;
+ ##Todo: EVAL-Fehlermeldung in Reading (oder state) schreiben
+ my $value_fn = eval $value_fn;
+       Log3 $name, 3, $name .": valueFn: ". $@ if($@);
+
+ $timestamp= $TIMESTAMP  if( $TIMESTAMP ne '' );
+ $dev_name = $DEVICE     if( $DEVICE ne '' );
+ $dev_type = $DEVICETYPE if( $DEVICETYPE ne '' );
+ $event    = $EVENT      if( $EVENT ne '' );
+ $reading  = $READING    if( $READING ne '' );
+       $value    = $VALUE      if( $VALUE ne '' );
+ $unit     = $UNIT       if( $UNIT ne '' );
+
+           }
+
                if ($hash->{DBMODEL} ne 'SQLITE' || defined($colevent) || defined($colreading) || defined($colvalue) ) {
                        # Daten auf maximale Länge beschneiden
                        $dev_name = substr($dev_name,0, $hash->{HELPER}{DEVICECOL});
***************
*** 1115,1121 ****
                        $value    = substr($value,0, $hash->{HELPER}{VALUECOL});
                        $unit     = substr($unit,0, $hash->{HELPER}{UNITCOL});
                    }
!   
        my $row = ($timestamp."|".$dev_name."|".$dev_type."|".$event."|".$reading."|".$value."|".$unit);
    Log3 $hash->{NAME}, 4, "DbLog $name -> added event - Timestamp: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit"
                            if($vb4show);
--- 1148,1154 ----
                        $value    = substr($value,0, $hash->{HELPER}{VALUECOL});
                        $unit     = substr($unit,0, $hash->{HELPER}{UNITCOL});
                    }

        my $row = ($timestamp."|".$dev_name."|".$dev_type."|".$event."|".$reading."|".$value."|".$unit);
    Log3 $hash->{NAME}, 4, "DbLog $name -> added event - Timestamp: $timestamp, Device: $dev_name, Type: $dev_type, Event: $event, Reading: $reading, Value: $value, Unit: $unit"
                            if($vb4show);


@Heiko: Als Vorlage habe ich dazu readingProxy und readingsGroup genutzt. Die Doku denke ich kann man auch von dort leicht angepasst übernehmen. Eventuell könnte man noch ein Beispiel für aktuell bekannte und nicht funktionierende Devices angeben. Beispiel yowsupp. Kann man das so in der Art übernehmen?
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

stromer-12

#224
Zitat von: JoeALLb am 01 April 2017, 15:09:57
Nun suche ich nach einer Lösung für dbLog: Wäre es nicht einfach die Lösung,
Zeile 1090 zu entfernen? Dadurch wird der Wert nicht gesetzt und die nächste Vergleichsprüfung
$lv = "" if(!$lv);
in Zeile 1092 sollte erfolgreich sein... oder übersehe ich hier etwas?

Sollte das nicht nach
$lv = "" if(!defined($lv));
geändert werden.

Edith: Eventuell auch bei include.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL