no message

This commit is contained in:
2025-12-12 07:49:48 +01:00
parent cd9209f800
commit b4de095a20

View File

@@ -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;
}