Zählerwerte korrigieren (Mathematisches Problem)

Hallo miteinander.
Vielleicht ist ja jemand mit guten Mathematikkenntnissen unter euch, der einen fixen Einfall für mein Berechnungsproblem hat.

Problem:
Ich habe eine komulative Zählerabweichung, welche durch Störeinwirkungen auf einen meiner Zählerwerte wirkte.
Jetzt möchte ich gerne die Zählerwerte im Archiv so manipulieren, dass diese wieder auf den richtigen Zählerwert kommen.

01.07.2021 → Wert 7369 / Digital und analog ok.
01.12.2021 → Wert digital: 8139 / Wert analog: 7765

Hat hierfür jemand eine gute Idee, wie ich die Werte so berechne, dass diese „gleichmäßig“ korrigiert werden?

Grüße
Stefan

Ich würde es so machen:

Du hast eine analoge Differenz von 7765 - 7369 = 396 und eine digitale Differenz von 8139 - 7369 = 770.

Und somit einen Abweichungsfaktor von 770/396 = 1,94.

Damit kannst du deine neuen Werte berechnen:

neuer digitaler Wert = 7369 + (analoger Wert - 7369) / 1,94

Burkhard

Hallo Burkhard,
vielen Dank für deine Antwort. Bin mittlerweile mit mehr nachdenken auch auf eine Lösung gekommen.
Es wurde ca. das doppelte gezählt (der von dir errechnete Faktor von 1,94). Ich kalkuliere jetzt die Werte neu ab dem Zeitpunkt als der Zählerwert auseinander gelaufen ist und nehme immer ca. 50% der sich bildenden differenz.

Schaut dann so aus:

$debug = TRUE;
$SourceID = 12481 ; // Variable mit Zählerwert
$TargetID = 27266; // Zielvariable 
$ArchiveList = IPS_GetInstanceListByModuleID("{43192F0B-135B-4CE7-A0A7-1475603F3060}"); // Archivinstanzen abrufen
$ArchiveID = $ArchiveList[0]; // !!! Es wird die erste gefundene Archivinstanz verwendet

$StartDate="01.07.2021";

$Startvalue = 7368.36;

if ($debug){$beginn = microtime(true); };
$d = 0;
$timestamp = 0;
$start = new DateTimeImmutable($StartDate);
$starttime = strtotime($start->format('Y-m-d H:i:s'));

AC_DeleteVariableData($ArchiveID, $TargetID, 0, 0);
AC_SetLoggingStatus($ArchiveID , $TargetID, true);

while ($starttime < strtotime('today')){

    $datetime = $start->modify('+'.$d.' day');
    $starttime = strtotime($datetime->format('Y-m-d H:i:s'));
    $datetime = $datetime->modify('+1 day');
    $endtime = strtotime($datetime->format('Y-m-d H:i:s'));

    if ($debug){echo "Starttime: ".date('d.m.Y H:i:s', $starttime).PHP_EOL;};

    $logData = AC_GetLoggedValues($ArchiveID, $SourceID,  $starttime, $endtime, 0); //Datensätze abfragen

    $entries = count($logData);// Anzahl der Werte

    if ($debug){echo "Einträge: ".$entries.PHP_EOL;};

    

    if ($entries >0) {
  
        for ($i = ($entries-1); $i > 0; $i--){

                $diff = $logData[$i]['Value']-$Startvalue;
                if ($debug){echo "Diff: ".$diff.PHP_EOL;};
                $diff_50 = $diff *0.515; //50%
                $value = $Startvalue + $diff_50;
                if ($debug){echo "Diff: ".$value.PHP_EOL;};
                $timestamp = $logData[$i]['TimeStamp'];
                AC_AddLoggedValues ($ArchiveID, $TargetID, [['TimeStamp' => $timestamp,'Value' => $value]]);

        }
    }


    $d++;

}

AC_SetAggregationType ($ArchiveID, $TargetID, 1);
AC_ReAggregateVariable ($ArchiveID, $TargetID);
if ($debug){
$dauer = round(microtime(true) - $beginn,2); 
echo "Verarbeitung des Skripts: $dauer Sek.";
}

Nochmals vielen Dank für deine Mühe.

Grüße
Stefan