FileLogs nach DbLog konvertieren / Migrieren

Begonnen von peterk_de, 18 März 2014, 23:36:06

Vorheriges Thema - Nächstes Thema

peterk_de

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.
FHEM auf Ubuntu-VM / 2xNUC Proxmox Cluster
UI: HomeKit, TabletUI, Grafana
IOdevs: 2xHueBridge, RaspiMatic-CCU, CUL868, 2xHarmonyHub, 6xRaspi-Roomnode mit CO2, VOC und lepresenced
Devices: 107xHomematic(IP), 96xPhilips Hue, 17xTECHEM, 12xBTLE, 8xSONOS, 2xHomeConnect, 1xShelly 3em, 1xNanoleaf ...

Icebear

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.
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

fhem-me

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  :)

DeeSPe

Ich habe aus der Not heraus mal ein kleines Modul gebaut:
98_FileLogConvert.pm

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

cs-online

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
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

DS_Starter

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
ESXi@NUC+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

cs-online

...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.
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

DS_Starter

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
ESXi@NUC+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

Otto123

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)}
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cs-online

:-) 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
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

cs-online

...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
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

cs-online

hmmm.... bei ca. 3000 Dateien fällt das dann wohl eher aus...
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cs-online

...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
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20, Shelly1,2 und 2.5,Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV mit Speicher, alles auf einem RPI und da geht noch mehr