fix(manager): Energieausgleich aus Enelix 1 wiederherstellen
Tests / test (push) Successful in 54s

This commit is contained in:
dh
2026-09-29 14:14:25 +00:00
parent 37400878b6
commit fdc2007bb1
5 changed files with 125 additions and 6 deletions
+19 -2
View File
@@ -92,6 +92,7 @@ final class ManagerRegler
/**
* @param list<array<string, mixed>> $verbraucher Vollstaendige, bereits gepruefte Verbraucherdaten
* @param array<int, float|int> $bezogeneEnergieWh Bezogene Energie je Verbraucher in Wh
* @return array{
* Verteilbudget_W: int,
* AktuelleVerbraucherleistung_W: int,
@@ -104,7 +105,8 @@ final class ManagerRegler
float $netzleistung,
float $zielnetzleistung,
array $verbraucher,
string $prioritaetsfeld
string $prioritaetsfeld,
array $bezogeneEnergieWh = []
): array {
if (!in_array($prioritaetsfeld, ['PrioritaetPV', 'PrioritaetPeak'], true)) {
throw new InvalidArgumentException('Unbekanntes Prioritaetsfeld.');
@@ -125,15 +127,30 @@ final class ManagerRegler
continue;
}
$energie = $bezogeneEnergieWh[$eintrag['InstanzID']] ?? 0.0;
if ((!is_int($energie) && !is_float($energie))
|| (is_float($energie) && !is_finite($energie))
) {
throw new InvalidArgumentException('Bezogene Energie muss eine endliche Zahl sein.');
}
$steuerbar[] = [
'InstanzID' => $eintrag['InstanzID'],
'Prioritaet' => $daten[$prioritaetsfeld],
'Energiegruppe' => (int) round((float) $energie / 2000.0),
'Leistungswerte_W' => $daten['Leistungswerte_W'],
];
}
usort($steuerbar, static function (array $links, array $rechts): int {
return [$links['Prioritaet'], $links['InstanzID']] <=> [$rechts['Prioritaet'], $rechts['InstanzID']];
return [
$links['Prioritaet'],
$links['Energiegruppe'],
$links['InstanzID'],
] <=> [
$rechts['Prioritaet'],
$rechts['Energiegruppe'],
$rechts['InstanzID'],
];
});
$verteilbudget = (int) round($aktuelleLeistung + $zielnetzleistung - $netzleistung);