ReneE
11. November 2024 um 17:53
1
Guten Abend,
mir ist vor einem Jahr mit einem aufgezeichneten Wert ein Missgeschickt passiert. Zumindest klang es da noch schlau von mir lag aber falsch.
Ich habe eine geloggte Float Variable mit reinweg umgekehrten Werten (also *-1). Nun bräuchte ich das aber genau andersherum zur Auswertung. Am Liebsten hätte ich einen Button im Archiv Control wo draufsteht „Werte umkehren“. Hat da jemand einen Workaround für?
Grüße
bumaas
11. November 2024 um 22:57
2
Vielleicht hilft dir mein kleines Skript weiter
Hallo,
ich möchte gerne die Archivwerte von einer Float-Variablen zu einer Integer Variablen transferieren.
Hat da vielleicht schon jemand ein Skript zu?
Burkhard
ReneE
12. November 2024 um 18:30
3
Besten dank! Das hat mir weitergeholfen
<?php
const VARIABLE_ID_FROM = 42406;
const VARIABLE_ID_TO = 38173;
const MAX = 1000;
$archiveID = IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
AC_SetLoggingStatus($archiveID, VARIABLE_ID_TO, true);
AC_SetAggregationType($archiveID, VARIABLE_ID_TO, AC_GetAggregationType($archiveID, VARIABLE_ID_FROM));
$endtime = 0;
$count = 0;
do {
$items = AC_GetLoggedValues($archiveID, VARIABLE_ID_FROM, 0, $endtime, MAX);
$values = [];
foreach ($items as $item) {
$endtime = $item['TimeStamp'] - 1;
// hier erfolgt die Konvertierung nach Integer
$values[] = ['TimeStamp' => $item['TimeStamp'], 'Value' => $item['Value'] *-1];
}
$count += count($values);
AC_AddLoggedValues($archiveID, VARIABLE_ID_TO, $values);
} while (count($items) === MAX);
AC_ReAggregateVariable($archiveID, VARIABLE_ID_TO);
echo sprintf('Es wurden %s Datensätze übertragen.', $count);