no message

This commit is contained in:
2025-11-06 15:19:14 +01:00
parent f606e3865e
commit eb0f6e05ed
+37 -12
View File
@@ -469,36 +469,61 @@ 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);
$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;
}
// 🔍 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 Zeitraum " . date('d.m.Y H:i', $tStart) . " " . date('H:i', $tEnd));
IPS_LogMessage('Abrechnung', "⚠️ Keine Archivwerte für $varId im Bereich " . date('d.m.Y H:i', $tStart) . "" . date('H:i', $tEnd));
return 0.0;
}
// Startwert = letzter <= tStart
// 🔹 Letzter Wert <= Startzeitpunkt
$vStart = null;
foreach ($values as $v) {
if ($v['TimeStamp'] <= $tStart) $vStart = $v['Value'];
else break;
foreach (array_reverse($values) as $v) {
if ($v['TimeStamp'] <= $tStart) {
$vStart = floatval($v['Value']);
break;
}
}
// Endwert = letzter <= tEnd
// 🔹 Letzter Wert <= Endzeitpunkt
$vEnd = null;
foreach ($values as $v) {
if ($v['TimeStamp'] <= $tEnd) $vEnd = $v['Value'];
else break;
foreach (array_reverse($values) as $v) {
if ($v['TimeStamp'] <= $tEnd) {
$vEnd = floatval($v['Value']);
break;
}
}
if ($vStart === null || $vEnd === null) return 0.0;
// 🔸 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)
));
$diff = max(0.0, floatval($vEnd) - floatval($vStart));
IPS_LogMessage('Abrechnung', sprintf(" ΔVar %d = %.4f (%.4f→%.4f)", $varId, $diff, $vStart, $vEnd));
return $diff;
}