Hallo zusammen,
da ich auch nach längerem Suchen nichts erschöpfendes gefunden habe, hier mein kurzes Kochrezept, wie man - unter Windows und Quick and Dirty - seine wertvollen FileLogs nach DbLog migrieren kann. Ich denke vor dem Problem könnten so einige stehen, die wie ich ersteinmal FHEM wie per Default eingestellt mit FileLogs genutzt haben, nun aber ein wenig mehr Statistik betreiben möchten.
Ich gehe davon aus, ihr habt DBlog am Laufen und einige FileLogs, die ihr dort einfügen wollt.
Ich habe dazu verwendet:
- Notepad++
- HeidiSQL
Los geht's:
- Zuerst öffnet ihr die betreffende log-Datei mit Notepad++ und scrollt mal durch, ob einige Unregelmäßigkeiten drin enthalten sind (z.B. ob ihr das Device einmal umbenannt habt und zu Beginn des Logs ein anderer Name steht als euer aktueller am Ende). Das solltet ihr dann fix mit Search & Replace vereinheitlichen. Früher wurden, zumindest bei Homematic, gern auch einmal Einheiten in den Readings mitgeloggt (ValvePosition: 20 %) - die solltet ihr ggf. auch gleich killen
- Jetzt formatiert ihr das Log ins CSV-Format um, womit wir dann HeidiSQL füttern. Dazu unter Search & Replace den Regex-Modus anhaken; gesucht wird nach ^(....-..-..)_(..:..:..) (\S*) (\S*): (.*)$ , ersetzt wird mit "\1 \2","\3","","\4: \5","\4","\5","" - das kann dann für eine mehrere MB große Logdatei ein Momentchen dauern. Danach noch kurz die Zeilenumbrüche anzeigen lassen und merken (wurde LF oder RF und LF verwendet) und das Log so speichern.
- In HeidiSQL wird die Datei über CSV-Datei importieren geöffnet und die fhem-history-Relation ausgewählt. Ihr müsst nur noch die Zeilenumbrüche und das Trennzeichen (Komma statt Semikolon) einmalig im Dialogfeld anpassen. Durch den RegEx wird der bei mir im Filelog überall fehlende"TYP" bzw. die meist fehlende Unit automatisch mit nem Leerstring gefüllt, so dass ihr in HeidiSQL alle Spalten angehakt lassen könnt. Das Einfügen in die DB dauert dann wieder etwas. Ein Haken bei "Client interpretiert Dateiinhalt" geht bei mir signifikant schneller; wenn ihr einen schnellen DB-Server habt, könnte es auch genau andersherum sein.
- Prinzipiell fertig :-) Jetzt müsstet ihr in der Datenbank auf Wunsch noch die rausgeworfenen Units nachtragen. Das klappt natürlich auch gleich in HeidiSQL mit einem Update, wie z.B.: UPDATE fhem.history SET UNIT='°C' WHERE DEVICE = 'meinthermostatname' AND READING = 'temperature'
Vorteil dieses Halbmanuellen vorgehens: Man kann schnell und unkompliziert Inkonsistenzen in den Logs ausbügeln. Und wenn man wie ich oft geupdatet und umgebastelt hat, gibts davon reichlich.
Vielen dank für den Tip. hab mir nämlich gerade DBeinträge zerhämmert beim umbenennen.
ps. ein on update timestamp für ein feld was normal nur insertet wird ist mal richtig mist :) alle Timestamps zum teufel nach dem ändern des Device ..
bei mir jetzt geändert in
alter table history change TIMESTAMP TIMESTAMP timestamp default current_timestamp
So wird der Timestamp nur beim Insert geschrieben aber nicht mehr bei nem Update.. Just for Info.
nun habe ich auch meine Daten migriert.
Um die Einheit korrekt in die letzte Spalte zu migrieren habe ich folgende Such- / Ersetzungs-pattern verwendet
^(....-..-..)_(..:..:..) (\S*) (\w*)(: )?(.*?)( (\D*))?$
INSERT INTO "history" VALUES\('\1 \2','\3','','\4\5\6\7','\4','\6','\8'\);
Mit dem Ergebnis kann ich sofort die Daten importieren :)
Ich habe aus der Not heraus mal ein kleines Modul gebaut:
98_FileLogConvert.pm (https://forum.fhem.de/index.php/topic,65982.0.html)
Gruß
Dan
Hallo Dan,
kann es sein, dass das Convertierungs-Modul mit dem aktuellen FHEM nicht mehr läuft ? Bei mir ist das nämlich nicht mehr im COntrib-Verzeichnis und wenn ich das downloade und von Hand in den PM-Ordner kopiere, neustarte und das Modul dann definieren will, kommt die Meldung, dass das Modul nicht geladen werden kann. Oder gibt es inzwischen eine ähnlich einfache, andere Möglichkeit, die Logs in die DB einzuspielen ?
Grüße Christian
ZitatBei mir ist das nämlich nicht mehr im COntrib-Verzeichnis
Du musst es aus dem online (nicht lokelen) contrib laden ->
https://svn.fhem.de/trac/browser/trunk/fhem/contrib/98_FileLogConvert.pm
So ist es auch in der comref von DbLog hinterlegt. Versuch es mit dem Modul nochmal und wenn es dann immernoch nicht geladen werden kann, steht bestimmt etwas dazu im Log.
Grüße,
Heiko
...leider das gleiche, wenn ich versuche das mit
define FileLogConvert FileLogConvert
zu definieren (eine Hilfe findet der zu dem Modul leider nicht)
2019.09.10 21:18:25 1: PERL WARNING: Bareword found where operator expected at ./FHEM/98_FileLogConvert.pm line 9, near "98_FileLogConvert"
2019.09.10 21:18:25 1: PERL WARNING: (Missing operator before FileLogConvert?)
2019.09.10 21:18:25 1: PERL WARNING: Bareword found where operator expected at ./FHEM/98_FileLogConvert.pm line 14, near ")
window"
2019.09.10 21:18:25 1: PERL WARNING: (Missing operator before window?)
2019.09.10 21:18:25 1: PERL WARNING: String found where operator expected at ./FHEM/98_FileLogConvert.pm line 34, near "$(".trac-autofocus""
2019.09.10 21:18:25 1: PERL WARNING: (Missing operator before ".trac-autofocus"?)
2019.09.10 21:18:25 1: PERL WARNING: String found where operator expected at ./FHEM/98_FileLogConvert.pm line 35, near "$(".trac-target-new""
2019.09.10 21:18:25 1: PERL WARNING: (Missing operator before ".trac-target-new"?)
2019.09.10 21:18:25 1: PERL WARNING: String found where operator expected at ./FHEM/98_FileLogConvert.pm line 36, near "$(".trac-scroll""
2019.09.10 21:18:25 1: PERL WARNING: (Missing operator before ".trac-scroll"?)
2019.09.10 21:18:25 1: PERL WARNING: String found where operator expected at ./FHEM/98_FileLogConvert.pm line 37, near "$(".trac-disable-on-submit""
2019.09.10 21:18:25 1: PERL WARNING: (Missing operator before ".trac-disable-on-submit"?)
2019.09.10 21:18:25 1: PERL WARNING: Bareword found where operator expected at ./FHEM/98_FileLogConvert.pm line 40, near ""text/javascript" src"
2019.09.10 21:18:25 1: PERL WARNING: (Missing operator before src?)
2019.09.10 21:18:25 1: reload: Error:Modul 98_FileLogConvert deactivated:
syntax error at ./FHEM/98_FileLogConvert.pm line 8, near "<"
Unknown regexp modifier "/t" at ./FHEM/98_FileLogConvert.pm line 9, at end of line
Unknown regexp modifier "/t" at ./FHEM/98_FileLogConvert.pm line 9, at end of line
Unknown regexp modifier "/e" at ./FHEM/98_FileLogConvert.pm line 9, at end of line
syntax error at ./FHEM/98_FileLogConvert.pm line 15, near "-->"
syntax error at ./FHEM/98_FileLogConvert.pm line 34, near "$(".trac-autofocus""
syntax error at ./FHEM/98_FileLogConvert.pm line 35, near "$(".trac-target-new""
syntax error at ./FHEM/98_FileLogConvert.pm line 36, near ") {"
syntax error at ./FHEM/98_FileLogConvert.pm line 37, near "$(".trac-disable-on-submit""
syntax error at ./FHEM/98_FileLogConvert.pm line 40, near ""text/javascript" src"
./FHEM/98_FileLogConvert.pm has too many errors.
2019.09.10 21:18:25 0: syntax error at ./FHEM/98_FileLogConvert.pm line 8, near "<"
Unknown regexp modifier "/t" at ./FHEM/98_FileLogConvert.pm line 9, at end of line
Unknown regexp modifier "/t" at ./FHEM/98_FileLogConvert.pm line 9, at end of line
Unknown regexp modifier "/e" at ./FHEM/98_FileLogConvert.pm line 9, at end of line
syntax error at ./FHEM/98_FileLogConvert.pm line 15, near "-->"
syntax error at ./FHEM/98_FileLogConvert.pm line 34, near "$(".trac-autofocus""
syntax error at ./FHEM/98_FileLogConvert.pm line 35, near "$(".trac-target-new""
syntax error at ./FHEM/98_FileLogConvert.pm line 36, near ") {"
syntax error at ./FHEM/98_FileLogConvert.pm line 37, near "$(".trac-disable-on-submit""
syntax error at ./FHEM/98_FileLogConvert.pm line 40, near ""text/javascript" src"
./FHEM/98_FileLogConvert.pm has too many errors.
Also es sieht so als ob du das File nicht richtig heruntergeladen hast. Am Ende der Seite gibt es den Button "Ursprüngliches Format" herunterladen. Damit sollte es funktionieren.
Grüße,
Heiko
Tipp:
Einfacher Download mit diesem Befehl in der FHEM Kommandozeile. Bitte so komplett mit den Ausführungszeichen am Anfang und Ende eingeben!!!
"wget -qO ./FHEM/98_FileLogConvert.pm https://svn.fhem.de/fhem/trunk/fhem/contrib/98_FileLogConvert.pm"
Schauen ob das File da ist und die Rechte stimmen, wieder in der FHEM Kommandozeile, Ausgabe erfolgt in der Weboberfläche:
{qx(ls -lha ./FHEM/98_FileLogConvert.pm)}
:-) Otto, du bist wie immer mein Held !!! Danke, das scheint geholfen zu haben, nun hat der zumindest mal das Device angelegt.
Danke euch beiden !!!
Grüße Christian
...nur für mich zum Verständnis: Muss ich jedes File einzeln angeben und dann konvertieren lassen oder kann man auch alle in einem Verzeichnis nehmen ?
Grüße
Christian
Zitat von: cs-online am 11 September 2019, 11:46:48
...nur für mich zum Verständnis: Muss ich jedes File einzeln angeben und dann konvertieren lassen oder kann man auch alle in einem Verzeichnis nehmen ?
Grüße
Christian
Es geht nur einzeln.
Gruß
Dan
hmmm.... bei ca. 3000 Dateien fällt das dann wohl eher aus...
Man muss auch irgendwann mal ausmisten :)
Ist keine Lösung für Dich - aber vielleicht ein Ansatz: https://forum.fhem.de/index.php/topic,66383.msg969064.html#msg969064
Du kennst Deine Daten und weißt eventuell was drin steht, wenn Du Lust hast zum Script kannst Du Dir sicher was angepasstes bauen.
Aber wie gesagt, nur eine Idee sich selbst was zu machen.
Gruß Otto
...das sind schon nur aus den letzten drei Monaten die Logs ;-) Aber mal drüber geschaut stelle ich fest, ich brauche nicht von allen Devices die Daten und möglicherweise auch nicht so weit zurück.
Das Script sieht cool aus, ich blick bei RegEx ja imemr nicht so durch, das wird mir also deutlich helfen mir was zu basteln.
Danke dir,
schöne Grüße
Christian