From 8106e14ee7cc84c01a72f75603e1888351fca2ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=A4fliger?= Date: Thu, 6 Nov 2025 16:02:06 +0100 Subject: [PATCH] no message --- Abrechnung/module.php | 70 +++++++++++++++++-------------------------- 1 file changed, 28 insertions(+), 42 deletions(-) diff --git a/Abrechnung/module.php b/Abrechnung/module.php index ea50eb1..4ed8c96 100644 --- a/Abrechnung/module.php +++ b/Abrechnung/module.php @@ -432,7 +432,6 @@ private function AddMeterToPDFRow($meter, $tariffs, $from, $to, $type) private function readDelta($varId, $tStart, $tEnd) { - // 🕒 Eingangsparameter vereinheitlichen if (!is_int($tStart)) $tStart = strtotime($tStart); if (!is_int($tEnd)) $tEnd = strtotime($tEnd); @@ -442,55 +441,42 @@ private function readDelta($varId, $tStart, $tEnd) return 0.0; } - // 🔍 1 Tag Puffer auf beiden Seiten, damit auch bei Lücken Werte gefunden werden $values = @AC_GetLoggedValues($archiveID, $varId, $tStart - 86400, $tEnd + 86400, 0); - if (empty($values)) { - IPS_LogMessage('Abrechnung', "⚠️ Keine Archivwerte für $varId im Bereich " . date('d.m.Y H:i', $tStart) . "–" . date('H:i', $tEnd)); - return 0.0; - } - - // 🔹 Letzter Wert <= Startzeitpunkt - $vStart = null; - foreach (array_reverse($values) as $v) { - if ($v['TimeStamp'] <= $tStart) { - $vStart = floatval($v['Value']); - break; - } - } - - // 🔹 Letzter Wert <= Endzeitpunkt - $vEnd = null; - foreach (array_reverse($values) as $v) { - if ($v['TimeStamp'] <= $tEnd) { - $vEnd = floatval($v['Value']); - break; - } - } - - // 🔸 Falls keine passenden Werte: Fallback auf aktuellen Variablenwert - if ($vStart === null) { - $vStart = floatval(GetValue($varId)); - IPS_LogMessage('Abrechnung', "⚠️ Kein Startwert gefunden – nutze aktuellen Wert $vStart"); - } - if ($vEnd === null) { - $vEnd = floatval(GetValue($varId)); - IPS_LogMessage('Abrechnung', "⚠️ Kein Endwert gefunden – nutze aktuellen Wert $vEnd"); - } - - // 🔹 Differenz - $diff = $vEnd - $vStart; - if ($diff < 0) $diff = 0.0; // Negative Differenzen vermeiden (z. B. bei Reset) - IPS_LogMessage('Abrechnung', sprintf( - "📈 ΔVar %d = %.4f (%.4f → %.4f) [%s → %s]", - $varId, $diff, $vStart, $vEnd, - date('d.m.Y H:i', $tStart), date('H:i', $tEnd) + "🧩 readDelta(%d): Zeitraum %s – %s | Werte gefunden: %d", + $varId, date('d.m.Y H:i', $tStart), date('H:i', $tEnd), count($values) )); + if (empty($values)) return 0.0; + + usort($values, fn($a, $b) => intval($a['TimeStamp']) <=> intval($b['TimeStamp'])); + foreach ($values as &$v) { + $v['TimeStamp'] = intval($v['TimeStamp']); + $v['Value'] = floatval($v['Value']); + } + + $vStart = null; + $vEnd = null; + + foreach ($values as $v) { + if ($v['TimeStamp'] <= $tStart) $vStart = $v['Value']; + if ($v['TimeStamp'] <= $tEnd) $vEnd = $v['Value']; + if ($v['TimeStamp'] > $tEnd) break; + } + + IPS_LogMessage('Abrechnung', sprintf( + " ↳ Start=%.5f End=%.5f Diff=%.5f (Var %d)", + $vStart ?? -1, $vEnd ?? -1, ($vEnd ?? 0) - ($vStart ?? 0), $varId + )); + + if ($vStart === null || $vEnd === null) return 0.0; + $diff = $vEnd - $vStart; + if ($diff < 0) $diff = 0.0; return $diff; } + private function getTariffPriceAt($tariffs, $typeSynonyms, $ts) { // passender unit_type