93_DbLog - Umstellung Log-Funktion auf non-blocking

Begonnen von DS_Starter, 18 Dezember 2016, 20:03:56

Vorheriges Thema - Nächstes Thema

ChrisW

#45
super version 2.4 bremst bei mir fhem derzeit nicht mehr aus. Wichtig finde ich es nicht die Geräte anzugeben welche ich loggen will ... sondern Geräte die ich nicht im Log haben möchte.
Cool wäre es per attr einfach anzugeben.

Wie kann ich Freezes auswerten?
Raspberry PI3 mit allem möglichen.

tilde1970

Vielen Dank ....

Die überarbeitete Version (2.4) habe ich getestet und es war sofort ein Geschwindigkeitszuwachs bei Fhem zu bemerken...Keine ewige Ladezeiten mehr im Web etc. Ich hatte teils Freezes bis zu 30s . Komplett weg....

Ich hoffe das wird demnächst eingecheckt...

Tobias

#47
Hi,
finde ich super das jemand das NonBlocking einbaut. Habe bisher zu wenig Zeit dafür gefunden da ich selbst nur wenige freezes von 1-2sek habe und eher weniger auffällt.

Bzgl. dem Unit Splitting: Es obliegt jedem Modul selbst die DBLog_Split funktion aufzurufen und entsprechend die EInheiten sauber zu übergeben. Diese Funktion gibt schon seit einiger Zeit im DBLog Modul (siehe Wiki -> Developer Infos) . Das "alte" Splitting direkt im DBLog Modul ist "deprecated" und soll bald aus dem Modul selbst raus...

Wenn die Anpassungen gut getestet sind checke ich es natürlich gerne ins Fhem Repo ein...
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

DS_Starter

Hallo zusammen, hallo Tobias,

habe nun doch etwas Zeit gefunden und ein bisschen weiter gearbeitet.
Mit angehängten Version V2.4.3 wurde folgendes ergänzt/verbessert:

* Da nunmehr ein Blockinsert stattfindet wurde eine Auswertung eines jeden Datensatzes innerhalb des Blocks hinsichtlich der erfolgreichen DB-Operation nötig.
   Insbesondere wenn die current-Tabelle neu aufgebaut wird oder Datensätze hinzugefügt werden ist zunächst der Erfolg eines Updates zu checken um bei Misserfolg ein
   Insert statt dessen durchzuführen. Nun wird execute_array entsprechend stärker analysiert und evtl. Fehler im "state" bzw. Logfile (verbose 2) ausgegeben.

* Es gibt das Attribut "verbose4Devs".  Es dient dazu verbose4-Ausgaben auf die interessierenden Devices zu beschränken. Es war eine Anregung von stromer-12.
   Falls gewünscht eine kommaseparierte Liste der relevanten Devices angeben. Bei einstelltem verbose 4 werden nur noch diese Geräte in der Logfile-Ausgabe
   berücksichtigt. Damit man daran erinnert wird, erscheint bei nicht berücksichtigten Devices im Log:
   
   DbLog LogDB -> verbose 4 logging of device SMA_Energymeter skipped due to attribute "verbose4Devs" restrictions
   


Als weiterer Nebeneffekt ist herausgekommen dasss bei mir nun auch die Ausgaben von Sysmon richtig separiert und geloggt werden.

Danke auch an alle die mittesten und ihre Erfahrungen hier teilen !
Wichtig wäre auch zu wissen ob ihr mit MySQL/MariaDB oder SQLite arbeitet um einschätzen zu können, wie das Ganze auf den verschiedenen Architekturen läuft bzw. getestet ist.

Vom richtigen "non-blocking" sind wir zwar noch entfernt, aber mit dieser Technik offensichtlich schon ein gehöriges Stück in die gewünschte Richtung gekommen.

viele Grüße
Heiko
Proxmox+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

Tobias

Bevor ich es teste, sollte(!) es auch mit einer PostgreDB funktionieren? Ich setze eine solche ein.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

DS_Starter

Hallo Tobias,

sollte ... ja. Nur habe ich keine zum Testen und bisher hatte sich hier auch niemand gemeldet der eine einsetzt.
Insofern wärst du der erste ....

Grüße
Heiko
Proxmox+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

ChrisW

Super Update gemacht läuft nutze pi3 mit normalen mysql server.

