Archivumbau zur 5.5

Hi,
ich musste einen Sensor mit Temperatur, Luftfeuchtigkeit und Luftdruck austauschen. Um Daten nicht zu verlieren habe ich im Archive Daten transferieren benutzt und auf die jeweiligen, neuen Variablen gezeigt.

Wunsch wäre das dann auch gleich „Alle Variablenänderungen aufzeichnen“ für die neue Variable aktiviert wird.

Ich hatte es erst aktiviert dann meckerte aber Archive Control beim transferieren weil es ja schon Daten gab. Nach dem Transferieren hatte ich dann aber die Aufzeichnung nicht aktiviert.

Ralf

Die Variable sollte beim Transferieren eigentlich mit allen Archiveinstellungen übernommen werden. Sprich, wird die alte Variable geloggt, dann wird danach die neue auch geloggt. Das ist meiner Meinung nach auch sinnvoll. So werden nämlich beispielsweise auch korrekt Zähler bzw. Standardaggregation gesetzt.

Weißt du, ob das Logging bei der alten Variablen vor dem Transfer aktiv war?

Moin,
die alte Variable gab es nicht mehr. Grund war eine defekte Instanz und ich musste die defekte Instanz mit den Variablen löschen bevor ich eine neue Instanz mit den Variablen anlegen konnte.

Ralf

Auch wenn die Variable nicht mehr existierte, sollten die Archiveinstellungen im Archiv noch vorhanden sein. Das teste ich aber nochmal.

Danke. Ich hoffe aber das es nicht allzu oft bei mir vorkommt.

Ralf

Moin Dr.Niels,

bei Skripten wo mit AC_AddLoggedValues historische Werte zugefügt werden kommt es immer wieder zu dieser Fehlermeldung

07.04.2021, 16:52:00 | Archive Control | Could not delete file 2020/03/11304.csv on 1. try, will retry: boost::filesystem::remove: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: „C:\ProgramData\Symcon\db/2020/03/11304.csv“

Dies ist bei Corona-, Zähler- und auch den Sportdaten jeweils der Fall gewesen. Wie kann man das vermeiden oder kann man es ignorieren?

Ergänzend kommt noch hinzu, dass in seltenen Fällen sich die Reaggregation in der Pro Konsole aufhängt - gerade nach solchen Meldungen. Klickt man auf abbrechen hängt das System und kann nur noch mit dem Taskmanager beendet werden.

IP-Symcon 5.5, Windows x64, 17.03.2021, e149a62e5f6a

Gruß
Hans

Moin,

noch ein Nachtrag: das Problem tritt überwiegend bei dem deutlich langsameren Produktivsystem auf. Der sehr viel schnellere Entwicklungsrechner hat das Problem nur bei sehr großen Datenmengen.

Gruß
Hans

Hallo Hans,

schlägt der Zugriff auch immer nur beim ersten Versuch zu (also mit Text „on 1. try“), oder auch weitere und bricht eventuell gar ab?

Es kann gut sein, dass die Datei gerade von einem anderen Prozess genutzt wird, beispielsweise von einem Virenscanner oder dergleichen. Dann kann sie aber halt nicht gelöscht werden und das wird kurz darauf noch einmal probiert.

Moin Dr.Niels,

es gibt manchmal auch mehrere Versuche. Außer den MS eigenen Virenscanner habe ich keine externe Software dafür am Laufen.

Das Problem tritt und trat immer dann auf, wenn Wert mit AC_AddLoggedValues angelegt werden.

Gruß
Hans

Der Fehler ist ja nicht das erste mal aufgetreten. Vorher schlug das Hinzufügen der Werte nur fehl, jetzt wird es mehrfach versucht, was in deinem Fall das Problem auch löst. Ich hatte bei mir recht umfangreich versucht den Fehler (Symcon-intern) nachzustellen, was allerdings nicht geklappt hat. Wenn du also in die Tiefe gehen möchtest, dann müsstest du hier weiter suchen und herausfinden, welcher Prozess für den Zugriff verantwortlich ist.

Moin Niels,

ich werde das weiter beobachten und am Wochenende Tests mit und ohne Defender durchführen. Mal sehen, ob ich neue Erkenntnisse gewinne :slight_smile: Vielleicht hat der PC ja einen Virus, weil es sich um Corona Daten handelt :loveips:

Gruß
Hans

Moin Niels,

dieses kleine Skript

AC_DeleteVariableData(KID_ARCHIV, $IdVar, 0, 0);
AC_SetLoggingStatus(KID_ARCHIV, $IdVar, true);
AC_SetAggregationType(KID_ARCHIV, $IdVar, 1);
AC_AddLoggedValues(KID_ARCHIV, $IdVar, [['TimeStamp' => mktime(0, 0, 0, 1, 1, 2020), 'Value' => 0]]);
AC_ReAggregateVariable(KID_ARCHIV, $IdVar);

