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