Autor Thema: Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr  (Gelesen 13811 mal)

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3883
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #60 am: 29 November 2017, 23:48:57 »
Ein File wurde nicht komplett importiert, wie kann ich diesen erneut importieren?

Einfach die Datei mit selben Namen wie die zu importierende Log Datei und Endung mit Namen des DbLog Devices im Log Ordner löschen.
Dann ist ein erneuter Import möglich.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3729
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #61 am: 02 Dezember 2017, 19:50:32 »
Hi Dan,

jetzt habe ich mal wieder hier im Thread gestöbert und dabei ist mir aufgefallen dass mindestens ein Nutzer Schwierigkeiten mit dem Import der Daten nach SQLite hatte  (#48),mit MySQL es hingegen problemlos fuinktioniert.
Hab eine Weile darüber nachgedacht und bin jetzt zu dem Schluß gekommen, dass die Verwendung der DbLog_ExecSQL für den Import deiner "Massendaten" in Verbindung mit SQLite suboptimal ist. Die DbLog_ExecSQL greift sofort über einen eigenen DB-Handle auf die DB zu. Das kann natürlich zu einem konkurrierenden Schreibprozess mit dem normalen Logging führen. MySQL und jede andere "richtige" DB kann das handeln, dafür ist es ja ein DBMS, aber wie ich SQLite kennengelernt habe .... naja.

Also ich würde dir vorschlagen, dass ich dir ein extra Interface zur Verfügung stelle an das du einfach einen String der Art:

my $row = ($timestamp."|".$device."|".$type."|".$event."|".$reading."|".$value."|".$unit);
übergeben kannst (kann auch ein Array sein). In der Schnittstelle würde ich den String dann entsprechend des DbLog-Betriebsmodus in den Cache bzw. Push-Array einfügen und die Daten würden so gemeinsamen mit den normalen Loggingzyklen in die DB geschrieben werden. Damit würden parallele Schreibzyklen vermieden und das kann für jeden DB-Typ angewendet werden.

Als Abfallprodukt kann ich die einzelnen Bestandteile über die standard Längenbegrenzung in DBlog schicken bzw. kann der User über das Attr valueFn auf die Importdaten Einfluss nehmen (Units hinzufügen u.ä.). Dadurch entsteht sogar noch ein Mehrwert für den User, sofern er sich damit ein wenig auseinandersetzen möchte.

Das Prinzip kannst du dir in der Sub DbLog_AddLog anschauen, wobei es sich nur auf die Längenbeschneidung, valueFn und Array-Verarbeitung bezieht.

Wie denkst du darüber ?

Grüße
Heiko
« Letzte Änderung: 02 Dezember 2017, 20:31:27 von DS_Starter »
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches
Kaffeekasse: https://www.paypal.me/HMaaz

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3883
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #62 am: 02 Dezember 2017, 21:33:20 »
Hi Dan,

jetzt habe ich mal wieder hier im Thread gestöbert und dabei ist mir aufgefallen dass mindestens ein Nutzer Schwierigkeiten mit dem Import der Daten nach SQLite hatte  (#48),mit MySQL es hingegen problemlos fuinktioniert.
Hab eine Weile darüber nachgedacht und bin jetzt zu dem Schluß gekommen, dass die Verwendung der DbLog_ExecSQL für den Import deiner "Massendaten" in Verbindung mit SQLite suboptimal ist. Die DbLog_ExecSQL greift sofort über einen eigenen DB-Handle auf die DB zu. Das kann natürlich zu einem konkurrierenden Schreibprozess mit dem normalen Logging führen. MySQL und jede andere "richtige" DB kann das handeln, dafür ist es ja ein DBMS, aber wie ich SQLite kennengelernt habe .... naja.

Also ich würde dir vorschlagen, dass ich dir ein extra Interface zur Verfügung stelle an das du einfach einen String der Art:

my $row = ($timestamp."|".$device."|".$type."|".$event."|".$reading."|".$value."|".$unit);
übergeben kannst (kann auch ein Array sein). In der Schnittstelle würde ich den String dann entsprechend des DbLog-Betriebsmodus in den Cache bzw. Push-Array einfügen und die Daten würden so gemeinsamen mit den normalen Loggingzyklen in die DB geschrieben werden. Damit würden parallele Schreibzyklen vermieden und das kann für jeden DB-Typ angewendet werden.

Als Abfallprodukt kann ich die einzelnen Bestandteile über die standard Längenbegrenzung in DBlog schicken bzw. kann der User über das Attr valueFn auf die Importdaten Einfluss nehmen (Units hinzufügen u.ä.). Dadurch entsteht sogar noch ein Mehrwert für den User, sofern er sich damit ein wenig auseinandersetzen möchte.

Das Prinzip kannst du dir in der Sub DbLog_AddLog anschauen, wobei es sich nur auf die Längenbeschneidung, valueFn und Array-Verarbeitung bezieht.

Wie denkst du darüber ?

Grüße
Heiko

Das klingt gut Heiko.
Ich bin wirklich kein DB-Profi, weiß allerdings wie man Daten dort rein schreibt und wie man sie wieder heraus holt.
Darum wusste ich auch nicht woher das Problem kommen kann.
Deine Aussage macht aber absolut Sinn.
Hab also nichts dagegen wenn Du da etwas besseres bereitstellen könntest. Ich nehme an das wäre eine eigene Sub dafür.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3729
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #63 am: 02 Dezember 2017, 21:54:30 »


Ich habe auch eine Weile gebraucht um eine mögliche Ursache zu identifizieren, aber wenn ich SQLite lese gehen bei mir alle Alarmglocken an.  ;)

Ja das wäre eigene Sub, also z.B. DbLog_Filelogconv.
An die würdest du einfach den beschriebenen String übergeben. Die Übernahme in das Logarray würde dblog quittieren.
Im synchronen mode wäre der DS dann auch in der DB, im asynchronen mode entsprechend später.

Für einen ersten Test würde ich erstmal nur mit einem String als Übergabeobjekt arbeiten.
Quasi übergibst du einen  String

$timestamp."|".$device."|".$type."|".$event."|".$reading."|".$value."|".$unitnach dem anderen der halt in die DB geschrieben werden soll.

Ich aber das Interface erstmal vorbereiten stelle eine Testversion zur Verfügung.

LG
Heiko
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches
Kaffeekasse: https://www.paypal.me/HMaaz

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3883
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #64 am: 02 Dezember 2017, 23:13:19 »

Ich habe auch eine Weile gebraucht um eine mögliche Ursache zu identifizieren, aber wenn ich SQLite lese gehen bei mir alle Alarmglocken an.  ;)

