diff --git a/Energy_Pie/module.php b/Energy_Pie/module.php index 2998e32..1133651 100644 --- a/Energy_Pie/module.php +++ b/Energy_Pie/module.php @@ -180,7 +180,11 @@ class Energy_Pie extends IPSModule if ($archiveID <= 0) { return 0.0; } - $values = @AC_GetLoggedValues($archiveID, $varId, max(0, $tStart - 86400), $tEnd, 0); + $tCalcEnd = min($tEnd, time()); + if ($tCalcEnd <= $tStart) { + return 0.0; + } + $values = @AC_GetLoggedValues($archiveID, $varId, max(0, $tStart - 86400), $tCalcEnd, 0); if (empty($values)) { return 0.0; } @@ -194,14 +198,31 @@ class Energy_Pie extends IPSModule $dbg['last'] = (float)$values[count($values) - 1]['Value']; $vStart = null; $vEnd = null; + $prev = null; + $sum = 0.0; foreach ($values as $v) { $ts = (int)$v['TimeStamp']; + $val = (float)$v['Value']; + + if ($ts <= $tStart) { + $vStart = $val; + $prev = $val; + continue; + } + + if ($ts > $tCalcEnd) break; + if ($ts >= $tStart && $ts < $tEnd) { $dbg['inRange']++; } - if ($ts <= $tStart) $vStart = (float)$v['Value']; - if ($ts <= $tEnd) $vEnd = (float)$v['Value']; - if ($ts > $tEnd) break; + + if ($prev !== null) { + $diff = $val - $prev; + $sum += ($diff >= 0) ? $diff : max($val, 0.0); + } + + $prev = $val; + $vEnd = $val; } if ($dbg['inRange'] === 0) { return 0.0; @@ -210,8 +231,7 @@ class Energy_Pie extends IPSModule if ($vEnd === null) $vEnd = $dbg['last']; $dbg['vStart'] = $vStart; $dbg['vEnd'] = $vEnd; - $diff = $vEnd - $vStart; - return ($diff < 0) ? 0.0 : (float)$diff; + return $sum; } private function getLastLogTimestamp(int $varId): int {