Perl-Klasse Loxone::Import

/opt/loxberry/bin/plugins/stats4lox-ng/libs/Loxone/Import.pm

Import-Script (derzeit): /opt/loxberry/bin/plugins/stats4lox-ng/libs/testing/import_influx.pl

Beispielaufruf

/opt/loxberry/bin/plugins/stats4lox-ng/libs/testing/import_influx.pl msno=1 uuid=00ac8517-0961-11e1-99b9f25d750310ed

Grundsätzliche Funktionslogik

  1. Erstellung des Logs, Validierungen
  2. Öffnen bzw. Erzeugen des Statusfiles
  3. new Import: Import-Klasse instanzieren
    1. getStatsjsonElement: stats.json lesen und msno+uuid suchen
    2. getLoxoneLabels: Live-Request gegen den Miniserver zum Auslesen der Output-Labels des Bausteins
    3. setMappings: Globale Mapping-Tabelle lesen, Mapping für den jeweiligen Baustein suchen (Fallback: Default-Mapping), alle Mappings entfernen, die in stats.json nicht angewählt sind
  4. getStatlist: Ruft vom Miniserver die Übersicht aller Statistikfiles ab. Gibt ein Array mit Monaten/Jahren (z.B. 201711, 201712,…) für diesen Baustein zurück. Die Statlist wird für 15 Minuten in der Ramdisk gecached.
  5. Schleife über alle verfügbaren Monate
    1. getMonthStat: Ruft vom Miniserver das Statistikfile dieses Monats ab und parst die Werte in ein Array mit [ Timestamp1: [ Wert1, Wert2 ], [ Timestamp2: [ Wert1, Wert2 ] ]
    2. submitData: Schleife über alle Timestamps
      1. Für jeden Timestamp wird das Mapping durchlaufen um z.B. Wert1 → Default, Wert1 → AQ, Wert2 → Q zu erzeugen
      2. Alle 5000 Werte wird Stats4Lox::loxone_lineformat mit dem bisher erstellten Array aufgerufen
  6. Im Statusfile wird vermerkt, dass dieser Import abgeschlossen ist.


Statusfile

Jeder Import eines Bausteins hat ein eigenständiges Statusfile als json.

Speicherort: $Globals::importstatusdir/import_<msno>_<uuid>.json

z.B. /opt/loxberry/data/plugins/stats4lox-ng/import/import_1_00ac8517-0961-11e1-99b9f25d750310ed.json

Datenstruktur des Statusfiles

Key Mögliche Werte Beschreibung
msno 1, 2, 3,… Miniserver-Nummer (zu Debugging-Zwecken)
uuid <uuid> UUID des Bausteins (zu Debugging-Zwecken)
name <name> Name des Bausteins (zu Debugging-Zwecken)
pid <pid> Prozess-ID des Import-Prozesses
starttime <epoch> Epoch des letzten Starts
endtime <epoch> Epoch des letzten Endes
statustime <epoch> Epoch der letzten Statusaktualisierung
status scheduled/<undefined> Noch nie gelaufen
running Läuft gerade
finished Erfolgreich abgeschlossen
error Mit Fehler abgebrochen
current <yyyymm> Aktuell bearbeitetes Monat
undefined/nicht definiertNoch nicht gestartet
finished.yyyymm Objektliste mit Monaten, die fehlerfrei abgeschlossen wurden.
finished.yyyymm.duration 15.5323 Durchlaufzeit in Sekunden (Float)
finished.yyyymm.count 8756 Übertragene Datensätze
finished.yyyymm.timestampcount4563 Anzahl der Timestamps des Monats
finished.yyyymm.endtime <epoch> Zeit des Abschlusses des erfolgreichen Imports

  

Beobachten des Statusfiles während des Imports:

watch -n 0.25 'tail -n 50 import_1_00ac8517-0961-11e1-99b9f25d750310ed.json'