liefert

09.04.2021, 16:47:31 | Archive Control      | Reaggregation für VariablenID #37262 abgeschlossen! (1 Einträge)

dieses Ergebnis in der Konsole. Öffnet man das Archiv wird auch nur 1 Datensatz angezeigt, was aber falsch ist, denn im Archiv befinden sich 2 Datensätze: Der im Skript angelegte Nullsatz und der seit V5.5 generierte neue Datensatz mit dem Wert Null. Reaggregiert man nun in der Konsole die Variablen so wird danach auch prompt angezeigt, dass 2 Datensätze vorhanden sind :slight_smile:

Also ist das Ergebnis der Reaggregation im Skript nicht identisch mit dem aus der Konsole. Auch ein Einfügen von IPS_ApplyChanges(KID_ARCHIV) nach AC_SetAggregationType bringt kein anderes Ergebnis.

Übrigens bringt auch ein weiterer Befehl zum Reaggregieren nach 2 s Pause keine Änderung. Irgendwie wird die vom System angelegte Variable im Skript nicht berücksichtigt.

Gruß
Hans

Moin Niels,

das habe ich getan :slight_smile: Die Sequenz im vorherigen Beitrag könnte der Schlüssel zum Problem sein. Du kannst Variablen hinzufügen wie du willst, mit Pausen und ohne Pausen, es wird immer ein Wert weniger angezeigt als real Werte im Archiv vorhanden sind - vermutlich der neue systeminterne Nullsatz.

Die Deadlocks treten nämlich unmittelbar nach Ausführung dieser Sequenzen auf. Meine Vermutung ist, dass dieser nicht angezeigte Nullsatz das Problem auslöst, indem er für das Locken der Datei verantwortlich ist :wink:

Diese Deadlocks habe ich in 3 verschiedenen Skripten in denen historische Daten übernommen werden. Die Sportdaten, Zählerdaten eines Stromzählers und jetzt die Coronadaten. Das kann also eigentlich kein Zufall sein.

Unklar dabei ist, warum es nicht immer passiert und wenn es passiert, warum es dann nicht immer die identische Variable betrifft. Vielleicht hilft es euch ja beim Nachstellen des Fehlers. Da bei mir der Fehler auf dem langsameren System häufiger auftritt könnte es sinnvoll sein, dass die Tests nicht unbedingt auf einem 12 Kerner durchgeführt werden :slight_smile:

Nachtrag: Wenn man das Archiv öffnet und nur die eine Variable reaggregiert, wird anschließend nur ein Datensatz angezeigt - also gleiches Verhalten wir im Skript. Reaggregiert man allerdings alle Variablen dann werden 2 Datensätze angezeigt :roll_eyes:

Gruß
Hans

Der „fehlende Wert“ kommt daher, dass das Archiv die geloggten Werte alle Minute schreibt, AC_AddLoggedValues ist hiervon eine Ausnahme, die sofort geschrieben wird. Daher ist bei einer direkten Ausführung der Reaggregation dann auch nur der hinzugefügte Wert da. Wenn du ein wenig wartest und dann reaggregierst, dann werden auch beide Werte da sein. (Und wenn du es nicht tust, dann wird der zusätzliche Wert nach spätestens einer Minute kontinuierlich dazu aggregiert)

Das ist also in dem Sinne kein Fehler sondern der Struktur des Archivs geschuldet.

Wo kommen jetzt eigentlich die Deadlocks her? Bisher hattest du die (hauptsächlich kosmetische) Meldung, dass das Schreiben mehrfach erfolgt und halt der eine Datensatz, der erst später dazukommt. Deadlocks habe ich gerade nicht parat. Verstehe ich da etwas falsch?

Moin Niels,

danke, dann herrscht hier schon mal Klarheit :slight_smile:

Wo kommen jetzt eigentlich die Deadlocks her? Bisher hattest du die (hauptsächlich kosmetische) Meldung, dass das Schreiben mehrfach erfolgt und halt der eine Datensatz, der erst später dazukommt.

Also kann man die Meldungen dass erneut versucht wird den Satz zu schreiben ignorieren oder?

Warning:  boost::filesystem::rename: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: "C:\ProgramData\Symcon\db/2021/03/_11001.csv", "C:\ProgramData\Symcon\db/2021/03/11001.csv" in C:\ProgramData\Symcon\scripts\51765.ips.php on line 300

Was ist denn mit diesen Meldungen? Mal kann er temporäre Dateien nicht umbenennen und manchmal nicht löschen - die Stochastik ist geblieben. Die obige Meldung kam direkt nach einem AC_AddLoggedValues, d. h. es sollte ein Wert zugefügt werden aber ein anderer Prozess wollte die Datei umbenennen (ich war das nicht) :wink:

