fix(easee): Wartezustand ohne Ausgangsphase zulassen
Tests / test (push) Successful in 48s

This commit is contained in:
dh
2026-09-29 08:25:08 +00:00
parent 6f76e6cd86
commit aefe46352f
3 changed files with 38 additions and 6 deletions
+1 -1
View File
@@ -17,7 +17,7 @@ Alle wesentlichen Aenderungen an Enelix EMS werden in dieser Datei dokumentiert.
- Stufenlose Leistungsbereiche fuer Batteriespeicher.
- Ladefreigabe neuer Ladestationsinstanzen standardmaessig aktiviert.
- Easee-Ladestationen laden einen fehlenden Initialstatus ueber die Observations-API nach.
- Easee-Ladestationen laden einen fehlenden Initialstatus ueber die Observations-API nach und starten bei noch unbekannter Ausgangsphase konservativ einphasig.
- Vollstaendige PHP-, Struktur- und Symcon-Modultests fuer alle Module.
### Hinweise
+7 -5
View File
@@ -419,10 +419,12 @@ class LadestationGateway extends IPSModule implements VerbraucherSchnittstelle
$gatewayVerbunden = $this->ReadAttributeBoolean('GatewayVerbunden');
$phaseGueltig = in_array($status['Phasenzahl'], [1, 3], true);
$regelPhasenzahl = $phaseGueltig ? $status['Phasenzahl'] : 1;
$phaseErforderlich = $status['Fahrzeugstatus'] === 3;
$steuerbar = $gatewayVerbunden
&& $status['StatusGueltig']
&& !$status['Stoerung']
&& (!$status['FahrzeugVerbunden'] || $phaseGueltig);
&& (!$phaseErforderlich || $phaseGueltig);
$solarladen = $this->ReadAttributeBoolean('ZustandSolarladen');
$peakbetrieb = $this->ReadAttributeString('Betriebsart')
@@ -432,7 +434,7 @@ class LadestationGateway extends IPSModule implements VerbraucherSchnittstelle
$this->ReadAttributeBoolean('ZustandLadefreigabe'),
$steuerbar && $status['FahrzeugVerbunden'],
$status['FahrzeugGeladen'],
$phaseGueltig ? $status['Phasenzahl'] : 1,
$regelPhasenzahl,
$status['ApiMaximalstrom_A'],
$solarladen,
$peakbetrieb
@@ -460,8 +462,8 @@ class LadestationGateway extends IPSModule implements VerbraucherSchnittstelle
} elseif ($status['Stoerung']) {
$stoertext = $status['Stoertext'];
$this->SetStatus(self::STATUS_LADEFEHLER);
} elseif ($status['FahrzeugVerbunden'] && !$phaseGueltig) {
$stoertext = 'Easee meldet keine unterstuetzte aktive Ausgangsphase.';
} elseif ($phaseErforderlich && !$phaseGueltig) {
$stoertext = 'Easee meldet beim Laden keine unterstuetzte aktive Ausgangsphase.';
$this->SetStatus(self::STATUS_WARTET_AUF_DATEN);
} else {
$this->SetStatus(self::STATUS_AKTIV);
@@ -471,7 +473,7 @@ class LadestationGateway extends IPSModule implements VerbraucherSchnittstelle
if ($gatewayVerbunden && $status['StatusGueltig']) {
$this->setzeLadestrom(
$this->bestimmeWirksameSollleistung($angebot),
$status['Phasenzahl']
$regelPhasenzahl
);
} else {
$this->WriteAttributeInteger('LetzterGesetzterStrom', -1);
@@ -108,6 +108,36 @@ return static function (TestContext $test): void {
));
});
$test->runCase('Wartezustand startet konservativ ohne aktive Phase', static function (
TestContext $test
) use ($sendeBeobachtung, $station): void {
$sendeBeobachtung('EH123456', 109, 2);
$sendeBeobachtung('EH123456', 110, 0);
IPS_RequestAction($station, 'Solarladen', false);
$test->assertSame(
0,
GetValue($test->objectByIdent('Phasenzahl', $station))
);
$test->assertInstanceStatus($station);
$test->assertSame(
'[3850]',
(string) GetValue(
$test->objectByIdent('LeistungsangebotDiagnose', $station)
)
);
$test->assertTrue(str_contains(
(string) GetValue(
$test->objectByIdent('LetzterGeraetebefehl', $station)
),
'"Ampere":16'
));
IPS_RequestAction($station, 'Solarladen', true);
$sendeBeobachtung('EH123456', 110, 30);
$sendeBeobachtung('EH123456', 109, 3);
});
$test->runCase('Nur-Solar-Variante laesst Solarladen nicht abschalten', static function (
TestContext $test
) use ($nurSolar): void {