Ich hab da mal was gebastelt!!! 8)
Da ich nun auf DbLog umgestiegen bin, ist dieses Modul aus der Not entstanden die alten FileLog(s) in die Datenbank importieren zu wollen.
Nach Recherche im Forum habe ich nur diesen Beitrag (https://forum.fhem.de/index.php/topic,21589.msg150714.html#msg150714) gefunden, der mich dann auf die Idee dieses Moduls gebracht hat. Die RegEx Verarbeitung im Editor war so grottenlangsam dass mein kleines MacBook ewig damit zu tun hat und ich den Editor nicht benutzen konnte.
Erst hatte ich ein Perl Skript am Wickel bis ich dann beschloss ein FHEM Modul daraus zu stricken.
Es besteht die Möglichkeit vorhandene FileLog Dateien in CSV und/oder SQL Dateien zu konvertieren oder aber auch direkt in DBlog zu importieren.
Nach herunterladen der Datei "98_FileLogConvert.pm", diese in den Ordner "..../fhem/FHEM/" ablegen und mit "reload 98_FileLogConvert" in FHEM verfügbar machen.
Wenn man nur ein DbLog Device hat, so wird dieses beim Definieren des FileLogConvert Device automatisch gefunden. Andernfalls muss der Name des bestimmten DbLog Device beim Definieren mit angegeben werden.
Zitatdefine <name> FileLogConvert [DbLog-device]
Beispiel:
define LogConvert FileLogConvert dblog
Das Analysieren und Konvertieren der Dateien dauert mit unter sehr lange (abhängig von der Größe).
Der Import in die DbLog dauert noch mal wesentlich länger!
Also entspannt zurücklehnen und abwarten!!!
Da dieses Modul FHEM während der Ausführung von Konvertierung und/oder Import komplett blockiert, empfehle ich das Modul nicht im Produktiv System einzusetzen.
Ich habe mir bspw. die FileLog Dateien auf mein Testsystem kopiert und dort ein DbLog Device angelegt welches sich mit der Datenbank im Produktiv System verbindet (aber sonst keine Events schreibt, indem ich einen nicht vorhandenen RegEx angegeben habe). So kann ich das Testsystem blockieren ohne zu stören.Man kann und sollte erst einmal die vorhandenen FileLog Datei(en) analysieren:
set <name> analyseFileEvents FileLog-Datei.log
Es werden sämtliche vorhandenen Events im Reading events aufgelistet.
Zusätzlich werden aus den gefunden Events Vorschläge zu möglichen set Kommandos in den Readings command-csv, command-db und command-sql erstellt. Mit diesen Kommandos ist es möglich nur bestimmte vorkommende Events zu konvertieren/importieren (einfach die nicht zu importierenden/konvertierenden Events weglassen).
Die Anzahl der analysierten Zeilen wird im Reading lines-analysed angezeigt
Probiert es einfach mal aus.
Mir hat es schon einiges an Zeit erspart beim Importieren der Alt-Daten.
Ach ja, sobald eine Datei konvertiert/importiert wurde, erscheint diese nicht mehr im jeweiligen set Dropdown! ;)
Damit das auch beim Import nach DbLog klappt wird eine (Mini)Datei geschrieben die genau so heißt wie die FileLog Datei, aber sie trägt die Endung mit dem Namen des jeweiligen DbLog Device. Das ist darum, damit man bei mehreren vorhandenen DbLog Devices weiß wo schon importiert wurde.
Falls Fragen sind, immer her damit!
Viel Spaß.
Gruß
Dan
EDIT: commandref ist auch mit dran.
Hier mal ein Auszug aus meinem Import-Log nach DbLog, damit Ihr mal sehen könnt wie lange der Import so ca. dauern kann.
Der Import lief auf meinem Produktiv-System auf einem Brix GB-BACE-3000 mit 4 GB RAM und SSD.
2017-02-02 21:43:09 FileLogConvert LogConvert state: importing fl_Sensor-2017.log
2017-02-02 21:43:38 FileLogConvert LogConvert state: import done
2017-02-02 21:43:38 FileLogConvert LogConvert file-source: fl_Sensor-2017.log
2017-02-02 21:43:38 FileLogConvert LogConvert destination: logdb
2017-02-02 21:43:38 FileLogConvert LogConvert lines-analysed: 10123
2017-02-02 21:43:38 FileLogConvert LogConvert lines-imported: 10123
2017-02-02 21:47:14 FileLogConvert LogConvert state: importing fl_Tuer-2016.log
2017-02-02 21:47:23 FileLogConvert LogConvert state: import done
2017-02-02 21:47:23 FileLogConvert LogConvert file-source: fl_Tuer-2016.log
2017-02-02 21:47:23 FileLogConvert LogConvert destination: logdb
2017-02-02 21:47:23 FileLogConvert LogConvert lines-analysed: 6478
2017-02-02 21:47:23 FileLogConvert LogConvert lines-imported: 3170
2017-02-02 21:50:01 FileLogConvert LogConvert state: importing ku_Fenster-2016.log
2017-02-02 21:50:10 FileLogConvert LogConvert state: import done
2017-02-02 21:50:10 FileLogConvert LogConvert file-source: ku_Fenster-2016.log
2017-02-02 21:50:10 FileLogConvert LogConvert destination: logdb
2017-02-02 21:50:10 FileLogConvert LogConvert lines-analysed: 9215
2017-02-02 21:50:10 FileLogConvert LogConvert lines-imported: 2849
2017-02-02 21:53:24 FileLogConvert LogConvert state: importing ku_Heizung-2017.log
2017-02-02 21:54:06 FileLogConvert LogConvert state: import done
2017-02-02 21:54:06 FileLogConvert LogConvert file-source: ku_Heizung-2017.log
2017-02-02 21:54:06 FileLogConvert LogConvert destination: logdb
2017-02-02 21:54:06 FileLogConvert LogConvert lines-analysed: 14741
2017-02-02 21:54:06 FileLogConvert LogConvert lines-imported: 14741
2017-02-02 21:56:20 FileLogConvert LogConvert state: importing ku_Heizung-2016.log
2017-02-02 22:26:33 FileLogConvert LogConvert state: import done
2017-02-02 22:26:33 FileLogConvert LogConvert file-source: ku_Heizung-2016.log
2017-02-02 22:26:33 FileLogConvert LogConvert destination: logdb
2017-02-02 22:26:33 FileLogConvert LogConvert lines-analysed: 910771
2017-02-02 22:26:33 FileLogConvert LogConvert lines-imported: 614305
2017-02-02 23:14:09 FileLogConvert LogConvert state: importing ku_SD1-2016.log power|energy
2017-02-02 23:17:13 FileLogConvert LogConvert state: import done
2017-02-02 23:17:13 FileLogConvert LogConvert file-source: ku_SD1-2016.log
2017-02-02 23:17:13 FileLogConvert LogConvert destination: logdb
2017-02-02 23:17:13 FileLogConvert LogConvert lines-analysed: 66352
2017-02-02 23:17:13 FileLogConvert LogConvert lines-imported: 64006
2017-02-02 23:23:50 FileLogConvert LogConvert state: importing ku_SD1-2017.log
2017-02-02 23:24:01 FileLogConvert LogConvert state: import done
2017-02-02 23:24:01 FileLogConvert LogConvert file-source: ku_SD1-2017.log
2017-02-02 23:24:01 FileLogConvert LogConvert destination: logdb
2017-02-02 23:24:01 FileLogConvert LogConvert lines-analysed: 3859
2017-02-02 23:24:01 FileLogConvert LogConvert lines-imported: 3859
2017-02-02 23:24:34 FileLogConvert LogConvert state: importing ku_SD2-2017.log power|energy
2017-02-02 23:25:51 FileLogConvert LogConvert state: import done
2017-02-02 23:25:51 FileLogConvert LogConvert file-source: ku_SD2-2017.log
2017-02-02 23:25:51 FileLogConvert LogConvert destination: logdb
2017-02-02 23:25:51 FileLogConvert LogConvert lines-analysed: 26855
2017-02-02 23:25:51 FileLogConvert LogConvert lines-imported: 26855
2017-02-02 23:26:01 FileLogConvert LogConvert state: importing ku_SD2-2016.log power|energy
2017-02-02 23:27:23 FileLogConvert LogConvert state: import done
2017-02-02 23:27:23 FileLogConvert LogConvert file-source: ku_SD2-2016.log
2017-02-02 23:27:23 FileLogConvert LogConvert destination: logdb
2017-02-02 23:27:23 FileLogConvert LogConvert lines-analysed: 32346
2017-02-02 23:27:23 FileLogConvert LogConvert lines-imported: 27804
2017-02-02 23:27:56 FileLogConvert LogConvert state: importing ku_SD3-2016.log power|energy
2017-02-02 23:34:07 FileLogConvert LogConvert state: import done
2017-02-02 23:34:07 FileLogConvert LogConvert file-source: ku_SD3-2016.log
2017-02-02 23:34:07 FileLogConvert LogConvert destination: logdb
2017-02-02 23:34:07 FileLogConvert LogConvert lines-analysed: 317687
2017-02-02 23:34:07 FileLogConvert LogConvert lines-imported: 123009
2017-02-02 23:34:51 FileLogConvert LogConvert state: importing ku_SD3-2017.log power|energy
2017-02-02 23:35:06 FileLogConvert LogConvert state: import done
2017-02-02 23:35:06 FileLogConvert LogConvert file-source: ku_SD3-2017.log
2017-02-02 23:35:06 FileLogConvert LogConvert destination: logdb
2017-02-02 23:35:06 FileLogConvert LogConvert lines-analysed: 5348
2017-02-02 23:35:06 FileLogConvert LogConvert lines-imported: 5031
2017-02-02 23:35:37 FileLogConvert LogConvert state: importing ku_SD4-2016.log power|energy
2017-02-02 23:36:19 FileLogConvert LogConvert state: import done
2017-02-02 23:36:19 FileLogConvert LogConvert file-source: ku_SD4-2016.log
2017-02-02 23:36:19 FileLogConvert LogConvert destination: logdb
2017-02-02 23:36:19 FileLogConvert LogConvert lines-analysed: 25379
2017-02-02 23:36:19 FileLogConvert LogConvert lines-imported: 14688
2017-02-02 23:36:39 FileLogConvert LogConvert state: importing ku_SD4-2017.log power|energy
2017-02-02 23:36:46 FileLogConvert LogConvert state: import done
2017-02-02 23:36:46 FileLogConvert LogConvert file-source: ku_SD4-2017.log
2017-02-02 23:36:46 FileLogConvert LogConvert destination: logdb
2017-02-02 23:36:46 FileLogConvert LogConvert lines-analysed: 2624
2017-02-02 23:36:46 FileLogConvert LogConvert lines-imported: 2499
2017-02-02 23:37:12 FileLogConvert LogConvert state: importing ku_SD5-2016.log power|energy
2017-02-02 23:37:44 FileLogConvert LogConvert state: import done
2017-02-02 23:37:44 FileLogConvert LogConvert file-source: ku_SD5-2016.log
2017-02-02 23:37:44 FileLogConvert LogConvert destination: logdb
2017-02-02 23:37:44 FileLogConvert LogConvert lines-analysed: 22570
2017-02-02 23:37:44 FileLogConvert LogConvert lines-imported: 11069
2017-02-02 23:41:14 FileLogConvert LogConvert state: importing ku_SD5-2017.log power|energy
2017-02-02 23:41:31 FileLogConvert LogConvert state: import done
2017-02-02 23:41:31 FileLogConvert LogConvert file-source: ku_SD5-2017.log
2017-02-02 23:41:31 FileLogConvert LogConvert destination: logdb
2017-02-02 23:41:31 FileLogConvert LogConvert lines-analysed: 8005
2017-02-02 23:41:31 FileLogConvert LogConvert lines-imported: 5974
2017-02-02 23:41:36 FileLogConvert LogConvert state: importing ku_SD6-2016.log power|energy
2017-02-02 23:42:10 FileLogConvert LogConvert state: import done
2017-02-02 23:42:10 FileLogConvert LogConvert file-source: ku_SD6-2016.log
2017-02-02 23:42:10 FileLogConvert LogConvert destination: logdb
2017-02-02 23:42:10 FileLogConvert LogConvert lines-analysed: 23351
2017-02-02 23:42:10 FileLogConvert LogConvert lines-imported: 11427
2017-02-02 23:42:38 FileLogConvert LogConvert state: importing ku_SD6-2017.log power|energy
2017-02-02 23:44:21 FileLogConvert LogConvert state: import done
2017-02-02 23:44:21 FileLogConvert LogConvert file-source: ku_SD6-2017.log
2017-02-02 23:44:21 FileLogConvert LogConvert destination: logdb
2017-02-02 23:44:21 FileLogConvert LogConvert lines-analysed: 37672
2017-02-02 23:44:21 FileLogConvert LogConvert lines-imported: 35628
2017-02-02 23:48:01 FileLogConvert LogConvert state: importing ku_Sensor-2016.log luminance|temperature|battery
2017-02-02 23:53:14 FileLogConvert LogConvert state: import done
2017-02-02 23:53:14 FileLogConvert LogConvert file-source: ku_Sensor-2016.log
2017-02-02 23:53:14 FileLogConvert LogConvert destination: logdb
2017-02-02 23:53:14 FileLogConvert LogConvert lines-analysed: 106463
2017-02-02 23:53:14 FileLogConvert LogConvert lines-imported: 105127
2017-02-02 23:58:30 FileLogConvert LogConvert state: importing ku_Sensor-2017.log
2017-02-02 23:59:04 FileLogConvert LogConvert state: import done
2017-02-02 23:59:04 FileLogConvert LogConvert file-source: ku_Sensor-2017.log
2017-02-02 23:59:04 FileLogConvert LogConvert destination: logdb
2017-02-02 23:59:04 FileLogConvert LogConvert lines-analysed: 9282
2017-02-02 23:59:04 FileLogConvert LogConvert lines-imported: 9282
2017-02-03 00:16:19 FileLogConvert LogConvert state: importing ku_Sensor_TH1-2016.log temperature|humidity|dewpoint
2017-02-03 00:48:30 FileLogConvert LogConvert state: import done
2017-02-03 00:48:30 FileLogConvert LogConvert file-source: ku_Sensor_TH1-2016.log
2017-02-03 00:48:30 FileLogConvert LogConvert destination: logdb
2017-02-03 00:48:30 FileLogConvert LogConvert lines-analysed: 909457
2017-02-03 00:48:30 FileLogConvert LogConvert lines-imported: 645164
2017-02-03 00:56:03 FileLogConvert LogConvert state: importing ku_Sensor_TH1-2017.log dewpoint|temperature|humidity
2017-02-03 00:59:31 FileLogConvert LogConvert state: import done
2017-02-03 00:59:31 FileLogConvert LogConvert file-source: ku_Sensor_TH1-2017.log
2017-02-03 00:59:31 FileLogConvert LogConvert destination: logdb
2017-02-03 00:59:31 FileLogConvert LogConvert lines-analysed: 71498
2017-02-03 00:59:31 FileLogConvert LogConvert lines-imported: 70800
2017-02-03 01:02:07 FileLogConvert LogConvert state: importing ku_Sensor_TH2-2017.log dewpoint|humidity|temperature
2017-02-03 01:07:04 FileLogConvert LogConvert state: import done
2017-02-03 01:07:04 FileLogConvert LogConvert file-source: ku_Sensor_TH2-2017.log
2017-02-03 01:07:04 FileLogConvert LogConvert destination: logdb
2017-02-03 01:07:04 FileLogConvert LogConvert lines-analysed: 95190
2017-02-03 01:07:04 FileLogConvert LogConvert lines-imported: 94446
2017-02-03 01:09:03 FileLogConvert LogConvert state: importing ku_Sensor_TH2-2016.log dewpoint|humidity|temperature
2017-02-03 01:48:37 FileLogConvert LogConvert state: import done
2017-02-03 01:48:37 FileLogConvert LogConvert file-source: ku_Sensor_TH2-2016.log
2017-02-03 01:48:37 FileLogConvert LogConvert destination: logdb
2017-02-03 01:48:37 FileLogConvert LogConvert lines-analysed: 962558
2017-02-03 01:48:37 FileLogConvert LogConvert lines-imported: 698800
2017-02-03 01:51:28 FileLogConvert LogConvert state: importing sz_Fenster-2016.log contact|trigger_cnt|sabotageError
2017-02-03 01:51:40 FileLogConvert LogConvert state: import done
2017-02-03 01:51:40 FileLogConvert LogConvert file-source: sz_Fenster-2016.log
2017-02-03 01:51:40 FileLogConvert LogConvert destination: logdb
2017-02-03 01:51:40 FileLogConvert LogConvert lines-analysed: 10776
2017-02-03 01:51:40 FileLogConvert LogConvert lines-imported: 3705
2017-02-03 01:52:57 FileLogConvert LogConvert state: importing ku_Sensor_TK-2016.log temperature
2017-02-03 02:01:42 FileLogConvert LogConvert state: import done
2017-02-03 02:01:42 FileLogConvert LogConvert file-source: ku_Sensor_TK-2016.log
2017-02-03 02:01:42 FileLogConvert LogConvert destination: logdb
2017-02-03 02:01:42 FileLogConvert LogConvert lines-analysed: 181408
2017-02-03 02:01:42 FileLogConvert LogConvert lines-imported: 180961
2017-02-03 02:03:41 FileLogConvert LogConvert state: importing wz_Heizung-2016.log actuator|batteryLevel|desired-temp|measured-temp
2017-02-03 02:35:00 FileLogConvert LogConvert state: import done
2017-02-03 02:35:00 FileLogConvert LogConvert file-source: wz_Heizung-2016.log
2017-02-03 02:35:00 FileLogConvert LogConvert destination: logdb
2017-02-03 02:35:00 FileLogConvert LogConvert lines-analysed: 908731
2017-02-03 02:35:00 FileLogConvert LogConvert lines-imported: 614675
2017-02-03 02:38:33 FileLogConvert LogConvert state: importing wz_Heizung-2017.log
2017-02-03 02:39:14 FileLogConvert LogConvert state: import done
2017-02-03 02:39:14 FileLogConvert LogConvert file-source: wz_Heizung-2017.log
2017-02-03 02:39:14 FileLogConvert LogConvert destination: logdb
2017-02-03 02:39:14 FileLogConvert LogConvert lines-analysed: 14747
2017-02-03 02:39:14 FileLogConvert LogConvert lines-imported: 14747
2017-02-03 02:39:48 FileLogConvert LogConvert state: importing sz_Heizung-2017.log actuator|batteryLevel|desired-temp|measured-temp
2017-02-03 02:40:40 FileLogConvert LogConvert state: import done
2017-02-03 02:40:40 FileLogConvert LogConvert file-source: sz_Heizung-2017.log
2017-02-03 02:40:40 FileLogConvert LogConvert destination: logdb
2017-02-03 02:40:40 FileLogConvert LogConvert lines-analysed: 18150
2017-02-03 02:40:40 FileLogConvert LogConvert lines-imported: 18150
2017-02-03 11:02:29 FileLogConvert LogConvert state: importing ku_Sensor_TK-2017.log
2017-02-03 11:03:29 FileLogConvert LogConvert state: import done
2017-02-03 11:03:29 FileLogConvert LogConvert file-source: ku_Sensor_TK-2017.log
2017-02-03 11:03:29 FileLogConvert LogConvert destination: logdb
2017-02-03 11:03:29 FileLogConvert LogConvert lines-analysed: 21293
2017-02-03 11:03:29 FileLogConvert LogConvert lines-imported: 21293
2017-02-03 11:07:52 FileLogConvert LogConvert state: importing sz_SD1-2017.log power|energy
2017-02-03 11:08:03 FileLogConvert LogConvert state: import done
2017-02-03 11:08:03 FileLogConvert LogConvert file-source: sz_SD1-2017.log
2017-02-03 11:08:03 FileLogConvert LogConvert destination: logdb
2017-02-03 11:08:03 FileLogConvert LogConvert lines-analysed: 3481
2017-02-03 11:08:03 FileLogConvert LogConvert lines-imported: 3457
2017-02-03 11:08:29 FileLogConvert LogConvert state: importing sz_SD2-2017.log power|energy
2017-02-03 11:08:40 FileLogConvert LogConvert state: import done
2017-02-03 11:08:40 FileLogConvert LogConvert file-source: sz_SD2-2017.log
2017-02-03 11:08:40 FileLogConvert LogConvert destination: logdb
2017-02-03 11:08:40 FileLogConvert LogConvert lines-analysed: 4162
2017-02-03 11:08:40 FileLogConvert LogConvert lines-imported: 4150
2017-02-03 11:09:14 FileLogConvert LogConvert state: importing sz_Sensor-2017.log
2017-02-03 11:09:35 FileLogConvert LogConvert state: import done
2017-02-03 11:09:35 FileLogConvert LogConvert file-source: sz_Sensor-2017.log
2017-02-03 11:09:35 FileLogConvert LogConvert destination: logdb
2017-02-03 11:09:35 FileLogConvert LogConvert lines-analysed: 7378
2017-02-03 11:09:35 FileLogConvert LogConvert lines-imported: 7378
2017-02-03 11:10:36 FileLogConvert LogConvert state: importing sz_Sensor-2016.log temperature|luminance|battery
2017-02-03 11:17:07 FileLogConvert LogConvert state: import done
2017-02-03 11:17:07 FileLogConvert LogConvert file-source: sz_Sensor-2016.log
2017-02-03 11:17:07 FileLogConvert LogConvert destination: logdb
2017-02-03 11:17:07 FileLogConvert LogConvert lines-analysed: 134520
2017-02-03 11:17:07 FileLogConvert LogConvert lines-imported: 134326
2017-02-03 12:37:30 FileLogConvert LogConvert state: importing wz_CO20-2016.log voc
2017-02-03 12:41:19 FileLogConvert LogConvert state: import done
2017-02-03 12:41:19 FileLogConvert LogConvert file-source: wz_CO20-2016.log
2017-02-03 12:41:19 FileLogConvert LogConvert destination: logdb
2017-02-03 12:41:19 FileLogConvert LogConvert lines-analysed: 76364
2017-02-03 12:45:50 FileLogConvert LogConvert state: importing wz_CO20-2017.log
2017-02-03 12:46:12 FileLogConvert LogConvert state: import done
2017-02-03 12:46:12 FileLogConvert LogConvert file-source: wz_CO20-2017.log
2017-02-03 12:46:12 FileLogConvert LogConvert destination: logdb
2017-02-03 12:46:12 FileLogConvert LogConvert lines-analysed: 7586
2017-02-03 12:46:12 FileLogConvert LogConvert lines-imported: 7586
2017-02-03 12:47:00 FileLogConvert LogConvert state: importing wz_SD1-2017.log power|energy
2017-02-03 12:48:06 FileLogConvert LogConvert state: import done
2017-02-03 12:48:06 FileLogConvert LogConvert file-source: wz_SD1-2017.log
2017-02-03 12:48:06 FileLogConvert LogConvert destination: logdb
2017-02-03 12:48:06 FileLogConvert LogConvert lines-analysed: 23377
2017-02-03 12:48:06 FileLogConvert LogConvert lines-imported: 23334
2017-02-03 12:48:49 FileLogConvert LogConvert state: importing wz_SD2-2017.log
2017-02-03 12:49:14 FileLogConvert LogConvert state: import done
2017-02-03 12:49:14 FileLogConvert LogConvert file-source: wz_SD2-2017.log
2017-02-03 12:49:14 FileLogConvert LogConvert destination: logdb
2017-02-03 12:49:14 FileLogConvert LogConvert lines-analysed: 6727
2017-02-03 12:49:14 FileLogConvert LogConvert lines-imported: 6727
2017-02-03 12:50:08 FileLogConvert LogConvert state: importing wz_SD4-2017.log power|energy
2017-02-03 12:50:15 FileLogConvert LogConvert state: import done
2017-02-03 12:50:15 FileLogConvert LogConvert file-source: wz_SD4-2017.log
2017-02-03 12:50:15 FileLogConvert LogConvert destination: logdb
2017-02-03 12:50:15 FileLogConvert LogConvert lines-analysed: 2599
2017-02-03 12:50:15 FileLogConvert LogConvert lines-imported: 2585
2017-02-03 12:50:34 FileLogConvert LogConvert state: importing wz_SD5-2017.log power|energy
2017-02-03 12:50:41 FileLogConvert LogConvert state: import done
2017-02-03 12:50:41 FileLogConvert LogConvert file-source: wz_SD5-2017.log
2017-02-03 12:50:41 FileLogConvert LogConvert destination: logdb
2017-02-03 12:50:41 FileLogConvert LogConvert lines-analysed: 2229
2017-02-03 12:50:41 FileLogConvert LogConvert lines-imported: 2192
2017-02-03 12:51:21 FileLogConvert LogConvert state: importing wz_Sensor-2017.log
2017-02-03 12:51:36 FileLogConvert LogConvert state: import done
2017-02-03 12:51:36 FileLogConvert LogConvert file-source: wz_Sensor-2017.log
2017-02-03 12:51:36 FileLogConvert LogConvert destination: logdb
2017-02-03 12:51:36 FileLogConvert LogConvert lines-analysed: 5338
2017-02-03 12:51:36 FileLogConvert LogConvert lines-imported: 5338
2017-02-03 12:52:16 FileLogConvert LogConvert state: importing wz_SD3-2017.log
2017-02-03 12:53:42 FileLogConvert LogConvert state: import done
2017-02-03 12:53:42 FileLogConvert LogConvert file-source: wz_SD3-2017.log
2017-02-03 12:53:42 FileLogConvert LogConvert destination: logdb
2017-02-03 12:53:42 FileLogConvert LogConvert lines-analysed: 31064
2017-02-03 12:53:42 FileLogConvert LogConvert lines-imported: 31064
2017-02-03 12:57:34 FileLogConvert LogConvert state: importing wz_SD3-2016.log power|energy
2017-02-03 13:00:12 FileLogConvert LogConvert state: import done
2017-02-03 13:00:12 FileLogConvert LogConvert file-source: wz_SD3-2016.log
2017-02-03 13:00:12 FileLogConvert LogConvert destination: logdb
2017-02-03 13:00:12 FileLogConvert LogConvert lines-analysed: 55685
2017-02-03 13:00:12 FileLogConvert LogConvert lines-imported: 55587
2017-02-03 13:01:26 FileLogConvert LogConvert state: importing wz_SD2-2016.log power|energy
2017-02-03 13:11:02 FileLogConvert LogConvert state: import done
2017-02-03 13:11:02 FileLogConvert LogConvert file-source: wz_SD2-2016.log
2017-02-03 13:11:02 FileLogConvert LogConvert destination: logdb
2017-02-03 13:11:02 FileLogConvert LogConvert lines-analysed: 215934
2017-02-03 13:11:02 FileLogConvert LogConvert lines-imported: 197843
2017-02-03 13:12:21 FileLogConvert LogConvert state: importing wz_Sensor-2016.log temperature|battery|luminance
2017-02-03 13:16:42 FileLogConvert LogConvert state: import done
2017-02-03 13:16:42 FileLogConvert LogConvert file-source: wz_Sensor-2016.log
2017-02-03 13:16:42 FileLogConvert LogConvert destination: logdb
2017-02-03 13:16:42 FileLogConvert LogConvert lines-analysed: 96132
2017-02-03 13:16:42 FileLogConvert LogConvert lines-imported: 90217
2017-02-03 13:21:34 FileLogConvert LogConvert state: importing wz_Sensor_Technik-2017.log dewpoint|humidity|temperature
2017-02-03 13:25:13 FileLogConvert LogConvert state: import done
2017-02-03 13:25:13 FileLogConvert LogConvert file-source: wz_Sensor_Technik-2017.log
2017-02-03 13:25:13 FileLogConvert LogConvert destination: logdb
2017-02-03 13:25:13 FileLogConvert LogConvert lines-analysed: 76582
2017-02-03 13:25:13 FileLogConvert LogConvert lines-imported: 75924
2017-02-03 13:27:45 FileLogConvert LogConvert state: importing wz_Sensor_Technik-2016.log temperature|humidity|dewpoint
2017-02-03 13:42:16 FileLogConvert LogConvert state: import done
2017-02-03 13:42:16 FileLogConvert LogConvert file-source: wz_Sensor_Technik-2016.log
2017-02-03 13:42:16 FileLogConvert LogConvert destination: logdb
2017-02-03 13:42:16 FileLogConvert LogConvert lines-analysed: 367594
2017-02-03 13:42:16 FileLogConvert LogConvert lines-imported: 296591
Nach einem "reduceLog 35" im DbLog wurde die Datenbank von 7272942 Einträgen auf 1728210 Einträge geschrumpft.
UPDATE 1.2.2017:
- Modul ist nun non-blocking und kann damit auch im Produktivsystem eingesetzt werden
- falls das Device im Log mit selben Namen im bestehenden FHEM existiert, so wird dessen TYPE in die DB geschrieben
- falls vorhanden wird nun auch UNIT in der DB befüllt
- im Attribut logdir kann nun ein alternativer Ordner für die FileLog Dateien angegeben werden - dieser Ordner muss sich auch unter ".../fhem/" befinden
- in state wird nun der aktuelle Status besser dargestellt
- sql2DbLog ersatzlos entfernt
- allgemeine Verarbeitungsgeschwindigkeit und Speicherauslastung wurden drastisch optimiert
- Eingaben bei Set und Attribut werden nun validiert und ggf. eine Fehlermeldung zurück gegeben
- weitere kleine Probleme beseitigt
- commandref angepasst und nochmal deutlich überarbeitet
UPDATE 3.2.2017:
- Fehlerausgabe hinzugefügt wenn Log Datei nicht vorhanden ist
- initiales Setzen von STATE geändert auf state
- Regex bei Konvertierung/Import in state hinzugefügt
- Modul vorbereitet für offiziellen SVN Check-in
EDIT: Weiter geht es im nun offiziellen Thema zum Modul (https://forum.fhem.de/index.php/topic,66383.0.html).
Hallo Dan,
erstmal Danke für das Tool.
Ich hatte schon nach sowas gesucht da ich umsteigen möchte auf dblog - nur keine Lust hatte die mühevoll gesammelten Daten von Hand rüberzuschieben.
Um ein wenig DB Erfahrungen aufzufrischen stelle ich mein Testsystem auf DBlog um und habe dein Modul installiert (RAspi 3 / Jessie / aktuelles Fhem) und probiere es aus.
Es blockiert wirklich - FHEM komplett - Aber irgendwann gehts es auch wieder .. währenddessen kann man auf der anderen Seite (Sequel Pro auf dem Mac) sehen wie die Daten in die Datenbank reinlaufen :-)
Das Feld TYPE bleibt dabei leer - ist das Absicht?
Vor Begin der Konvertierung würde ich den STATE des Moduls auf "RUNNING" oder so setzten um dem Anwender die Panik beim einfrieren des FhemWeb's zu nehmen ...
Gruß
Andreas
Danke für Dein Feedback Andreas.
Ich versuche das Ganze gerade auf non-blocking umzustellen!
Mein Fortschritte sind aber heute eher bescheiden. >:( Das ist aber halt an manchen Tagen so...
Wir haben im DbLog Thema schon darüber diskutiert das dann in DbLog mit zu integrieren!
Dafür muss es aber erst mal non-blocking sein.
Das Feld TYPE bleibt leer weil es eben leider nicht mit im FileLog steht.
Was nicht da ist, kann auch nicht in die DB! 8)
In meiner jetzigen Dev Version des Moduls zeigt es im state auch an wenn es loslegt und womit. ;)
Gruß
Dan
Bin am non-blocking dran!
Kann schon erste Erfolge verzeichnen. 8)
Schneller ist es natürlich dann auch nicht, aber wenigstens blockiert nichts mehr.
Melde mich in den nächsten Tagen, sobald alles non-blocking ist. :D
Gruß
Dan
EDIT: Sofern das zu importierende Device in der aktuellen FHEM Installation mit selben Namen auch existiert, so wird TYPE von diesem bezogen und auch mit in die DB geschrieben. Ebenso versuche ich das mit UNIT.
Ein Update steht bereit!
Das Modul ist nun komplett non-blocking und hat auch einige weitere Verbesserungen erhalten.
Update und Changelog im ersten Beitrag.
Gruß
Dan
Hab in geistiger Umnachtung das Event leider nicht komplett zusammengebaut.
Habe es gerade gefixt und das Modul im ersten Beitrag aktualisiert.
Ein paar mögliche Fehleingaben vom Benutzer will ich noch abfangen, sonst ist das Modul aber schon so wie ich es mir vorstelle und auch stabil.
Gruß
Dan
Hallo Dan,
habe dein Modul mal geladen und eine Versuch des Imports gestartet.
Die Analyse eines Logfiles zeigt die Events korrekt an und auch die lines-analysed werden korrekt angezeigt,
Wenn ich nun die Datei mit
set logconv import2DbLog OG_BAD_Fe-2016.log
importieren möchte, sagt dein Modul "import done" aber ich sehe keine Datensätze in Current oder History der logdb
Auffälig sind die Einträge in der Current-Tabelle die - meine ich - beim Import entstanden sind.
siehe Bild
Beim Schreiben fällt mir auf: Muss das Device im zum Regexp des logdb passen?
list logconv
Internals:
CFGFN
DEF logdb
NAME logconv
NR 22940
STATE convert done
TYPE FileLogConvert
files_csv 0
files_log 167
files_sql 1
Readings:
2017-02-01 12:34:19 command-csv set logconv convert2csv OG_BAD_Fe-2016.log alive|battery|contact|cover|trigDst_vccu|trigger_cnt|Activity
2017-02-01 12:34:19 command-db set logconv import2DbLog OG_BAD_Fe-2016.log alive|battery|contact|cover|trigDst_vccu|trigger_cnt|Activity
2017-02-01 12:34:19 command-sql set logconv convert2sql OG_BAD_Fe-2016.log alive|battery|contact|cover|trigDst_vccu|trigger_cnt|Activity
2017-02-01 12:47:10 destination OG_BAD_Fe-2016.sql
2017-02-01 12:34:19 events alive battery contact cover trigDst_vccu trigger_cnt Activity
2017-02-01 12:34:19 file-analysed OG_BAD_Fe-2016.log
2017-02-01 12:47:10 file-source OG_BAD_Fe-2016.log
2017-02-01 12:47:10 lines-analysed 5175
2017-02-01 12:47:10 lines-converted 4085
2017-02-01 12:35:33 lines-imported 4085
2017-02-01 12:47:10 state convert done
Helper:
Filedata:
cmd convert2sql
db fhem
dblog logdb
dir ./log
regex
source OG_BAD_Fe-2016.log
Attributes:
room System
list logdb
Internals:
COLUMNS field length used for Device: 64, Type: 64, Event: 512, Reading: 64, Value: 128, Unit: 32
CONFIGURATION ./db.conf
DBMODEL MYSQL
DEF ./db.conf ((DG_SPS):.*|EG_BAD_HKth:.[^:].*|EG_BAD_HK:.*|EG_BAD_Fe:.*|GA_WS_ST1:.*|GA_WS_ST1_Pwr:.*|EG_FLUR_HKth:.[^:].*|EG_FLUR_HK:.*|OG_BAD_RTth:.[^:].*|OG_GZ_RTth:.[^:].*|OG_GZ_HK:.*|OG_SZ_RTth:.[^:].*|OG_SZ_HK:.*|DG_BUE_RTth:.[^:].*|DG_BUE_HK:.*|OG_GZ_FeLi:.*|OG_GZ_FeRe:.*|OG_GZ_FeHi:.*|OG_SZ_FeLi:.*|OG_SZ_FeRe:.*|DG_BUE_Fe:.*|.G_.*_BM:.*|EG_KUE_MD:.*|aussenHelligkeit:twili.*)
MODE synchronous
NAME logdb
NR 428
NTFY_ORDER 50-logdb
PID 14693
REGEXP ((DG_SPS):.*|EG_BAD_HKth:.[^:].*|EG_BAD_HK:.*|EG_BAD_Fe:.*|GA_WS_ST1:.*|GA_WS_ST1_Pwr:.*|EG_FLUR_HKth:.[^:].*|EG_FLUR_HK:.*|OG_BAD_RTth:.[^:].*|OG_GZ_RTth:.[^:].*|OG_GZ_HK:.*|OG_SZ_RTth:.[^:].*|OG_SZ_HK:.*|DG_BUE_RTth:.[^:].*|DG_BUE_HK:.*|OG_GZ_FeLi:.*|OG_GZ_FeRe:.*|OG_GZ_FeHi:.*|OG_SZ_FeLi:.*|OG_SZ_FeRe:.*|DG_BUE_Fe:.*|.G_.*_BM:.*|EG_KUE_MD:.*|aussenHelligkeit:twili.*)
STATE connected
TYPE DbLog
VERSION 2.11.1
dbconn mysql:database=fhem;host=192.168.4.50;port=3306
dbuser fhemuser
Helper:
COLSET 1
DEVICECOL 64
EVENTCOL 512
READINGCOL 64
TYPECOL 64
UNITCOL 32
VALUECOL 128
Readings:
2017-02-01 12:58:28 CacheUsage 28
2017-02-01 12:58:06 NextSync 2017-02-01 12:58:36 or if CacheUsage 500 reached
2017-02-01 12:58:07 background_processing_time 0.5290
2017-01-28 17:25:20 countCurrent 330
2017-01-28 17:25:20 countHistory 4061057
2017-02-01 12:58:07 sql_processing_time 0.5061
2017-02-01 12:58:07 state connected
2017-01-28 10:49:41 userCommand select timestamp, device, reading, value, count(*) as Nr from history group by device, reading order by Nr DESC, device;
2017-01-28 11:07:13 userCommandResult 2016-12-01 00:00:01
Cache:
index 152933
Memcache:
152906 2017-02-01 12:58:07|DG_SPS|BRIO|pAct: 604|pAct|604|
152907 2017-02-01 12:58:08|DG_SPS|BRIO|pAct: 592|pAct|592|
152908 2017-02-01 12:58:09|DG_SPS|BRIO|pAct: 584|pAct|584|
152909 2017-02-01 12:58:09|DG_SPS|BRIO|HZ_Vor: 42.4|HZ_Vor|42.4|
152910 2017-02-01 12:58:09|DG_SPS|BRIO|HZ_Rueck: 42.3|HZ_Rueck|42.3|
152911 2017-02-01 12:58:10|DG_SPS|BRIO|pAct: 588|pAct|588|
152912 2017-02-01 12:58:11|DG_SPS|BRIO|pAct: 592|pAct|592|
152913 2017-02-01 12:58:12|DG_SPS|BRIO|pAct: 588|pAct|588|
152914 2017-02-01 12:58:14|DG_SPS|BRIO|pAct: 580|pAct|580|
152915 2017-02-01 12:58:15|DG_SPS|BRIO|HZ_Rueck: 42.4|HZ_Rueck|42.4|
152916 2017-02-01 12:58:16|DG_SPS|BRIO|pAct: 608|pAct|608|
152917 2017-02-01 12:58:17|DG_SPS|BRIO|pAct: 600|pAct|600|
152918 2017-02-01 12:58:17|DG_SPS|BRIO|HZ_Vor: 42.5|HZ_Vor|42.5|
152919 2017-02-01 12:58:18|OG_BAD_RTth|CUL_HM|humidity: 45|humidity|45|%
152920 2017-02-01 12:58:18|OG_BAD_RTth|CUL_HM|measured-temp: 20.2|measured-temp|20.2|
152921 2017-02-01 12:58:18|DG_SPS|BRIO|pAct: 588|pAct|588|
152922 2017-02-01 12:58:19|DG_SPS|BRIO|pAct: 584|pAct|584|
152923 2017-02-01 12:58:19|DG_SPS|BRIO|HZ_Rueck: 42.5|HZ_Rueck|42.5|
152924 2017-02-01 12:58:20|DG_SPS|BRIO|pAct: 588|pAct|588|
152925 2017-02-01 12:58:21|DG_SPS|BRIO|pAct: 584|pAct|584|
152926 2017-02-01 12:58:22|DG_SPS|BRIO|pAct: 592|pAct|592|
152927 2017-02-01 12:58:22|DG_SPS|BRIO|HZ_Vor: 42.6|HZ_Vor|42.6|
152928 2017-02-01 12:58:23|DG_SPS|BRIO|pAct: 604|pAct|604|
152929 2017-02-01 12:58:24|DG_SPS|BRIO|HZ_Rueck: 42.6|HZ_Rueck|42.6|
152930 2017-02-01 12:58:25|DG_SPS|BRIO|pAct: 584|pAct|584|
152931 2017-02-01 12:58:26|DG_SPS|BRIO|pAct: 588|pAct|588|
152932 2017-02-01 12:58:28|DG_SPS|BRIO|pAct: 584|pAct|584|
152933 2017-02-01 12:58:28|DG_SPS|BRIO|HZ_Vor: 42.7|HZ_Vor|42.7|
Attributes:
DbLogType Current/History
asyncMode 1
cacheEvents 1
room System
showproctime 1
shutdownWait 2
verbose 0
Gruß
Michael
Sehr interessant, da ich auf irgendwann mal vorhabe endlich auf dblog umzustellen :)
Leider habe ich kein geeignetes Dev-System derzeit 8) :o
Hallo Dan,
habe noch ein paar Tests gemacht.
- Regexp von logdb erweitert - kein Erfolg
- Die seltsamen Datensätze in Current gelöscht - wurden nicht wieder neu erzeugt.
- Versuch mit kleinem Logfile wiederholt - keine Änderung
2016-01-01_11:34:23 OG_BAD_Fe alive: yes
2016-01-01_11:34:23 OG_BAD_Fe battery: ok
2016-01-01_11:34:23 OG_BAD_Fe contact: closed (to vccu)
2016-01-01_11:34:23 OG_BAD_Fe cover: closed
2016-01-01_11:34:23 OG_BAD_Fe closed
2016-01-02_11:25:21 OG_BAD_Fe alive: yes
2016-01-02_11:25:21 OG_BAD_Fe battery: ok
2016-01-02_11:25:21 OG_BAD_Fe contact: closed (to vccu)
Meine Datenbank ist MariaDB/Synology 5.5.53-0070
Ansonsten: Feines Modul, Bedienung verständlich und ausreichend.
Danke
EDIT: Weitere Anmerkung: Bei mir wird nach dem Import <Logfile> eine Datei <Logfile>.fhem und nicht <Logfile>.logdb angelegt. Das <Logfile> erscheint auch immer noch in der ComboBox.
Gruß
Michael
Hallo Michael,
das Modul schreibt definitiv nur in history!
Hab den Fehler gerade gefunden und gefixt. Hatte einen Dreher in der Variablenzuweisung. 8)
Die Version im ersten Beitrag ist aktualisiert!
Wenn Du keinen Regex angibst, werden alle Datensätze genommen die vollständig dem FileLog Schema entsprechen.
Wenn es das im FileLog gefundene Device in der aktuellen Konfiguration von FHEM auch gibt, so wird NUR dessen TYPE zusätzlich in die DB geschrieben, da die Info sonst im FileLog nicht vorhanden ist.
Zitat von: Hauswart am 01 Februar 2017, 13:13:10
Leider habe ich kein geeignetes Dev-System derzeit 8) :o
Das ist auch nicht mehr nötig.
Das Modul kann nun schon im Produktivsystem eingesetzt werden da es nicht mehr blockiert.
Es läuft bei mir selbst im Produktivsystem!
Gruß
Dan
Hallo Dan,
danke für deine schnelle Korrektur.
Funktioniert nun wie beschrieben.
Nun werden auch die Eingaben validiert und ggf. Fehlermeldungen ausgegeben.
Das Modul im ersten Beitrag ist aktualisiert.
Wenn keine Fehler mehr gefunden werden, ist das Modul aus meiner Sicht jetzt fertig. 8)
Gruß
Dan
Zitat von: DeeSPe am 01 Februar 2017, 14:43:37
Das ist auch nicht mehr nötig.
Das Modul kann nun schon im Produktivsystem eingesetzt werden da es nicht mehr blockiert.
Es läuft bei mir selbst im Produktivsystem!
Mir ging es eher darum, erst mal ein Testsystem von FileLog auf Dblog umzustellen :) Habe mit Dblog noch keinerlei Erfahrung.
Hallo Hauswart,
ich bin bei mir auch Schrittweise ohne Testsystem vorgegangen.
Erst dblog anlegen, dann parallel aufzeichnen und dann Filelog abschalten und alte Daten importieren.
Gruß
Michael
Zitat von: MichaelT am 02 Februar 2017, 09:28:08
Hallo Hauswart,
ich bin bei mir auch Schrittweise ohne Testsystem vorgegangen.
Erst dblog anlegen, dann parallel aufzeichnen und dann Filelog abschalten und alte Daten importieren.
Gruß
Michael
Ähnlich bin ich auch vorgegangen.
DbLog anlegen und konfigurieren und erst einmal mitlaufen lassen.
Nach ein paar Tagen überprüfen ob alles läuft, habe ich die DB noch einmal gelöscht, dann die FileLogs alle auf disable gesetzt und mit DbLog von Anfang begonnen. Nachdem jetzt nun das Modul fertig ist, mache ich nach und nach die Altdatenmigration. Das hat ja mehr oder weniger dann Zeit... ;)
Gruß
Dan
Sorry, hatte noch einen Mini-Bug übersehen.
Beim Import in die DbLog wurde die Bestätigungsdatei nicht geschrieben, so dass es möglich war doppelt zu importieren.
Und im Event bei SQL stand zu viel drin.
Modul im ersten Beitrag ist aktualisiert.
Wenn niemand anderes noch Fehler findet sollte es das jetzt hoffentlich gewesen sein.
Gruß
Dan
Hallo,
bei mir läuft es aktuell auch parallel da ich erst alle attribute setzen möchte und ein wenig Erfahrungen sammeln möchte.
Gibt es eine Möglichkeit alle Module ersteinmal (automatisch) mit dem dblogexclude attribut auszustatten um dann nach und nach alle relevanten Daten dazuzuholen??
Und frage ich mich auch wie das einsehen der Logdaten zu einem Modul / Gerät in der Weboberfläche funktioniert - den das ist mit Filelog über den entsprechenden Link in den Modulen ganz einfach gewesen .. jetzt suche ich nach dem intuitiven DBLog Pendant.
Gruß
Andreas
Zitat von: AndreasR am 03 Februar 2017, 12:27:22
Gibt es eine Möglichkeit alle Module ersteinmal (automatisch) mit dem dblogexclude attribut auszustatten um dann nach und nach alle relevanten Daten dazuzuholen??
Würde sagen im Zweifelsfall so:
attr .* DbLogExclude .*
Zitat von: AndreasR am 03 Februar 2017, 12:27:22
Und frage ich mich auch wie das einsehen der Logdaten zu einem Modul / Gerät in der Weboberfläche funktioniert - den das ist mit Filelog über den entsprechenden Link in den Modulen ganz einfach gewesen .. jetzt suche ich nach dem intuitiven DBLog Pendant.
Aus meiner Sicht geht das am Besten über einen SQL Client.
Auch das ausdünnen der DB von unbenötigten Einträgen mache ich direkt über den Client.
Für Mac OS bietet sich "Sequel Pro" an. Oder halt bei Bedarf auch direkt auf der mysql CLI.
Gruß
Dan
Hab nochmal ein kleines Update im ersten Beitrag nachgereicht.
Changelog:
- Fehlerausgabe hinzugefügt wenn Log Datei nicht vorhanden ist
- initiales Setzen von STATE geändert auf state
- Regex bei Konvertierung/Import in state hinzugefügt
- Modul vorbereitet für offiziellen SVN Check-in
Mittlerweile habe ich alle meine alten Logs in die DbLog problemlos importiert.
Würde mich über weitere Tester und Feedback freuen damit das Modul bald offiziell eingecheckt werden kann.
Danke im Voraus an alle Tester und das folgende Feedback.
Gruß
Dan
Ich muss mich erst noch zwischen MySQL oder SQLite entscheiden... und dann Zeit finden :)
Eine nachträgliche Migration SQLite zu MySQL scheint gar nicht so einfach möglich zu sein... MySQL zu SQLite schon eher.
Edit:
MySQL 2 SQLite: https://github.com/dumblob/mysql2sqlite
Machmal muss man sich einfach nur entscheiden loszulegen! ;)
Teste doch erst einmal mit SQLite und lasse die Logs trotzdem weiter laufen.
Wenn Du dann nach Kurzem doch auf MySQL umsteigst, ist dank der weiterlaufenden Logs ja nichts verloren und Du kannst die dann Stück für Stück importieren.
Gruß
Dan
Am Ende des ersten Beitrags habe ich nochmal einige Importlogs angefügt.
Damit man sich mal eine Vorstellung davon machen kann wie lange solche Importe dauern können.
Gruß
Dan
Ich habe ein neues offizielles Thema zum Modul (https://forum.fhem.de/index.php/topic,66383.0.html) erstellt.
Darum schliesse ich nun dieses Thema hier.
Fragen, Feedback und Anregungen bitte ab jetzt im neuen Thema.
Danke.
Gruß
Dan