Den Defender habe ich auch mal probeweise ausgeschaltet. Dann verliert allerdings die Konsole vollständig die Verbindung und startet neu :roll_eyes:

Gruß
Hans

Das rename ist das AC_AddLoggedValues. Das klappt allerdings nicht, da irgend ein Prozess die Datei belegt. Technisch wird im Hintergrund eine neue Datei mit den Werten angelegt (_11001.csv). Wenn die dann fertig ist, wird die alte 11001.csv gelöscht und die _11001.csv zu 11001.csv umbenannt. Und das klappt halt nicht. Da die Datei mit _ gerade neu dazugekommen ist, ist diese natürlich ein Kandidat für Virenscanner und dergleichen um sich die mal anzuschauen.

Moin Niels,

ich habe die Datenübernahme jetzt mit ausgeschaltetem Defender - alle Einstellungen für Viren- und Bedrohungsschutz auf aus - durchgeführt. Auch diesmal kamen die Meldungen mit bis zu 9 Versuchen. Wie lange ist denn eure Pause. Ich verzögere das jetzt jeweils mit 5 s, wenn AC_AddLoggedValues fehlschlägt.

Für die Virenscanner Problematik spricht, dass sie die Stochastik erklären würde, da es ja immer andere Variablen betrifft. Vielleicht lässt sich der Defender nicht wirklich ausschalten.

Ich werde jetzt alle AC_AddLoggedValues abfangen und bis zu 2-mal 5 s warten. Sollte das auch nicht helfen, dann werde ich die Übernahme wieder wie früher auf die direkte Erzeugung der csv-Dateien umstellen. So hatte ich es auch vor der V5.5 bei den Sportdaten und da hat es nie ein Problem gegeben. Bei der Technik werden auch keine csv-Dateien gelöscht (nur beim Start) oder umbenannt.

Gruß
Hans

Moin Niels, moin paresy,

ich muss nochmals auf dieses Thema zurückkomen.

Ich wollte aus Energieverbrauchswerten mittels AC_AddLoggedValues die entsprechenden Kosten loggen. Auf dem schnellen Entwicklungssystem lief das durch. Auf dem langsameren Produktivsystem kam es massenhaft zu diesem bekannten Fehler.

Warning: boost::filesystem::rename: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: "C:\ProgramData\Symcon\db/2021/05/_59714.csv", "C:\ProgramData\Symcon\db/2021/05/59714.csv" in C:\ProgramData\Symcon\scripts\26042.ips.php on line 42
20.05.2021 11:14:59 -> 1710,459899414 -> 513,14 

Warning: boost::filesystem::rename: Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: "C:\ProgramData\Symcon\db/2021/05/_59714.csv", "C:\ProgramData\Symcon\db/2021/05/59714.csv" in C:\ProgramData\Symcon\scripts\26042.ips.php on line 42
20.05.2021 11:19:55 -> 1710,566599609 -> 513,17 

Von den 12.700 Sätzen die erzeugt hätten müssen wurden nur 4.300 Sätze angelegt. Ich kann mir beim besten Willen nicht vorstellen, dass dieser Part in IPS wirklich komplett ok ist.

Gruß
Hans

Moin,

es scheint tatsächlich der Win 10 Virenscanner zu sein. Der Antimalware Service Executeable und IPS belegen jeweils 30 % der CPU während das Skript ausgeführt wird. Ist das Skript fertig belegt der Antimalware Service Executeable weniger als 1 %.

Also werde ich den Fehler wieder abfangen und entsprechende Wartezeiten einbauen.

Nachtrag: Es ist mir eben gelungen, den Echtzeitschutz für die Laufzeit des Skriptes zu deaktivieren und alle Datensätze wurden komplett ohne Fehlermeldungen ausgegeben.

Gruß
Hans

Zur Archiv-Funktion hätte ich gleich mal eine Frage.

Ich schlage mich aktuell gerade mit einem, eigentlich trivialen Problem herum.
Ich möchte in Higcharts den „Ein/Aus“-Status von diversen Schaltern abbilden
(konkret geht es aktuell um die Überwachung der Pool-Desinfektion)

Da im Archiv ja immer nur der „veränderte“ Wert abgespeichert wird, sieht die Abbildung in Highcharts leider immer sehr blöd aus, da Ein- und Ausschaltzeitpunkt immer als schräge Linie abgebildet werden. Nun dachte ich mir, kein Problem, schreibst Du eben bei Änderung der Variable erst den alten und nach einer Sekunde den neuen Wert in eine Variable.
Funktioniert nur leider nicht, weil mit der Archiv-Funktion die Variable eben immer nur einen verändeten Wert speichert.

Habt Ihr da evtl nen Tip für mich?
Vielen Dank schon mal
Jens