Ja das wäre eigene Sub, also z.B. DbLog_Filelogconv.
An die würdest du einfach den beschriebenen String übergeben. Die Übernahme in das Logarray würde dblog quittieren.
Im synchronen mode wäre der DS dann auch in der DB, im asynchronen mode entsprechend später.

Für einen ersten Test würde ich erstmal nur mit einem String als Übergabeobjekt arbeiten.
Quasi übergibst du einen  String

$timestamp."|".$device."|".$type."|".$event."|".$reading."|".$value."|".$unitnach dem anderen der halt in die DB geschrieben werden soll.

Ich aber das Interface erstmal vorbereiten stelle eine Testversion zur Verfügung.

LG
Heiko

Wenn Du selbst testen möchtest, Zeile 267 ändern in:
DbLog_Filelogconv($defs{$dblog},"$i_date $i_time|$i_device|$i_type|$i_event|$i_reading|$i_value|$i_unit") if ($cmd eq "import2DbLog");Das sollte dem entsprechen was Du Dir vorstellst.

Danke für Deinen weiterführenden Einsatz.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3729
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #65 am: 03 Dezember 2017, 15:22:36 »
Hi Dan,

jetzt habe ich eine ganze Weile versucht das Interface im asynchronen Modus zum Laufen zu bringen. Das ist mir nicht gelungen ... bis es mir wie Schuppen von den Augen gefallen ist, dass das ja garnicht funktionieren kann. Das Interface wird ja aus einem Blockingcall heraus aufgerufen. Dadurch ist es nicht möglich Werte im Hash des Hauptprozesses zu setzen (den Cache). Dadurch ist das Konstrukt nicht möglich.

