fix(ladestation): Fahrzeugstrom nach Lernzeit begrenzen
Tests / test (push) Successful in 56s

This commit is contained in:
dh
2026-09-29 12:47:23 +00:00
parent b3b868cd2a
commit ace1821213
9 changed files with 247 additions and 21 deletions
+24 -2
View File
@@ -32,7 +32,7 @@ final class LadestationRegler
* Ein Ladeende wird erst nach zuvor gemessener Ladeleistung angenommen, damit
* die Anlaufzeit nach einer neuen Stromvorgabe nicht als volles Fahrzeug gilt.
*
* @param array{Rohstatus: int, Istleistung_W: float} $rohstatus
* @param array{Rohstatus: int, Istleistung_W: float, Iststrom_A?: float} $rohstatus
* @return array<string, int|float|bool>
*/
public static function normalisiereStatus(
@@ -51,7 +51,9 @@ final class LadestationRegler
if ($verbunden) {
$phasen = $leistung > 7500.0 ? self::PHASEN_DREI : self::PHASEN_EIN;
$nenner = $phasen === self::PHASEN_EIN ? 230.0 : 1.71 * 400.0;
$ladestrom = $leistung / $nenner;
$ladestrom = isset($rohstatus['Iststrom_A'])
? max(0.0, (float) $rohstatus['Iststrom_A'])
: $leistung / $nenner;
$ermittelterMaximalstrom = 2.5 + $ladestrom;
$geladen = $warGeladen
|| ($warVerbunden
@@ -80,6 +82,26 @@ final class LadestationRegler
];
}
public static function ermittleFahrzeugMaximalstrom(
int $vorgegebenerStrom,
float $gemessenerStrom,
int $konfigurierterMaximalstrom
): ?int {
if ($konfigurierterMaximalstrom < 6 || $konfigurierterMaximalstrom > 32) {
throw new InvalidArgumentException('MaximalerLadestrom muss zwischen 6 und 32 A liegen.');
}
if ($vorgegebenerStrom < 6 || $gemessenerStrom < 5.5) {
return null;
}
$kandidat = max(6, min($konfigurierterMaximalstrom, (int) round($gemessenerStrom)));
if ($kandidat > $vorgegebenerStrom - 2 || $kandidat >= $konfigurierterMaximalstrom) {
return null;
}
return $kandidat;
}
/** @return list<int> */
public static function leistungsangebot(
bool $aktiv,