no message
This commit is contained in:
@@ -263,7 +263,8 @@ class Abrechnung extends IPSModule
|
||||
'solarverkauf' => 0.0,
|
||||
'cost_solar' => 0.0,
|
||||
'cost_grid' => 0.0,
|
||||
'rev_feedin' => 0.0
|
||||
'rev_feedin' => 0.0,
|
||||
'rev_zev' => 0.0
|
||||
];
|
||||
}
|
||||
|
||||
@@ -289,8 +290,6 @@ class Abrechnung extends IPSModule
|
||||
// Deltas je Zähler des Users
|
||||
foreach ($meters as $name => $mm) {
|
||||
|
||||
IPS_LogMessage("KostenModul", "---- Zähler '$name' wird verarbeitet ----");
|
||||
|
||||
$impDelta = 0.0;
|
||||
$expDelta = 0.0;
|
||||
|
||||
@@ -298,33 +297,20 @@ foreach ($meters as $name => $mm) {
|
||||
if (!empty($mm['importVar'])) {
|
||||
$varId = (int)$mm['importVar'];
|
||||
if (IPS_VariableExists($varId)) {
|
||||
IPS_LogMessage("KostenModul", "Import-Variable vorhanden: $varId");
|
||||
$impDelta = $this->getDeltaFromArchive($varId, $ts, $slotEnd);
|
||||
IPS_LogMessage("KostenModul", "importDelta = $impDelta");
|
||||
} else {
|
||||
IPS_LogMessage("KostenModul", "Import-Variable existiert NICHT: $varId");
|
||||
}
|
||||
} else {
|
||||
IPS_LogMessage("KostenModul", "Keine importVar für '$name' definiert.");
|
||||
}
|
||||
|
||||
// EXPORT
|
||||
if (!empty($mm['exportVar'])) {
|
||||
$varId = (int)$mm['exportVar'];
|
||||
if (IPS_VariableExists($varId)) {
|
||||
IPS_LogMessage("KostenModul", "Export-Variable vorhanden: $varId");
|
||||
$expDelta = $this->getDeltaFromArchive($varId, $ts, $slotEnd);
|
||||
IPS_LogMessage("KostenModul", "exportDelta = $expDelta");
|
||||
} else {
|
||||
IPS_LogMessage("KostenModul", "Export-Variable existiert NICHT: $varId");
|
||||
}
|
||||
} else {
|
||||
IPS_LogMessage("KostenModul", "Keine exportVar für '$name' definiert.");
|
||||
}
|
||||
|
||||
// Nur hinzufügen, wenn Werte vorhanden sind
|
||||
if ($impDelta > 0.0 || $expDelta > 0.0) {
|
||||
IPS_LogMessage("KostenModul", "Zähler '$name' wird berücksichtigt: imp=$impDelta | exp=$expDelta");
|
||||
|
||||
$slot[$name] = [
|
||||
'imp' => $impDelta,
|
||||
@@ -334,19 +320,14 @@ foreach ($meters as $name => $mm) {
|
||||
$impTotal += $impDelta;
|
||||
$expTotal += $expDelta;
|
||||
|
||||
} else {
|
||||
IPS_LogMessage("KostenModul", "Zähler '$name' hat keine Deltas > 0 – wird übersprungen.");
|
||||
}
|
||||
|
||||
IPS_LogMessage("KostenModul", "---- Ende Zähler '$name' ----");
|
||||
}
|
||||
|
||||
// Logging der Eingangswerte
|
||||
IPS_LogMessage("KostenModul", "impTotal: $impTotal | expTotal: $expTotal");
|
||||
|
||||
// Fall 1: Weder Import noch Export -> nichts zu berechnen
|
||||
if ($impTotal == 0.0 && $expTotal == 0.0) {
|
||||
IPS_LogMessage("KostenModul", "Beide Werte sind 0 -> continue()");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -355,28 +336,23 @@ foreach ($meters as $name => $mm) {
|
||||
// Kein Import, aber Export → PV deckt alles
|
||||
$ratio = 0.0;
|
||||
$pvCoversAll = true;
|
||||
IPS_LogMessage("KostenModul", "Fall: impTotal=0, expTotal>0 -> PV deckt alles");
|
||||
|
||||
} elseif ($expTotal == 0.0 && $impTotal > 0.0) {
|
||||
// Kein Export, aber Import → Netz deckt alles
|
||||
$ratio = 0.0;
|
||||
$pvCoversAll = false;
|
||||
IPS_LogMessage("KostenModul", "Fall: expTotal=0, impTotal>0 -> Netz deckt alles");
|
||||
|
||||
} elseif ($impTotal <= $expTotal) {
|
||||
// PV produziert genug oder mehr
|
||||
$ratio = $expTotal > 0 ? ($impTotal / $expTotal) : 0.0;
|
||||
$pvCoversAll = true;
|
||||
IPS_LogMessage("KostenModul", "Fall: impTotal <= expTotal -> PV deckt genug");
|
||||
|
||||
} else {
|
||||
// Import ist größer als Export → Netz deckt den Rest
|
||||
$ratio = $impTotal > 0 ? ($expTotal / $impTotal) : 0.0;
|
||||
$pvCoversAll = false;
|
||||
IPS_LogMessage("KostenModul", "Fall: impTotal > expTotal -> Netz deckt den Rest");
|
||||
}
|
||||
|
||||
IPS_LogMessage("KostenModul", "Ergebnis ratio=$ratio | pvCoversAll=" . ($pvCoversAll ? "true" : "false"));
|
||||
|
||||
|
||||
// Werte pro Zähler verteilen
|
||||
@@ -398,6 +374,8 @@ foreach ($meters as $name => $mm) {
|
||||
}
|
||||
if ($pFeed !== null) {
|
||||
$this->powerCostCache[$userId][$name]['rev_feedin'] += ((1 - $ratio) * $exp * $pFeed) / 100.0;
|
||||
$this->powerCostCache[$userId][$name]['rev_zev'] += (($ratio) * $exp * $pSolar) / 100.0;
|
||||
|
||||
}
|
||||
} else {
|
||||
// Teil Netzbezug
|
||||
@@ -412,7 +390,8 @@ foreach ($meters as $name => $mm) {
|
||||
$this->powerCostCache[$userId][$name]['cost_solar'] += ($ratio * $imp * $pSolar) / 100.0;
|
||||
}
|
||||
if ($pFeed !== null) {
|
||||
$this->powerCostCache[$userId][$name]['rev_feedin'] += ($exp * $pFeed) / 100.0;
|
||||
$this->powerCostCache[$userId][$name]['rev_zev'] += ($exp * $pSolar) / 100.0;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -446,7 +425,7 @@ foreach ($meters as $name => $mm) {
|
||||
$sum = 0.0;
|
||||
|
||||
foreach ($this->powerCostCache[$userId] as $name => $a) {
|
||||
$subtotal = $a['cost_grid'] + $a['cost_solar'] - $a['rev_feedin'];
|
||||
$subtotal = $a['cost_grid'] + $a['cost_solar'] - ($a['rev_feedin']+$a['rev_zev']);
|
||||
$sum += $subtotal;
|
||||
|
||||
$html .= "<tr>
|
||||
@@ -459,7 +438,7 @@ foreach ($meters as $name => $mm) {
|
||||
<td align='right'>" . number_format($a['solarverkauf'], 3) . " kWh</td>
|
||||
<td align='right'>CHF " . number_format($a['cost_solar'], 2) . ".-</td>
|
||||
<td align='right'>CHF " . number_format($a['cost_grid'], 2) . ".-</td>
|
||||
<td align='right'>CHF " . number_format($a['rev_feedin'], 2) . ".-</td>
|
||||
<td align='right'>CHF " . number_format(($a['rev_feedin']+$a['rev_zev']), 2) . ".-</td>
|
||||
<td align='right'>CHF " . number_format($subtotal, 2) . ".-</td>
|
||||
</tr>";
|
||||
}
|
||||
@@ -649,13 +628,7 @@ private function getDeltaFromArchive(int $varId, int $tStart, int $tEnd): float
|
||||
$startValue = $this->GetValueAt($varId, $tStart, false);
|
||||
$endValue = $this->GetValueAt($varId, $tEnd, false);
|
||||
|
||||
// --- Logging ---
|
||||
IPS_LogMessage("KostenModul", "getDeltaFromArchive(varId=$varId)");
|
||||
IPS_LogMessage("KostenModul", " Startzeit: " . date('Y-m-d H:i:s', $tStart) . " | Startwert: " . var_export($startValue, true));
|
||||
IPS_LogMessage("KostenModul", " Endzeit: " . date('Y-m-d H:i:s', $tEnd) . " | Endwert: " . var_export($endValue, true));
|
||||
|
||||
if ($startValue === null || $endValue === null) {
|
||||
IPS_LogMessage("KostenModul", " -> Einer der Werte ist NULL, Delta = 0.0");
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
@@ -663,11 +636,9 @@ private function getDeltaFromArchive(int $varId, int $tStart, int $tEnd): float
|
||||
$diff = $endValue - $startValue;
|
||||
|
||||
if ($diff < 0) {
|
||||
IPS_LogMessage("KostenModul", " WARNUNG: Negatives Delta erkannt! Zähler wurde vermutlich zurückgesetzt. Delta wird auf 0 gesetzt.");
|
||||
$diff = 0.0;
|
||||
}
|
||||
|
||||
IPS_LogMessage("KostenModul", " Delta = $diff");
|
||||
return (float)$diff;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user