no message
This commit is contained in:
@@ -225,27 +225,43 @@ private function GetValueAt(int $varId, int $timestamp, bool $nearestAfter = tru
|
||||
return null;
|
||||
}
|
||||
|
||||
$maxDays = 365; // 🔹 maximal 1 Jahr zurück / vor suchen
|
||||
$stepDays = 7; // 🔹 Schrittweise Erweiterung (jeweils 7 Tage)
|
||||
$valueFound = null;
|
||||
|
||||
if ($nearestAfter) {
|
||||
// 🔹 Suche den ersten Wert nach dem gegebenen Zeitpunkt
|
||||
$values = @AC_GetLoggedValues($archiveID, $varId, $timestamp, $timestamp + 7 * 86400, 1000);
|
||||
if (!empty($values)) {
|
||||
foreach ($values as $v) {
|
||||
if ($v['TimeStamp'] >= $timestamp) {
|
||||
return floatval($v['Value']);
|
||||
for ($offset = 0; $offset <= $maxDays; $offset += $stepDays) {
|
||||
$from = $timestamp + $offset * 86400;
|
||||
$to = $from + $stepDays * 86400;
|
||||
$values = @AC_GetLoggedValues($archiveID, $varId, $from, $to, 1000);
|
||||
if (!empty($values)) {
|
||||
foreach ($values as $v) {
|
||||
if ($v['TimeStamp'] >= $timestamp) {
|
||||
$valueFound = floatval($v['Value']);
|
||||
break 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 🔹 Suche den letzten Wert vor dem gegebenen Zeitpunkt
|
||||
$values = @AC_GetLoggedValues($archiveID, $varId, $timestamp - 7 * 86400, $timestamp, 1000);
|
||||
if (!empty($values)) {
|
||||
return floatval($values[count($values) - 1]['Value']);
|
||||
for ($offset = 0; $offset <= $maxDays; $offset += $stepDays) {
|
||||
$from = $timestamp - ($offset + $stepDays) * 86400;
|
||||
$to = $timestamp - $offset * 86400;
|
||||
$values = @AC_GetLoggedValues($archiveID, $varId, $from, $to, 1000);
|
||||
if (!empty($values)) {
|
||||
$valueFound = floatval($values[count($values) - 1]['Value']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback – aktuellen Variablenwert nehmen
|
||||
if ($valueFound !== null) {
|
||||
return $valueFound;
|
||||
}
|
||||
|
||||
// ❗ Fallback, wenn gar nichts im Archiv gefunden wird
|
||||
$fallback = floatval(GetValue($varId));
|
||||
IPS_LogMessage('Abrechnung', "⚠ Kein Archivwert für $varId gefunden, nutze aktuellen Wert ($fallback)");
|
||||
IPS_LogMessage('Abrechnung', "⚠ Kein Archivwert für $varId im Umkreis von $maxDays Tagen gefunden, nutze aktuellen Wert ($fallback)");
|
||||
return $fallback;
|
||||
}
|
||||
|
||||
@@ -350,7 +366,7 @@ private function AddMeterToPDFRow($meter, $tariffs, $from, $to, $type)
|
||||
|
||||
|
||||
// Archivwerte lesen
|
||||
$startVal = $this->GetValueAt($varId, $segmentStart, false);
|
||||
$startVal = $this->GetValueAt($varId, $segmentStart, true);
|
||||
$endVal = $this->GetValueAt($varId, $segmentEnd, true);
|
||||
|
||||
if ($startVal === null || $endVal === null) {
|
||||
|
||||
Reference in New Issue
Block a user