no message
This commit is contained in:
+52
-12
@@ -432,46 +432,86 @@ private function AddMeterToPDFRow($meter, $tariffs, $from, $to, $type)
|
|||||||
|
|
||||||
private function readDelta($varId, $tStart, $tEnd)
|
private function readDelta($varId, $tStart, $tEnd)
|
||||||
{
|
{
|
||||||
|
// Zeitangaben normalisieren
|
||||||
if (!is_int($tStart)) $tStart = strtotime($tStart);
|
if (!is_int($tStart)) $tStart = strtotime($tStart);
|
||||||
if (!is_int($tEnd)) $tEnd = strtotime($tEnd);
|
if (!is_int($tEnd)) $tEnd = strtotime($tEnd);
|
||||||
|
|
||||||
|
// Archiv-Instanz finden
|
||||||
$archiveID = @IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
|
$archiveID = @IPS_GetInstanceListByModuleID('{43192F0B-135B-4CE7-A0A7-1475603F3060}')[0];
|
||||||
if (!$archiveID || !IPS_VariableExists($varId)) {
|
if (!$archiveID || !IPS_VariableExists($varId)) {
|
||||||
IPS_LogMessage('Abrechnung', "❌ Archiv oder Variable $varId nicht gefunden");
|
IPS_LogMessage('Abrechnung', "❌ Archiv oder Variable $varId nicht gefunden");
|
||||||
return 0.0;
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Archivdaten abrufen (+/- 1 Tag Puffer)
|
||||||
$values = @AC_GetLoggedValues($archiveID, $varId, $tStart - 86400, $tEnd + 86400, 0);
|
$values = @AC_GetLoggedValues($archiveID, $varId, $tStart - 86400, $tEnd + 86400, 0);
|
||||||
IPS_LogMessage('Abrechnung', sprintf(
|
$count = is_array($values) ? count($values) : 0;
|
||||||
"🧩 readDelta(%d): Zeitraum %s – %s | Werte gefunden: %d",
|
IPS_LogMessage('Abrechnung', sprintf("📘 readDelta(%d): Zeitraum %s – %s | %d Werte gefunden",
|
||||||
$varId, date('d.m.Y H:i', $tStart), date('H:i', $tEnd), count($values)
|
$varId, date('d.m.Y H:i', $tStart), date('H:i', $tEnd), $count
|
||||||
));
|
));
|
||||||
|
|
||||||
if (empty($values)) return 0.0;
|
// Wenn gar nichts gefunden → abbrechen
|
||||||
|
if ($count === 0) {
|
||||||
|
IPS_LogMessage('Abrechnung', "⚠️ Keine Archivwerte für $varId im Zeitraum.");
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🔍 Nur die ersten 10 Werte loggen, damit das Log nicht explodiert
|
||||||
|
$maxLog = 10;
|
||||||
|
$i = 0;
|
||||||
|
foreach ($values as $v) {
|
||||||
|
IPS_LogMessage('Abrechnung', sprintf(
|
||||||
|
" 🕒 %s | %.5f",
|
||||||
|
date('d.m.Y H:i:s', intval($v['TimeStamp'])), floatval($v['Value'])
|
||||||
|
));
|
||||||
|
$i++;
|
||||||
|
if ($i >= $maxLog) {
|
||||||
|
IPS_LogMessage('Abrechnung', " ... (+ " . ($count - $i) . " weitere Werte)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🔹 Sortieren und in Float umwandeln
|
||||||
usort($values, fn($a, $b) => intval($a['TimeStamp']) <=> intval($b['TimeStamp']));
|
usort($values, fn($a, $b) => intval($a['TimeStamp']) <=> intval($b['TimeStamp']));
|
||||||
foreach ($values as &$v) {
|
foreach ($values as &$v) {
|
||||||
$v['TimeStamp'] = intval($v['TimeStamp']);
|
$v['TimeStamp'] = intval($v['TimeStamp']);
|
||||||
$v['Value'] = floatval($v['Value']);
|
$v['Value'] = floatval($v['Value']);
|
||||||
}
|
}
|
||||||
|
unset($v);
|
||||||
|
|
||||||
|
// 🔹 Letzter Wert <= Start
|
||||||
$vStart = null;
|
$vStart = null;
|
||||||
$vEnd = null;
|
|
||||||
|
|
||||||
foreach ($values as $v) {
|
foreach ($values as $v) {
|
||||||
if ($v['TimeStamp'] <= $tStart) $vStart = $v['Value'];
|
if ($v['TimeStamp'] <= $tStart) $vStart = $v['Value'];
|
||||||
if ($v['TimeStamp'] <= $tEnd) $vEnd = $v['Value'];
|
if ($v['TimeStamp'] > $tStart) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🔹 Letzter Wert <= Ende
|
||||||
|
$vEnd = null;
|
||||||
|
foreach ($values as $v) {
|
||||||
|
if ($v['TimeStamp'] <= $tEnd) $vEnd = $v['Value'];
|
||||||
if ($v['TimeStamp'] > $tEnd) break;
|
if ($v['TimeStamp'] > $tEnd) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
IPS_LogMessage('Abrechnung', sprintf(
|
// Fallback, falls keine gefunden
|
||||||
" ↳ Start=%.5f End=%.5f Diff=%.5f (Var %d)",
|
if ($vStart === null) {
|
||||||
$vStart ?? -1, $vEnd ?? -1, ($vEnd ?? 0) - ($vStart ?? 0), $varId
|
$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");
|
||||||
|
}
|
||||||
|
|
||||||
if ($vStart === null || $vEnd === null) return 0.0;
|
|
||||||
$diff = $vEnd - $vStart;
|
$diff = $vEnd - $vStart;
|
||||||
if ($diff < 0) $diff = 0.0;
|
if ($diff < 0) $diff = 0.0;
|
||||||
|
|
||||||
|
IPS_LogMessage('Abrechnung', sprintf(
|
||||||
|
"📈 ΔVar %d = %.5f (%.5f → %.5f) [%s → %s]",
|
||||||
|
$varId, $diff, $vStart, $vEnd,
|
||||||
|
date('d.m.Y H:i', $tStart), date('H:i', $tEnd)
|
||||||
|
));
|
||||||
|
|
||||||
return $diff;
|
return $diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user