This commit is contained in:
+1
-1
@@ -17,7 +17,7 @@ Alle wesentlichen Aenderungen an Enelix EMS werden in dieser Datei dokumentiert.
|
|||||||
|
|
||||||
- Stufenlose Leistungsbereiche fuer Batteriespeicher.
|
- Stufenlose Leistungsbereiche fuer Batteriespeicher.
|
||||||
- Ladefreigabe neuer Ladestationsinstanzen standardmaessig aktiviert.
|
- 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.
|
- Vollstaendige PHP-, Struktur- und Symcon-Modultests fuer alle Module.
|
||||||
|
|
||||||
### Hinweise
|
### Hinweise
|
||||||
|
|||||||
@@ -419,10 +419,12 @@ class LadestationGateway extends IPSModule implements VerbraucherSchnittstelle
|
|||||||
|
|
||||||
$gatewayVerbunden = $this->ReadAttributeBoolean('GatewayVerbunden');
|
$gatewayVerbunden = $this->ReadAttributeBoolean('GatewayVerbunden');
|
||||||
$phaseGueltig = in_array($status['Phasenzahl'], [1, 3], true);
|
$phaseGueltig = in_array($status['Phasenzahl'], [1, 3], true);
|
||||||
|
$regelPhasenzahl = $phaseGueltig ? $status['Phasenzahl'] : 1;
|
||||||
|
$phaseErforderlich = $status['Fahrzeugstatus'] === 3;
|
||||||
$steuerbar = $gatewayVerbunden
|
$steuerbar = $gatewayVerbunden
|
||||||
&& $status['StatusGueltig']
|
&& $status['StatusGueltig']
|
||||||
&& !$status['Stoerung']
|
&& !$status['Stoerung']
|
||||||
&& (!$status['FahrzeugVerbunden'] || $phaseGueltig);
|
&& (!$phaseErforderlich || $phaseGueltig);
|
||||||
|
|
||||||
$solarladen = $this->ReadAttributeBoolean('ZustandSolarladen');
|
$solarladen = $this->ReadAttributeBoolean('ZustandSolarladen');
|
||||||
$peakbetrieb = $this->ReadAttributeString('Betriebsart')
|
$peakbetrieb = $this->ReadAttributeString('Betriebsart')
|
||||||
@@ -432,7 +434,7 @@ class LadestationGateway extends IPSModule implements VerbraucherSchnittstelle
|
|||||||
$this->ReadAttributeBoolean('ZustandLadefreigabe'),
|
$this->ReadAttributeBoolean('ZustandLadefreigabe'),
|
||||||
$steuerbar && $status['FahrzeugVerbunden'],
|
$steuerbar && $status['FahrzeugVerbunden'],
|
||||||
$status['FahrzeugGeladen'],
|
$status['FahrzeugGeladen'],
|
||||||
$phaseGueltig ? $status['Phasenzahl'] : 1,
|
$regelPhasenzahl,
|
||||||
$status['ApiMaximalstrom_A'],
|
$status['ApiMaximalstrom_A'],
|
||||||
$solarladen,
|
$solarladen,
|
||||||
$peakbetrieb
|
$peakbetrieb
|
||||||
@@ -460,8 +462,8 @@ class LadestationGateway extends IPSModule implements VerbraucherSchnittstelle
|
|||||||
} elseif ($status['Stoerung']) {
|
} elseif ($status['Stoerung']) {
|
||||||
$stoertext = $status['Stoertext'];
|
$stoertext = $status['Stoertext'];
|
||||||
$this->SetStatus(self::STATUS_LADEFEHLER);
|
$this->SetStatus(self::STATUS_LADEFEHLER);
|
||||||
} elseif ($status['FahrzeugVerbunden'] && !$phaseGueltig) {
|
} elseif ($phaseErforderlich && !$phaseGueltig) {
|
||||||
$stoertext = 'Easee meldet keine unterstuetzte aktive Ausgangsphase.';
|
$stoertext = 'Easee meldet beim Laden keine unterstuetzte aktive Ausgangsphase.';
|
||||||
$this->SetStatus(self::STATUS_WARTET_AUF_DATEN);
|
$this->SetStatus(self::STATUS_WARTET_AUF_DATEN);
|
||||||
} else {
|
} else {
|
||||||
$this->SetStatus(self::STATUS_AKTIV);
|
$this->SetStatus(self::STATUS_AKTIV);
|
||||||
@@ -471,7 +473,7 @@ class LadestationGateway extends IPSModule implements VerbraucherSchnittstelle
|
|||||||
if ($gatewayVerbunden && $status['StatusGueltig']) {
|
if ($gatewayVerbunden && $status['StatusGueltig']) {
|
||||||
$this->setzeLadestrom(
|
$this->setzeLadestrom(
|
||||||
$this->bestimmeWirksameSollleistung($angebot),
|
$this->bestimmeWirksameSollleistung($angebot),
|
||||||
$status['Phasenzahl']
|
$regelPhasenzahl
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->WriteAttributeInteger('LetzterGesetzterStrom', -1);
|
$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 (
|
$test->runCase('Nur-Solar-Variante laesst Solarladen nicht abschalten', static function (
|
||||||
TestContext $test
|
TestContext $test
|
||||||
) use ($nurSolar): void {
|
) use ($nurSolar): void {
|
||||||
|
|||||||
Reference in New Issue
Block a user