Metainformationen zur Seite
Stats4Lox-Import
Der Statistik-Import der Daten des Loxone Miniservers ist Bestandteil des Statistics 4 Loxone-Plugins für den LoxBerry. Der Import ermöglicht, bestehende Statistiken des Loxone Miniservers in die Stats4Lox-Datenbanken zu importieren.
Allgemeines
Der Statistik-Import ist grundsätzlich als Einmal-Ereignis konzipiert, d.h. Daten werden einmal mit dem Import in die Stats4Lox-Datenbanken importiert, danach werden weitere Daten durch den Stats4Lox-Mechanismus ergänzt.
Die (auf RRDTool basierenden) Stats4Lox-Datenbanken haben die Besonderheit, dass niemals ältere Daten als bereits vorhanden, importiert werden können. Das bedeutet, wurde einmal ein Datensatz aus dem Jahr 2016 geschrieben, ist es nicht mehr möglich, einen Datensatz des Jahres 2015 zu ergänzen. Daher kann ein Import nur erfolgen, wenn noch keine anderen Daten in eine Statistik-Datenbank geschrieben wurden. Die Import-Funktion legt im Zuge des Imports die Datenbanken automatisch an - es sollten die Datenbanken daher nicht vorher manuell erzeugt werden.
Ablauf eines Imports
- Zuerst muss die aktuelle Loxone-Konfigurationsdatei (der "LoxPlan") hochgeladen werden. Das Webinterface bietet dafür ganz oben die Upload-Möglichkeit. Die Datei wird am LoxBerry gespeichert und kann auch später wieder verwendet werden. Wurden danach neue Statistiken in Loxone aktiviert, muss die Loxone-Konfigurationsdatei-Datei neu hochgeladen werden.
- Nach dem Upload zeigt die Import-Webseite sämtliche Loxone-Objekte an, bei denen Statistiken aktiv sind. Mit den Spaltenüberschriften der Tabelle kann nach Namen, Raum und Kategorie sortiert werden. In jeder Zeile kann der Import aktiviert werden.
- Nach Klick auf "Speichern" wird für jede ausgewählte Statistik die Stats4Lox-Statistikdatenbank erzeugt (diese ist auf der Statistik-Übersicht sofort zu sehen). Zusätzlich wird pro Statistik ein Import-Job erzeugt, der zeitgesteuert abgearbeitet wird, d.h. der Import beginnt nicht unmittelbar, sondern um einige Minuten verzögert. Sobald der Import tatsächlich startet, können die Statistikdaten auch schon betrachtet werden.
Besonderheiten und Einschränkungen
Dateninterpolation
In Loxone gibt es unterschiedliche Statistiktypen und Intervalle, die sich vom Statistikintervall von Stats4Lox unterscheiden können. Der Statistik-Import versucht dies zu berücksichtigen und ergänzt - soweit möglich - fehlende Daten.
Liefert die Loxone-Statistik zu wenig Daten, werden die Datensätze ohne Durchschnittsbildung aufgefüllt (d.h. wiederholt). Liefert die Loxone-Statistik hingegen zu viele Daten, führt die RRD-Tool Datenbank-Engine automatisch eine Interpolation durch (inkl. der Aufbewahrung von Maximum, Minimum, Durchschnitt aller Werte).
Beispiele:
Schrittweite in Stats4Lox | Schittweite im Miniserver | Interpolation | Importgeschwindigkeit | Raspberry Pi 1 |
5 Minuten | 5 Minuten | Nein | Schnell | ca. 30 Sek./Monat |
5 Minuten | 60 Minuten | Ja | Ziemlich schnell | |
60 Minuten | 5 Minuten | Nein | Schnell | |
5 Minuten | Digitaleingang / Jede Änderung | Ja | Meist mehr als weniger langsam | ca. 65 Sek./Monat |
Wichtig: In jeder Situation, in der interpoliert wird, wird auch über Miniserver-/Statistikausfälle interpoliert. Dies ist als gerade Linie sichtbar. Wird nicht interpoliert, ist die Dauer des Ausfalls in der Statistik sichtbar (keine Daten).
Loxone-Statistikdaten mit mehr als einem gespeicherten Wert
Die aktuelle Version unterstützt nur den ersten Loxone-Wert beim Datenimport. Verschiedene Bausteine, beispielsweise der Verbrauchszähler, liefern mehr als einen Wert. Diese werden nicht übernommen.
Wahrscheinlich wird diese Funktion noch folgen - entsprechende Statistiken vorerst in Loxone nicht deaktivieren.
Minimal- und Maximalwerte
Bei der automatischen Erstellung der Stats4Lox-Datenbanken werden die Minimal- und Maximalwerte aus der Loxone-Config übernommen. Stats4Lox lässt keine Werte außerhalb dieser Schwellen zu und markiert diese Einträge als fehlerhaft. Bitte daher vorher prüfen, ob diese Werte in Loxone korrekt eingestellt sind. "Ausreißer" in der Loxone-Statistik können auf diese Weise bereits beim Import korrigiert werden.
Loxone-Statistiken erneut importieren
Wurde bereits ein Import durchgeführt, und soll erneut nachimportiert werden, funktioniert das grundsätzlich, allerdings dürfen in der Zwischenzeit von Stats4Lox keine aktuellen Daten geschrieben worden sein.
Die Import-Funktion liest aus einer bestehenden Stats4Lox-Datenbank den Zeitstempel des letzten Datensatzes und beginnt erst bei diesem Zeitpunkt, Statistikdaten von Loxone zu importieren.
Beispiele:
- Ein Erstimport wurde im Mai 2016 durchgeführt. Die Statistikaufzeichnung für diese Statistik wurde in Stats4Lox danach nicht aktiviert. Wird der Import der gleichen Statistik im Februar 2017 erneut getriggert, beginnt der Import, alle Daten ab Mai 2016 zu importieren.
- Ein Erstimport wurde im Mai 2016 durchgeführt. Die Statistikaufzeichnung für diese Statistik wurde in Stats4Lox aktiviert. Dadurch gibt es in der Stats4Lox-Datenbank aktuelle Daten bis heute. Wird die Loxone-Statistik erneut importiert, werden keine Daten mehr importiert.
Loxberry-Reboot während des Imports
Die Import-Funktion von Stats4Lox ist reboot-sicher implementiert. Solltest du während eines Import (absichtlich oder unabsichtlich) den LoxBerry neu starten, wird der Import an der abgebrochenen Stelle fortgesetzt. Ein einfaches Ausschalten (ohne Shutdown) sollte jedoch immer vermieden werden, weil das grundsätzlich das Dateisystem und Daten beschädigen kann.
Mehrere Miniserver
Der Statistik-Import unterstützt mehrere Miniserver, alleinstehend oder im Gateway-Konzentrator-Betrieb.
Wichtig ist, dass vor dem Import alle Miniserver im LoxBerry konfiguriert sind, und die Anmeldedaten richtig sind.
Vorgehensweise mit mehreren Miniservern im Gateway-Konzentrator-Betrieb
- Alle Miniserver müssen in LoxBerry mit den richtigen Anmeldedaten konfiguriert sein.
- Die Loxone-Config des Master-Miniservers hochladen.
- Die gewünschten Statistiken auswählen. Der Import erkennt automatisch, welche Statistiken auf welchem Miniserver liegen.
Vorgehensweise mit mehreren einzelnen Miniservern
- Alle Miniserver müssen im LoxBerry mit den richtigen Anmeldedaten konfiguriert sein.
- Die Loxone-Config des ersten Miniservers hochladen.
- Die gewünschten Statistiken auswählen und "Speichern".
- Die Loxone-Config des zweiten Miniservers hochladen.
- Die gewünschten Statistiken auswählen und "Speichern".
Sobald der Import mit "Speichern" eingeplant ist, kann sofort mit der nächsten Loxone Config-Datei weitergemacht werden.
Logdateien
Alle Logdateien des Imports liegen unter /opt/loxberry/log/plugins/stats4lox/import
. Der Loglevel ist derzeit mit "debug" = 4 in den Programmen fest vorgegeben.
Dateiname | Funktion |
import_cgi.log | Enthält das Logging für das Import-Webinterface |
import_scheduler.log | Enthält das grundlegende Log, welche Jobs zur Abarbeitung aufgerufen werden. |
import_<id>.log | Enthält das Log jedes einzelnen Import-Jobs. Die ID entspricht der UID aus dem LoxPLAN-File. |
Im Fehlerfalle bitte diese Logs und die Jobs übermitteln. Bei einem fehlgeschlagenen Job bitte die Angabe, welcher der Jobs nicht funktioniert hat.
Da die Importfunktion nicht weiß, ab wann Statistiken in Loxone aufgezeichnet wurden, beginnt jeder Import am 1.1.2009 ("Sekunde 0" im Loxone-Universum). Dies erzeugt eine Reihe von Download-Fehlern im Log, die "gewollt" sind. Nur wenn alle Downloads fehlerhaft sind (auch in Monaten, wo definitiv Statistken vorhanden sein müssten), ist dies wirklich ein Fehler.
Import-Jobs
Die Import-Jobs liegen unter /opt/loxberry/data/plugins/stats4lox/import
. Der Dateiname eines Jobs entspricht der UID von Loxone. In jedem Import-Job sind alle Daten enthalten, die für den Import erforderlich sind.
Es wird mittels Cron-Job alle 5 Minuten nach neuen Jobs gesucht. Dafür wird bei Vorliegen von mindestens einem Job ein Scheduler aufgerufen. Der Scheduler prüft anhand der PID, ob die im Status Running befindlichen Jobs tatsächlich noch laufen. Ist dies nicht der Fall, wird der Job in Failed umbenannt. Der Scheduler führt dann den nächsten Job aus.
Der Scheduler ist so implementiert, dass er mehrere Jobs gleichzeitig ausführen kann, was auf einem Raspberry Pi 2 und 3, oder in einer PC-VM interessant sein könnte. Derzeit ist fest eingestellt, dass nur ein Job gleichzeitig laufen darf.
Stati der Jobs:
Dateiname | Status |
<jobname>.job | Ein eingeplanter Job, der noch nicht ausgeführt wurde. |
<jobname>.running.<PID> | Ein Job, der gerade ausgeführt wird. Die Zahl ist die PID des Import-Prozesses. |
<jobname>.finished | Job wurde erfolgreich durchgeführt. |
<jobname>.failed | Der Job hat unerwartet terminiert. |
SD-Karten-Schonung durch RAM-Disk
Um die SD-Karte während des Imports vor überaus heftigen Schreibzugriffen auf das Datenbankfile zu schützen, wird der Import standardmäßig in einer RAM-Disk (/run/shm) mit dem Modus 'Fast' durchgeführt. Sollte der Pfad nicht verfügbar sein, wird direkt um Originalpfad gearbeitet, und eine Warnung im Logfile ausgegeben.
RAM-Disk Modus | Bedeutung |
<nicht gesetzt> | Original-Datenbankdatei wird verwendet (Statistikdaten sind sofort verfügbar) |
Dirty | Der komplette Import-Job erfolgt in der RAM-Disk, am Ende wird die Original-Datenbankdatei ersetzt. |
Fast (Standard) | Der Import-Job erfolgt in der RAM-Disk. Nach jedem fertigen Jahr wird die Original-Datenbank ersetzt. |
Save | Der Import-Job erfolgt in der RAM-Disk. Nach jedem fertigen Monat wird die Original-Datenbank ersetzt. |
Durch die Verwendung der RAM-Disk sind Statistikdaten entsprechend des Modus nicht sofort zu sehen. Bei einem Abbruch des Jobs durch einen unerwarteten Fehler (Exception) wird die bearbeitete Datenbank-Datei nicht zurückkopiert.
Import in eine Datenbank
Im Zuge des Imports ist es ein Leichtes, die Daten auch gleich in eine relationale Datenbank schreiben zu lassen. Gleichermaßen könnte das auch für das Polling noch nachimplementiert werden.
Ich bitte jene Benutzer, die sich einen Datenbank-Import wünschen, diesen Wunsch näher zu konkretisieren:
- Welche Datenbank-Engine (keine andere Art von Software-Schnittstelle)
- Pro Statistik eine eigene Tabelle, oder alle Daten in eine gemeinsame Tabelle
Diese Implementierung werden wir nur auf eine Art machen - daher wäre es gut, wenn sich die "Wünscher" (ggf. in einem eigenen Forums-Thread) das selbst ausdiskutieren und uns dann Bescheid geben.