Auschließen habe ich im Gerät dbexeclude .* funktioniert super
Raspberry PI3 mit allem möglichen.

Pyromane

Zitat von: Tobias am 28 Dezember 2016, 14:47:39
Bevor ich es teste, sollte(!) es auch mit einer PostgreDB funktionieren? Ich setze eine solche ein.
Nach einem schnellen Test, ja es funktioniert.
Gründlich alles mögliche durchtesten werde ich erst die nächsten Tage können.

eldrik

Zitat von: Tobias am 28 Dezember 2016, 14:47:39
Bevor ich es teste, sollte(!) es auch mit einer PostgreDB funktionieren? Ich setze eine solche ein.

Hi,

Läuft bisher (V2.4) ohne Zwischenfälle auf meiner Postgres.

Greetz
Eldrik

Loredo

Zitat von: Tobias am 28 Dezember 2016, 13:32:12
Bzgl. dem Unit Splitting: Es obliegt jedem Modul selbst die DBLog_Split funktion aufzurufen und entsprechend die EInheiten sauber zu übergeben. Diese Funktion gibt schon seit einiger Zeit im DBLog Modul (siehe Wiki -> Developer Infos) . Das "alte" Splitting direkt im DBLog Modul ist "deprecated" und soll bald aus dem Modul selbst raus...


Kann auch gerne so beibehalten werden, die Funktion in Unit.pm ist auch nur ein Angebot wie man Einheiten (plus logging) in sein Modul integrieren kann.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

JoeALLb

Zitat von: Tobias am 28 Dezember 2016, 13:32:12
Hi,
finde ich super das jemand das NonBlocking einbaut. Habe bisher zu wenig Zeit dafür gefunden da ich selbst nur wenige freezes von 1-2sek habe und eher weniger auffällt.
Heißt das, Du möchtest der Modulverantwortliche bleiben? Ich hatte die letzten Monate eher das Gefühl, dass Dich die Weiterentwickling des Moduls nicht mehr sonderlich interessiert.... und hatte nach dem ein oder anderen Kommentar irgendwie für mich gedacht, dass Du die Modulverantwortung gerne übergeben würdest... Mag sein, dass das völlig falsch ist, dann verzeih die Frage und vergiss es.
Ich hoffe, das darf man hier rückfragen, da das Ergebnis der Antwort mich doch irgendwie direkt betrifft....
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

#56
Hallo miteinander,

nun habe ich den Wunsch von ChrisW auch noch umgesetzt um Devices vom Logging in der DB ausschließen zu können, also die Negation des Inkludierens im Define.
Dazu gibt es das Attribut "excludeDevs", welches wieder eine kommaseparierte Liste der auszuschließenden Devices bekommen muß. Dieses Attribut zieht aber nur wenn
im Define ALLE Devices inkludiert werden, also der Form ".*:...." . Dies soll vermeiden, dass auf der einen Seite Devices explizit inkludiert werden um durch Angabe im Attribut wieder ausgeschlossen zu werden.

Weiterhin akzeptieren die Attribute "verbose4Devs" bzw. "excludeDevs" nun auch Platzhalter.

Auszug aus Commandref:

    verbose4Devs
        attr <device> verbose4Devs <device1>,<device2>,<device..>
        Mit verbose Level 4 werden nur Ausgaben bezüglich der in diesem Attribut aufgeführten Devices im Logfile protokolliert. Ohne dieses Attribut werden mit verbose 4 
        Ausgaben aller relevanten Devices im Logfile protokolliert. Die angegebenen Devices werden als Regex ausgewertet.
       Beispiel
        attr <device> verbose4Devs sys.*,.*5000.*,Cam.*,global
        # Es werden Devices beginnend mit "sys", "Cam" bzw. Devices die "5000" enthalten und das Device "global" protokolliert falls verbose=4 eingestellt ist.

    excludeDevs
        attr <device> excludeDevs <device1>,<device2>,<device..>
        Die Devices "device1", "device2" bis "device.." werden vom Logging in der Datenbank ausgeschlossen. Diese Attribut wirkt nur wenn im Define des DbLog-Devices
        ".*:.." (d.h. alle Devices werden geloggt) angegeben wurde. Dadurch können Devices explizit ausgeschlossen werden anstatt alle zu loggenden Devices im Define
        einzuschließen (z.B. durch den String (device1|device2|device..):.* usw.). Die auszuschließenden Devices werden als Regex ausgewertet.
        Beispiel
        attr <device> excludeDevs global,Log.*,Cam.*
        # Es werden die Devices global bzw. Devices beginnend mit "Log" oder "Cam" vom Datenbanklogging ausgeschlossen.