Dann würde ich sagen lassen wir es so wie es ist und ich baue ein Steuerbit ein dass im Falle der Kombination "asynchroner Mode && SQLite && ExecSQL in Ausführung" der asynchrone Schreibprozess verhindert wird, d.h. Daten bleiben im Cache und wenn ExecSQL fertig, wird er wieder freigegeben.
Denke so passt es vllt. sogar besser (auch für andere Situationen). Ich weiß ja nicht wer noch so über dieses Interface schreibt.

Grüße
Heiko   
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches
Kaffeekasse: https://www.paypal.me/HMaaz

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3883
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #66 am: 03 Dezember 2017, 21:56:09 »
Hi Dan,

jetzt habe ich eine ganze Weile versucht das Interface im asynchronen Modus zum Laufen zu bringen. Das ist mir nicht gelungen ... bis es mir wie Schuppen von den Augen gefallen ist, dass das ja garnicht funktionieren kann. Das Interface wird ja aus einem Blockingcall heraus aufgerufen. Dadurch ist es nicht möglich Werte im Hash des Hauptprozesses zu setzen (den Cache). Dadurch ist das Konstrukt nicht möglich.

Dann würde ich sagen lassen wir es so wie es ist und ich baue ein Steuerbit ein dass im Falle der Kombination "asynchroner Mode && SQLite && ExecSQL in Ausführung" der asynchrone Schreibprozess verhindert wird, d.h. Daten bleiben im Cache und wenn ExecSQL fertig, wird er wieder freigegeben.
Denke so passt es vllt. sogar besser (auch für andere Situationen). Ich weiß ja nicht wer noch so über dieses Interface schreibt.

Grüße
Heiko

Hi Heiko,

ja klar, BlockingCall! Da ist nix mit Daten schreiben im Hash! In diese Falle bin ich auch schon getappt. ;)

Dein neues Vorhaben klingt auch gut wenn Du es denn so implementiert bekommst.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline DS_Starter

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3729
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #67 am: 03 Dezember 2017, 22:33:46 »
Zitat
Dein neues Vorhaben klingt auch gut wenn Du es denn so implementiert bekommst.
Geht ja genauso wenig ... ist ja das gleiche Prob wie vorhin beschrieben.
Also da bleibt wohl nur SQLite Nutzer bei Nutzung der Importfunktion aufzufordern den synchronen Mode einzuschalten, weil sich dann alles in der Hauptschleife abspielt.
ESXi 6.5 auf NUC6i5SYH mit FHEM auf Debian 9/64 Bit  (Stretch), DbLog/DbRep mit MariaDB auf Synology 415+
Maintainer: SSCam, DbLog/DbRep, Log2Syslog, SMAPortal, Watches
Kaffeekasse: https://www.paypal.me/HMaaz

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3883
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #68 am: 03 Dezember 2017, 22:39:07 »
Geht ja genauso wenig ... ist ja das gleiche Prob wie vorhin beschrieben.
Also da bleibt wohl nur SQLite Nutzer bei Nutzung der Importfunktion aufzufordern den synchronen Mode einzuschalten, weil sich dann alles in der Hauptschleife abspielt.

Wenn das dann problemlos funktioniert ist das auch eine Lösung.
Manchmal muss die Lösung doch nicht programmatisch sein. ;)

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline abc2006

  • Sr. Member
  • ****
  • Beiträge: 777
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #69 am: 26 Januar 2018, 13:02:01 »
Hi,
ich habe gerade mein Test-Fhem neu aufgesetzt und wollte FileLogConvert wieder verwenden.
Dabei tritt folgendes Problem auf: auf dem Testsystem fehlt die Eingabezeile (siehe Bilder), auf dem prooduktivsystem ist alles da.
Die Versionen sind gleich, 15500.
Cache hab ich geleert, System hab ich rebootet. Fhem hab ich *nochmal* neu installiert.
Hilft aber nicht.

