Archive 2 Probleme

Hi,
ich wollte Variablen im Archive neu skalieren. Ich wollte sie auslesen, umrechnen und wieder reinschreiben.

Ich hatte Archive Control mit der Liste der Variablen offen um zu sehen wie es vorher und hinterher war. In dieser Liste stand auch meine Variable.

Die alten Werte wollte ich mit AC_DeleteVariableData(32968, 31061,0,0); alle löschen. Jetzt habe ich meine Variable im Archive Control wieder doppelt geklickt und ich erhielt eine Endlosanimation von dem Häuschen. Das war das 1. Problem. Nicht nur die Daten sondern die komplette Variable wird aus dem Archive gelöscht.

Das 2. Problem war das bei dieser Variablen auch das Flag „alle Änderungen“ ins Archive schreiben weg war.

Vielleicht habe ich dann noch ein Verständnisproblem. Wenn ich

$werte = AC_GetLoggedValues(32968, 31061, time() - 30*86400 , time(), 0);

AC_AddLoggedValues(32968, 31061, $werte);

bekomme ich die Fehlermeldung:„Value contains invalid fields“. Warum?

Leider habe ich im neuen Forum den Thread zum Archive Control nicht gefunden deswegen neuer Thread.

Ralf

Hi Ralf,

das erste ist tatsächlich ein Feature. Wenn du alle Daten löscht, wird davon ausgegangen, dass du das Logging einfach nicht mehr benötigst und wir entfernen alles.

Schau mal bitte in die CSV Rohdaten. Dort sind bestimmt kaputt Daten drin.

paresy

Hi,
wäre vielleicht nicht schlecht das „Feature“ in der Doku zu erwähnen:-)

Zu der Fehlermeldung:
ich lese ja mit „$werte = AC_GetLoggedValues(32968, 31061, time() - 30*86400 , time(), 0);“ die Daten ein, d.h. die Leseroutieneliefert die vermeintlich defekten Werte. Zum Testzeitpunkt standen nur 3 Werte drin. Kann es daran liegen das ich nur die selben Werte nochmal schreiben wollte und das intern mit einem falschen Fehler gemeldet wurde?

Ich habe es eben nochmal versucht gleiches Ergebnis. Ich sehe in den CSV auch keinen Fehler.
31061.zip (795 Bytes)

Ralf

Ich würde mal @Dr.Niels dazu holen für das Thema. Ich denke er kann dir dort mehr dazu sagen.

paresy

Hi,
meine Idee dahinter ist Werte neu zu skalieren. Später soll es so laufen Werte lesen, Werte löschen, Werte neu skalieren, Werte schreiben.

Ralf

Falls möglich würde ich diese Umrechnung direkt über eine zweite Variable empfehlen. Das Modifizieren der Variablen ist nicht effizient und die notwendige Reaggregation im Anschluss benötigt ebenfalls auf lange Sicht immer mehr Ressourcen.

paresy

Moin,
das ist nur für spezielle Fälle gedacht. Ich ließ Speicher in Byte loggen wollte es aber in GByte haben. Es ist nicht gedacht das ich dieses Verfahren oft benutze.

Für diesen Fall kann ich es aber so machen das ich eine neue Variable anlegen, AC_SetLoggingStatus benutze um Loggen einzuschalten und dort dann die Werte hinzuzufügen.

Trotzdem ist die Fehlermeldung irreführend.

Ralf

Definitiv. Das schauen wir uns an!

paresy

Hallo,
die Fehlermeldung kommt zustande, da die Rückgabe von AC_GetLoggedValues drei Felder beinhaltet: TimeStamp, Value und Duration. Die Funktion AC_AddLoggedValues erwartet allerdings nur zwei: TimeStamp und Value. Somit passen die nicht exakt aufeinander und es kommt zur beschriebenen Fehlermeldung.
Das kannst du also beheben, indem du Duration herausfilterst. Ich glaube das einfachste ist es ein neues Array zu erstellen und dort von jedem Wert der geloggten Werte den Zeitstempel und den Wert zu kopieren.

Hi,
danke für die Erklärung. Schade das es nicht so einfach geht wie ich dachte. Ist aber kein Problem.

Ralf

Hallo,

bräuchte einmal einen Anschub-Tipp:

ich hole Werte Array mit:
$werte = AC_GetAggregatedValues(58529, 21260, 3 ,mktime(0, 0, 0, 1, 1, 2013), mktime(23, 59, 59, 12, 31, 2020), 0);

Das Ergebnis array sieht so aus:

Array(96) {
[0]=>
array(7) {
[„Duration“]=>
int(16924684)
[„TimeStamp“]=>
int(1606777200)
[„Avg“]=>
float(0)
[„MinTime“]=>
int(1606777200)
[„Min“]=>
float(2147483647)
[„MaxTime“]=>
int(1606867835)
[„Max“]=>
float(0)
}

wie mache bekomme ich aus diesem array ein array mit timestamp und avg value
so dass es mit
AC_AddLoggedValues (58529, 30598, $werte);

geschrieben werden kann ?

VG

Frank

hmm, ich antworte mir mal selbst:
hab mir mit for-each schleife ein neues array mit 2 werten gebastelt.
Aber jetzt bekomme ich
Warning: Value is missing Value field in C:\ProgramData\Symcon\scripts\21965.ips.php on line 15

so sieht das array aus: was ist wohl falsch ?
array(96) {
[0]=>
array(2) {
[„TimeStamp“]=>
int(1606777200)
[„Avg“]=>
float(0)
}
[1]=>
array(2) {
[„TimeStamp“]=>
int(1604185200)
[„Avg“]=>
float(119,7193)
}
u.s.w.

ok, jetzt hab ich es, feld muss auch Value heissen und nicht ‚Avg‘

array(96) {
[0]=>
array(2) {
[„TimeStamp“]=>
int(1606777200)
["Value“]=>
float(0)
}