Die Commandref habe ich auch überarbeitet um die zusätzlichen Attribute und die Änderung bzgl. Nutzung von Tabelle "history" (Stichwort Attribut DbLogType) zu
dokumentieren.

@Tobias ... wenn andere Tester nicht noch irgendwelche Fehler melden, wäre die anghängte Version m.M. nach fertig vorbereitet für den Check-In. Bei mir läuft auch diese Version tadellos.

@Loredo ... wegen der Anmerkung von Tobias zur DBLog_Split Funktion ändere ich diesbezüglich zunächst nichts mehr im DbLog. Aber ich betreue derzeit noch das Modul SMAInverter welches Readings erzeugt die eigentlich mit Einheiten versehen sind/sein sollten. Hier möchte ich versuchen die DBLog_SplitFn unter Verwendung der Unit.pm einzubauen um DbLog die Variablen über diese Funktion zur Verfügung zu stellen.
Hast du noch Hinweise zur Verwendung von Unit.pm oder sollte ich klarkommen wenn ich den von dir angegebenen Thread bzw. deine Module studiere ? (sonst gern auch als PM um den Thread hier nicht zu stören )

Anbei die Version V2.5, die all das Beschriebene enthält.

Grüße,
Heiko
Proxmox+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

ChrisW

Vielen Dank ;) Gleich mal ausprobiert. Scheint zu klappen.
Raspberry PI3 mit allem möglichen.

tilde1970

 Habe jetzt die aktuelle Version (2.5) mit meiner Mysql/MariaDB 10.0.28 am Laufen.....Bisher alles top. :)

Loredo

#59
Zitat von: DS_Starter am 29 Dezember 2016, 15:40:32
@Loredo ... wegen der Anmerkung von Tobias zur DBLog_Split Funktion ändere ich diesbezüglich zunächst nichts mehr im DbLog. Aber ich betreue derzeit noch das Modul SMAInverter welches Readings erzeugt die eigentlich mit Einheiten versehen sind/sein sollten. Hier möchte ich versuchen die DBLog_SplitFn unter Verwendung der Unit.pm einzubauen um DbLog die Variablen über diese Funktion zur Verfügung zu stellen.
Hast du noch Hinweise zur Verwendung von Unit.pm oder sollte ich klarkommen wenn ich den von dir angegebenen Thread bzw. deine Module studiere ? (sonst gern auch als PM um den Thread hier nicht zu stören )

Passt für mich.

Unit.pm ansich muss man sich nicht unbedingt anschauen (höchstens um zu erfahren, welche vordefinierten RTypes/Units es gibt und wie sie heißen).
Ansonsten zeigen Wunderground.pm und HP1000.pm, wie es geht. Auch wenn Unit.pm intern noch nicht fertig ist, bleiben diese grundsätzlichen Sachen aus Modulsicht erhalten. Im Grunde muss man nur Unit.pm laden und in X_Initialize() ein paar Dinge eintragen:


use Unit.pm;

sub X_Initialize($) {

   [...]

   $hash->{DbLog_splitFn} = "Unit_DbLog_split";

   [...]

   $hash->{readingsDesc} = {
      'readingname1' => { rtype => '<Key aus $rtypes in Unit.pm>', },
      'readingname2' => { rtype => '<Key aus $rtypes in Unit.pm>', },
      'temperature' => { rtype => 'c', },
      'temperature_f' => { rtype => 'f', },
      'humidity' => { rtype => 'pct', formula_symbol => 'H', },
   }

   [...]

}



Es gibt natürlich viele Möglichkeiten da noch was einzustellen, aber das ist noch nicht unbedingt alles Rund und daher auch noch nicht beschreibenswert. Für DbLog ist damit aber die Funktion die Einheit im richtigen Format zu bekommen gegeben.
Wenn Fragen auftauchen oder z.B. Einheiten fehlen, bitte bevorzugt hier im Thread öffentlich darüber diskutieren, damit alle was davon haben. PM ist sonst so eine Einzelgeschichte ;-)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER