Metainformationen zur Seite
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_<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 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 | <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'