String Variable Export

Hallo Kollegen,

ist es möglich alle Werte einer geloggten Stringvariable zu exportieren (zB. csv).

Auch die Anzeige im Webfront ist offensichtlich begrenzt. Kann man das ändern?

DANKE+lg
hagi

Du kannst dir ein Mini-Skript schreiben, welches AC_GetLoggedValues aufruft. Beachte, dass es ein hartes Limit von 10000 Zeilen gibt, welches du zwar per Spezialschalter erhöhen kannst - aber am Ende nicht unendlich erhöht werden sollte.

Schau dir auch gerne unser Excel SDK an, falls das einfacher für dich ist :slight_smile:

paresy

Danke paresy und wie immer → viele Wege führen nach Rom :slight_smile:

Aber SDK und Kaspersky :see_no_evil: :rage: schon mal versucht - da kommen dir die Tränen.
Der löscht die Datei schneller als du schauen kannst.

danke für die Lösungsansätze.
lg
hagi

P.S. am einfachsten per script und alles ist gut → DANKE nochmal für den Anstoß

Moin zusammen,

die geloggten Werte stehen doch sowieso in csv Dateien oder hat sich da was geändert?

Korrekt - aber die sind ja auf die einzelnen Monate aufgeteilt. Sofern das kein Problem ist, kann er sich die auch dort „rausfischen“.

paresy

Hallo Zusammen,
im Rahmen eines Forschungsvorhabens will ich die gesamten LogDaten meiner Ladestationen der letzten Jahre aus IPS exportieren.
Da das Excel Tool ja auf 10.000 Datensätzen begrenzt ist, wird das schwierig - kann ich die Daten/Dateien auch direkt irgendwo aus dem IPS-Verzeichnis bekommen ? Wo/Wie finde ich die ?

Wenn du Windows nutzt, liegen die CSV-Daten unter:

C:\ProgramData\Symcon\db\2021\01

Für jede Variable gibt es eine Datei pro Monat. Pro Jahr und Monat gibt es jeweils ein Verzeichnis mit allen geloggten Variablen.
Bin gerade dabei mir ein Programm zu schreiben, das mir diese einzelnen Dateien pro Monat in eine einzige Datei schreibt. Bin aber kein Programmiere, so dass das wahrscheinlich noch etwas dauert…

1 „Gefällt mir“

Dieses Programm schreibt alle Archivdateien einer bestimmten Variable in eine .csv-Datei. Damit habe ich die Möglichkeit, die Dateien z.B. nach Fehlern zu durchsuchen oder Werte in einer anderen Datenbank zu speichern.
Das Programm geht die einzelnen Pfade durch. Dazu muss der Monat und das Jahr eingetragen werden, bei dem begonnen werden soll. Auch kann eingestellt werden, bis zu welchem Monat die Daten übertragen werden sollen.
Bei jedem Monat werden die neuen Werte sofort in die Ziel-Datei geschrieben. Gibt es die Datei schon werden die Werte angefügt. Für die getestete Variable hat die Ziel-Datei 39 MB und war damit zu groß für den Arbeitsspeicher. Programmlaufzeit (auf meinem i7) < 1 Sekunde.

Bin kein Programmierer, habe mich mit Google durchgeklickt :wink:
Vielleicht kann es jemand gebrauchen…

<?php

$var = "18201";  // ID Variable eintragen

$monat = 2;      // Erster Monat der ausgewertet werden soll
$jahr = 2014;    // Erstes Jahr das ausgewertet werden soll
$dat = 201402;   // Key aus erstem Jahr und erstem Monat (mit führender 0)
$ziel = 'C:\Daten\ ' . $var . '.csv';  // Ordner der Ergebnis-Datei

$monat_akt = date("m", time());
$jahr_akt = date("Y", time());

// Wenn Auswertung bis zum aktuellsten Wert erfolgen soll -> folgende beiden (!) Zeilen auskommentieren
$monat_akt = 11;  // Letzter Monat der ausgewertet werden soll 
$jahr_akt = 2021; // Letztes Jahr das ausgewertet werden soll

$content = "";
$ziel = preg_replace("/\s+/", "", $ziel); // Leerzeichen entfernen

    if ($monat_akt < 10)
    {
    $akt = $jahr_akt . "0" . $monat_akt;
    }
    else
    {
    $akt = $jahr_akt . $monat_akt;
    }

while($dat<=$akt){

// Verarbeitung
// echo $jahr . "  " . $monat . "\r\n";
$datei = 'C:\ProgramData\Symcon\db\ '  . $jahr . '\ ' .  ($monat < 10 ? "0" : "") . $monat . '\ ' . $var . '.csv';
$datei = preg_replace("/\s+/", "", $datei); // Leerzeichen entfernen

    if (file_exists($datei))
    {
    // Datei ist vorhanden
    $content = file_get_contents($datei);
    file_put_contents($ziel, $content, FILE_APPEND);
    }
    else
    {
    // Datei gibt es nicht    
    // echo "Datei gibt es nicht!". "\r\n";
    }

// Nächsten Ordner (Jahr & Monat) ermitteln
    if ($monat < 12)
    {
    $monat++;
    }
    else
    {
    $monat = 1;
    $jahr++;
    }

    if ($monat < 10)
    {
    $dat = $jahr . "0" . $monat;
    }
    else
    {
    $dat = $jahr . $monat;
    }

}

Man kann die Quelldatei auch Zeilenweise lesen und anfügen, anstatt dies am Stück zu machen. Das entlastet den Zwang nach Arbeitsspeicher deutlich.

Wie groß die Zieldatei ist, sollte eigentlich egal sein. Aber auch hier gilt, fwrite könnte Aufgrund dem gesamten Dateihandle effizienter sein.