====== 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 ===== - Erstellung des Logs, Validierungen - Öffnen bzw. Erzeugen des Statusfiles - **new Import**: Import-Klasse instanzieren - **getStatsjsonElement**: stats.json lesen und msno+uuid suchen - **getLoxoneLabels**: Live-Request gegen den Miniserver zum Auslesen der Output-Labels des Bausteins - **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 - **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. - Schleife über alle verfügbaren Monate - **getMonthStat**: Ruft vom Miniserver das Statistikfile dieses Monats ab und parst die Werte in ein Array mit [ Timestamp1: [ Wert1, Wert2 ], [ Timestamp2: [ Wert1, Wert2 ] ] - **submitData**: Schleife über alle Timestamps - Für jeden Timestamp wird das Mapping durchlaufen um z.B. Wert1 → Default, Wert1 → AQ, Wert2 → Q zu erzeugen - Alle 5000 Werte wird **Stats4Lox::loxone_lineformat** mit dem bisher erstellten Array aufgerufen - 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__.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 des Bausteins (zu Debugging-Zwecken) | |name | |Name des Bausteins (zu Debugging-Zwecken) | |pid | |Prozess-ID des Import-Prozesses | |starttime | |Epoch des letzten Starts | |endtime | |Epoch des letzten Endes | |statustime | |Epoch der letzten Statusaktualisierung | |status |scheduled/ |Noch nie gelaufen | | |running |Läuft gerade | | |finished |Erfolgreich abgeschlossen | | |error |Mit Fehler abgebrochen | |current | |Aktuell bearbeitetes Monat | | |undefined/nicht definiert|Noch 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.timestampcount|4563 |Anzahl der Timestamps des Monats | |finished.yyyymm.endtime | |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'%%''