feat(manager): Batteriesollwert aus Netzfahrplan anwenden
Tests / test (push) Successful in 47s

This commit is contained in:
dh
2026-09-29 17:23:25 +00:00
parent f611da975d
commit 53fca5e2bb
3 changed files with 90 additions and 8 deletions
+20 -4
View File
@@ -106,7 +106,8 @@ final class ManagerRegler
float $zielnetzleistung,
array $verbraucher,
string $prioritaetsfeld,
array $bezogeneEnergieWh = []
array $bezogeneEnergieWh = [],
array $vorgegebeneSollwerte = []
): array {
if (!in_array($prioritaetsfeld, ['PrioritaetPV', 'PrioritaetPeak'], true)) {
throw new InvalidArgumentException('Unbekanntes Prioritaetsfeld.');
@@ -129,7 +130,13 @@ final class ManagerRegler
$festwert = self::istFestwert($daten['Leistungswerte_W']);
$festgehalten = !$daten['AenderungMoeglich'];
if ($festwert || $festgehalten) {
$vorgegebenerSollwert = $vorgegebeneSollwerte[$eintrag['InstanzID']] ?? null;
$vorgegeben = is_int($vorgegebenerSollwert)
&& Nachrichtenvertrag::enthaeltLeistungswert(
$daten['Leistungswerte_W'],
$vorgegebenerSollwert
);
if (($festwert || $festgehalten) && !$vorgegeben) {
$nichtSteuerbar += $leistung;
}
@@ -146,6 +153,8 @@ final class ManagerRegler
'Leistungswerte_W' => $daten['Leistungswerte_W'],
'Festwert' => $festwert,
'Festgehalten' => $festgehalten,
'Vorgegeben' => $vorgegeben,
'VorgegebenerSollwert' => $vorgegeben ? $vorgegebenerSollwert : null,
'Sollwert' => self::angenommenerSollwert($daten),
];
}
@@ -167,6 +176,11 @@ final class ManagerRegler
$sollwerte = [];
$ausgangssumme = 0;
foreach ($steuerbar as $eintrag) {
if ($eintrag['Vorgegeben']) {
$sollwerte[$eintrag['InstanzID']] = $eintrag['VorgegebenerSollwert'];
$ausgangssumme += $eintrag['VorgegebenerSollwert'];
continue;
}
if ($eintrag['Festwert']) {
$sollwerte[$eintrag['InstanzID']] = self::kleinsterLeistungswert(
$eintrag['Leistungswerte_W']
@@ -190,7 +204,7 @@ final class ManagerRegler
$rest = $verteilbudget - $nichtSteuerbar - $ausgangssumme;
foreach ($steuerbar as $eintrag) {
if ($eintrag['Festwert'] || $eintrag['Festgehalten']) {
if ($eintrag['Vorgegeben'] || $eintrag['Festwert'] || $eintrag['Festgehalten']) {
continue;
}
@@ -219,7 +233,9 @@ final class ManagerRegler
$zugeteilt = $nichtSteuerbar;
foreach ($steuerbar as $eintrag) {
if (!$eintrag['Festwert'] && !$eintrag['Festgehalten']) {
if ($eintrag['Vorgegeben']
|| (!$eintrag['Festwert'] && !$eintrag['Festgehalten'])
) {
$zugeteilt += $sollwerte[$eintrag['InstanzID']];
}
}