From f606e3865ef848ab14167cc5e49b21ce6306edc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20H=C3=A4fliger?= Date: Thu, 6 Nov 2025 15:13:41 +0100 Subject: [PATCH] no message --- Abrechnung/module.php | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/Abrechnung/module.php b/Abrechnung/module.php index 215f45e..aa5e172 100644 --- a/Abrechnung/module.php +++ b/Abrechnung/module.php @@ -467,17 +467,42 @@ private function AddMeterToPDFRow($meter, $tariffs, $from, $to, $type) return null; } - private function readDelta($varId, $tStart, $tEnd) +private function readDelta($varId, $tStart, $tEnd) { - // Start: erster Wert NACH/AB tStart - $vStart = $this->GetValueAt($varId, $tStart, true); - // Ende: letzter Wert VOR/ BIS tEnd - $vEnd = $this->GetValueAt($varId, $tEnd, false); + $archiveID = @IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0]; + if (!$archiveID || !IPS_VariableExists($varId)) { + IPS_LogMessage('Abrechnung', "❌ Archiv oder Variable $varId nicht gefunden"); + return 0.0; + } + + $values = @AC_GetLoggedValues($archiveID, $varId, $tStart - 86400, $tEnd + 86400, 0); + if (empty($values)) { + IPS_LogMessage('Abrechnung', "⚠️ Keine Archivwerte für $varId im Zeitraum " . date('d.m.Y H:i', $tStart) . " – " . date('H:i', $tEnd)); + return 0.0; + } + + // Startwert = letzter <= tStart + $vStart = null; + foreach ($values as $v) { + if ($v['TimeStamp'] <= $tStart) $vStart = $v['Value']; + else break; + } + + // Endwert = letzter <= tEnd + $vEnd = null; + foreach ($values as $v) { + if ($v['TimeStamp'] <= $tEnd) $vEnd = $v['Value']; + else break; + } if ($vStart === null || $vEnd === null) return 0.0; - return max(0.0, floatval($vEnd) - floatval($vStart)); + + $diff = max(0.0, floatval($vEnd) - floatval($vStart)); + IPS_LogMessage('Abrechnung', sprintf(" ΔVar %d = %.4f (%.4f→%.4f)", $varId, $diff, $vStart, $vEnd)); + return $diff; } + private function getTariffPriceAt($tariffs, $typeSynonyms, $ts) { // passender unit_type