93_DbLog - Umstellung Log-Funktion auf non-blocking

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

Vorheriges Thema - Nächstes Thema

PatrickR

@lolo: attr DbLogType Current/History


Von unterwegs gesendet.
lepresenced - Tracking von Bluetooth-LE-Tags (Gigaset G-Tag) mittels PRESENCE

"Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." - Rich Cook

Loredo

Zitat von: Loredo am 05 Januar 2017, 18:53:13
könntest du auch noch einbauen, dass DbLog_splitFn nicht nur in $modules{ $defs{$name}{TYPE} }{DbLog_splitFn} gesucht wird, sondern auch in $defs{$name}{'.DbLog_splitFn'}?
$defs{$name}{'.DbLog_splitFn'} sollte dabei dann Vorrang haben.


Ich habe das inzwischen in das sich in Entwicklung befindliche Modul "98_powerMap" mit eingebaut. Es setzt bereits $defs{$name}{'.DbLog_splitFn'} und wartet darauf, dass DbLog es dort abholt  ;)
Wäre also prima, wenn bei den ganzen gerade ohnehin stattfindenden Updates diese Kleinigkeit ergänzt werden könnte.




Danke & Gruß
Julian

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

DS_Starter

Hallo zusammen,

hier wie angekündigt die V2.8.5. Es werden Events von CacheUsage, NextSync nur noch erzeugt wenn die Attr "syncEvent"" bzw. "cacheEvents" gesetzt sind. State gibt im Normalfall keine Events, Fehler wie DBI-Error usw. tun dies.
Commandref ist aktualisiert.

@Julien, ja habe es nicht vergessen. Aber ich möchte erstmal hier in ruhigere Fahrwasser kommen.

LG
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

Ellert

Ich habe mal 15 min geloggt und es gibt keine DbLog-Events. Nur das Attribut asyncMode 1 ist gesetzt.

Danke
Ellert

Tobias

Hi Julian,
warum willst du "$defs{$name}{'.DbLog_splitFn'}" das so einbauen und niocht so, wie es im Wiki für die Modulentwickler drinsteht?
Oder hab ich noch etwas nicht ganz verstanden?

@DS_Starter: du könntest das Modul im stabilen Zustand auch selbst einchecken. Anosnsten musst du mir eine PM schreiben wen ich es machen soll. Allerdings mit 1-2 Tagen verzögerung möglich ...
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

ioT4db

