Mit Fhem hatte ich klein angefangen und gemäß der Einsteiger-Anleitung für meine Geräte Filelog's definiert. Fhem läuft seit Beginn auf einem Raspberry Pi I Rev B. Angefangen hatte ich mit 4 Heizungsreglern und 3 Thermostaten von Homematic. Es kamen nach und nach anderen Sensoren und Akteure hinzu. Fhem pfeift inzwischen auf dem letzten Loch. Die Filelogs sind riesig.
Seit einem halben Jahr werkelt der schnellere Banana-Pi als Fileserver in unserem Haus. Er hat eine SATA-Festplatte und externe USB-Festplatte zum Backup. Was liegt näher, als die Daten dorthin auszulagern. Für ein späteres Projekt möchte ich die Daten einfach auswerten können, sprich sie müssen in eine Datenbank. Gut dokumentiert ist die Nutzung von MySQL und Fhem. Es werden aber auch andere Datenbanken unterstützt. Im Nachgang war MySQL nicht die beste Wahl. Aber es funktioniert.
Natürlich ging es nicht ohne Stolpersteine. Gemäß dem Motto "never touch a running system" hatte ich auf Updates verzichtet. Es lief ein Jahr altes System auf dem Raspberry. Die Pakete für meine Version waren online nicht mehr verfügbar. Normal erledigt sich die Installation vom mySQL-Clienten einfach, es ist nur eine Zeile in der Kommandozeile. Aber wenn man anfängt alte Bibliotheken im Internet zu suchen und nachzuinstallieren, kann viel schief gehen. Letztlich habe ich das Handtuch geworfen, alles gesichert, dass neuste Raspbian-Image gezogen und alles neu gemacht :-(.
Die Umstellung von FileLog zu DbLog ist kinderleicht. Es gibt zahlreiche Anleitungen im Internet. Eine Empfehlung ist das Skript zur Migration der alten Daten. Bei mir stürzte der Rechner zufällig während des Script-Durchlaufes ab. Die Hälfte der Daten war nun schon in der Datenbank. Ein erneuter Durchlauf würde also diese Daten duplizieren. So habe ich noch eine Prüfung nachgerüstet, ob der Datensatz bereits migriert wurde. Nach x-Tagen gelegtlichen Durchläufen, war es vollbracht. Die alten Daten in der Datenbank. Per
use fhem;
select count(*) from history;
komme ich auf 12 Millionen Werte in der Tabelle "history". Oh mein Gott.
Die Sensoren spucken intervallsweise jede Menge Werte aus. Daten kann man die Daten in Fhem durch das Attribut "event-on-change-reading" einschränken. Für Bewegungsesnoren, Lichtmelder habe ich das genutzt eingesetzt und konnte die Daten auf wenige Werte pro Tag einschränken.
# Event nur, wenn sich Pinlevel ändert
attr Pin35 event-on-change-reading Pinlevel
# Logge nur Pinlevel
define DbLog_LichtBad DbLog /etc/fhemdb.conf Pin37:.*Pinlevel.*
Aber bei diskreten Werten hat das gewisse Nachteile
Wie auch immer, bei mir ist das Kind ohnehin in den Brunnen gefallen, sprich ich muss mir Gedanken machen, was ich löschen kann.
Hier lohnt sich ein Blick in die Tabelle, welche Werte möchte man wirklich anzeigen oder anderweitig nutzen. Da ich mit das Taupunkt-Modul arbeite, hat diese ungewollt und redundant das Reading "T" mitgeliefert. Auch Reading 'state' wird auch gerne redundant abgelegt. State soll ja nur den Status des Moduls wiedergeben und ist meist Standard, wie nichtssagend. Oft basteln die Entwickler eigener Module eben aussagekräftige Readings dazu. So hat man eben ein Reading mit der Temperatur, die aber auch im 'state' enthalten ist. Reading 'winOpenReporting' hatte ich nie genutzt. Kann weg.