This commit is contained in:
+19
-2
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user