Hallo Zusammen,
bin kein Entwickler, nur User!  :-[

Ich habe aber festgestellt, dass seit dem Update auf 2.8.2 des DbLog-Moduls Events mit sehr langen Inhalt nicht komplett geloggt werden, sondern "abgeschnitten" gespeichert werden.

Aufgefallen ist es mir beim THZ-Modul, welches z.B. ein sehr langes Reading "sGlobal" hat. Es ist etwa 750 Zeichen lang.

Nach dem Update auf Version 2.8.2 wurde dieser Reading sGlobal bei ca. 513 Zeichen "abgeschnitten".

Könnte das etwas mit den hier vorgenommenen Änderungen zu tun haben?

Auch fällt auf, dass bei gleichzeitigem Verwenden des FileLog-Devices auch im Filelog nur noch das gekürzte Event steht. Deaktiviert man das Logging per DbLog, so wird das Reading auch wieder vollständig im FileLog abgespeichert!

Danke schonmal für Euer Feedback und VG...
FHEM auf Synology mittels Docker,  Jeelink-Clone 1x für PCA301 und 1x für Lacrosse, THZ304SOL, Homematic: CUL_HM / M-MOD-RPI-PCB, Pushover, Xiaomi s50

JoeALLb

Zitat von: friesenjung am 09 Januar 2017, 13:01:49
Aufgefallen ist es mir beim THZ-Modul, welches z.B. ein sehr langes Reading "sGlobal" hat. Es ist etwa 750 Zeichen lang.

Hast Du die Spalte in der Datenbank  manuell "verbreitert"?
Im Standard ist diese nur 512 Zeichen "breit", kann also gar nicht mehr zeichen abspeichern....
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

ioT4db

Zitat von: JoeALLb am 09 Januar 2017, 13:15:08
Hast Du die Spalte in der Datenbank  manuell "verbreitert"?
Im Standard ist diese nur 512 Zeichen "breit", kann also gar nicht mehr zeichen abspeichern....

Hi. Ja, hab ich. Die Spalte EVENT ist bei mir auf 1024 Zeichen geändert. Wie gesagt ging es ja bis ich, ich glaube vorgestern Abend, FHEM aktualisiert habe.

Auch würde das nicht erklären, warum beim Parallelbetrieb (FileLog + DbLog) auch das Event gekürzt im FileLog auftaucht...
FHEM auf Synology mittels Docker,  Jeelink-Clone 1x für PCA301 und 1x für Lacrosse, THZ304SOL, Homematic: CUL_HM / M-MOD-RPI-PCB, Pushover, Xiaomi s50

Loredo

#173
Zitat von: Tobias am 09 Januar 2017, 12:13:47
warum willst du "$defs{$name}{'.DbLog_splitFn'}" das so einbauen und niocht so, wie es im Wiki für die Modulentwickler drinsteht?
Oder hab ich noch etwas nicht ganz verstanden?

Der Wiki Artikel spricht davon $hash->{DbLog_splitFn} in der X_Initialize() Funktion zu setzen.
Dies entspricht einer Definition für alle Instanzen dieses Moduls, da $hash hier nur eine Referenz auf $modules{ $hash->{TYPE} } ist und DbLog_splitFn somit tatsächlich in $modules{ $hash->{TYPE} }{DbLog_splitFn} gespeichert wird (siehe auch hier). Daran möchte ich nichts ändern.

Was mir fehlt ist die Möglichkeit pro definiertem Device ebenfalls individuell eine DbLog_splitFn setzen zu können, also in $defs{ $hash->{NAME} }. Sprich: Dort würde dann eigentlich ein INTERNAL angelegt. Mir erschien es sinnvoll dies hier mit einem führenden Punkt unsichtbar zu schalten statt es sichtbar zu haben. Deshalb $defs{ $hash->{NAME} }{'.DbLog_splitFn'}. Der Grund ist, dass IMHO ein externes Modul wie 98_powerMap nicht direkt in den Hash der Moduldefinition schreiben soll, sondern wenn überhaupt nur in eine Modulinstanz unter $defs (und auch dann nur "freundlich"; in diesem Fall auch nur, wenn das externe Modul bisher noch gar keine DbLog_splitFn gesetzt hat).

Über den führenden Punkt kann man aber sicher streiten und letztlich geht es mir nur um die Funktionalität ansich.
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: friesenjung am 09 Januar 2017, 13:43:24
Hi. Ja, hab ich. Die Spalte EVENT ist bei mir auf 1024 Zeichen geändert. Wie gesagt ging es ja bis ich, ich glaube vorgestern Abend, FHEM aktualisiert habe.

Auch würde das nicht erklären, warum beim Parallelbetrieb (FileLog + DbLog) auch das Event gekürzt im FileLog auftaucht...

Nun, in Zeile 819 wird der text mit folgendem code gekürzt.
$reading  = substr($reading,0, $columns{READING});
Wenn Du das für dich in
$reading  = substr($reading,0, 1024);
änderst, sollte das vorerst gehen.

Warum genau dieses Kürzen der Readings hier gemacht wird, kann ich nicht einschätzen.... meiner Meinung nach sollte das MySQL selbst auch passend kürzen, wenn eine Spalte zu schmal ist.
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

marvin78


JoeALLb

Zitat von: marvin78 am 09 Januar 2017, 16:46:37
MySQL tut das auch. Macht es SQLite auch?

Im Code ist speziell SQLite ausgenommen... also wird es nur für die anderen DBs gemacht.
if ($hash->{DBMODEL} ne 'SQLITE') {
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

marvin78

In DbLog ist vieles seltsam und es wird nicht besser.

ioT4db

Zitat von: JoeALLb am 09 Januar 2017, 16:44:23
Nun, in Zeile 819 wird der text mit folgendem code gekürzt.
$reading  = substr($reading,0, $columns{READING});
Wenn Du das für dich in
$reading  = substr($reading,0, 1024);
änderst, sollte das vorerst gehen.

Warum genau dieses Kürzen der Readings hier gemacht wird, kann ich nicht einschätzen.... meiner Meinung nach sollte das MySQL selbst auch passend kürzen, wenn eine Spalte zu schmal ist.

das ging schnell, danke für die Info! Ich werde erst noch etwas warten, bevor ich die Zeile ändere. Vielleicht gabs nen wichtigen Grund!? Falls dieser für mich unrelevant ist, änder ich es in der Zeile...
FHEM auf Synology mittels Docker,  Jeelink-Clone 1x für PCA301 und 1x für Lacrosse, THZ304SOL, Homematic: CUL_HM / M-MOD-RPI-PCB, Pushover, Xiaomi s50

JoeALLb

Zitat von: marvin78 am 09 Januar 2017, 17:02:52
In DbLog ist vieles seltsam und es wird nicht besser.

Da halte ich dagegen: Es tun sich hier gerade wunderbare Weiterentwicklungen! Dafür bin ich Heiko sehr dankbar!!
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