Ich glaube, ich hatte so ein Problem auch schon mal, aber ich kann mich nicht mehr erinnern, wie ich es gelöst hatte. Hab auch bisher leider nix gefunden dazu, deshalb wär ich für Tipps dankbar. Kann das am Modul liegen?

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3883
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #70 am: 26 Januar 2018, 13:45:12 »
Welche set und get Befehle sollten Deiner Meinung nach angezeigt werden wenn es keine log Dateien gibt?

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline abc2006

  • Sr. Member
  • ****
  • Beiträge: 777
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #71 am: 27 Januar 2018, 00:09:46 »
Hi,

ist okay, allerdings hätte ich erwartet, dass die Eingabefelder ausgegraut sind, oder ein Hinweis, dass keine Logfiles vorhanden sind (okay, hätte man vermuten können)...

Aber die Eingabefelder auszublenden, finde ich zumindest nicht so richtig intuitiv.

Hat aber jetzt geklappt, alles klar, kein Problem.

Danke für den hilfreichen Hinweis!

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Offline pklaus

  • New Member
  • *
  • Beiträge: 5
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #72 am: 12 Februar 2018, 11:00:57 »
Hallo allerseits!

Vielen Dank für das schöne Modul! Ich habe es in Verwendung, um viele große logfiles in meine PostgreSQL Datenbank zu importieren. Damit ich nicht jeden Import-Vorgang von Hand anstoßen muss, habe ich mir ein Python-Skript geschrieben (ja, sorry, Python!). Es weist per Telnet den FHEM-Server an, eins nach dem anderen zu importieren und dann jeweils zu warten, bis das nächste dran ist.. Wenn es jemandem hilft:

https://gist.github.com/pklaus/61212fee9ba16d9834140893aec306e5

(Es läuft unter Python 3.6 und Python 2.7)
« Letzte Änderung: 14 Februar 2018, 13:51:51 von pklaus »
FHEM v5.6+ läuft auf einem UDOO quad (mit Arch Linux ARM)
CUL868 für 2x MAX! Heizkörperthermostat, 3x MAX! Heizkörperthermostat+, 2x MAX! Wandthermostat, 1x MAX! Eco-Taster
CUL433 für zig x Pollin Funksteckdosen
JeeLink für 3x LaCrosse 30.3155.WD
FB7490 für 3x FRITZ!Dect 200

Offline docolli

  • New Member
  • *
  • Beiträge: 20
Antw:Neues Modul 98_FileLogConvert.pm - FileLog Import in DbLog und mehr
« Antwort #73 am: 17 November 2018, 10:39:39 »
Hallo und ebenfalls vielen Dank für dieses hilfreiche Modul. Nach langer Zeit habe ich mich endlich ans Thema "Umstellung von FileLog auf DBLog" gemacht und dank deines Moduls auch gewagt. Es klappt.

Das einzige, was mich persönlich etwas stört, ist die Wahl von "convert2csv" als Standardauswahl beim Set-Befehl. Ich habe seit 2015 eine Menge Logfiles angesammelt (monatliche Files), sodaß ich jetzt erst mal dasitze und manuell File für File konvertieren lassen. Den Befehl habe ich in der Zwischenablage und passe nur Monat/Jahr an, aber was ich immer wieder vergesse ist, auch das Dropdown umzustellen... Ich denke, die meisten werden dein Modul zur Konvertierung in eine DB nutzen und weniger in CSV bzw. SQL. Kann man also den Standardwert des Dropdown ändern? Entweder im Code, oder gar als Attribut?

Ansonsten gibt es ja noch das Script meines Vorposters, das ich gleich testen werde, damit es automatisiert abläuft.

--------
Edit hat ein paar Tippfehler verbessert...
« Letzte Änderung: 17 November 2018, 10:41:45 von docolli »

 

decade-submarginal