fix(manager): Anlagentopologie immer synchronisieren
Tests / test (push) Failing after 50s

This commit is contained in:
dh
2026-09-29 11:51:55 +00:00
parent ae2cd8ecff
commit b3bbae1a72
2 changed files with 40 additions and 13 deletions
+31 -13
View File
@@ -266,8 +266,7 @@ class Manager extends IPSModule implements ManagerSchnittstelle
}
$this->setzeDiagnosewert('Monatsgrenzen', $this->ReadPropertyString('Monatsgrenzen'));
$this->aktualisiereAnschlussstatus();
$geraetezugangFehlt = ($this->ReadPropertyBoolean('PrognoseAktiv')
|| $this->ReadPropertyBoolean('StoerueberwachungAktiv'))
$geraetezugangFehlt = $this->geraetezugangBenoetigt()
&& $this->ReadAttributeString('PrognoseInstallationsToken') === '';
if (!$this->aktualisiereLizenzfreigabe(
$this->ReadPropertyString('Lizenzcode'),
@@ -500,7 +499,9 @@ class Manager extends IPSModule implements ManagerSchnittstelle
if (!is_string($wert)) {
throw new InvalidArgumentException('Der Lizenzcode muss als Text uebergeben werden.');
}
$this->aktualisiereLizenzfreigabe($wert, true);
if ($this->aktualisiereLizenzfreigabe($wert, true)) {
$this->synchronisiereAnlagentopologie();
}
$this->UpdateFormField('LizenzInformation', 'caption', $this->lizenzStatustext($wert));
$this->aktualisiereLastspitzenformular($wert);
$this->aktualisierePrognoseformular($wert);
@@ -2123,8 +2124,7 @@ class Manager extends IPSModule implements ManagerSchnittstelle
&& $this->lizenzBerechtigungenPassen($lease, $lastspitzenmodus);
$gueltig = $leaseGueltig && $berechtigungenPassen;
$berechtigungenVeraltet = $basisGueltig && !$berechtigungenPassen;
$geraetezugangFehlt = ($this->ReadPropertyBoolean('PrognoseAktiv')
|| $this->ReadPropertyBoolean('StoerueberwachungAktiv'))
$geraetezugangFehlt = $this->geraetezugangBenoetigt()
&& $this->ReadAttributeString('PrognoseInstallationsToken') === '';
$routineFaellig = (!$gueltig && !$berechtigungenVeraltet)
|| $geraetezugangFehlt
@@ -2475,8 +2475,7 @@ class Manager extends IPSModule implements ManagerSchnittstelle
$nutzlast = json_encode([
'code' => $lizenzcode,
'installationId' => $installationID,
'issueDeviceToken' => ($this->ReadPropertyBoolean('PrognoseAktiv')
|| $this->ReadPropertyBoolean('StoerueberwachungAktiv'))
'issueDeviceToken' => $this->geraetezugangBenoetigt()
&& $this->ReadAttributeString('PrognoseInstallationsToken') === '',
], JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES);
$curl = curl_init(self::LIZENZ_ENDPOINT);
@@ -2646,6 +2645,25 @@ class Manager extends IPSModule implements ManagerSchnittstelle
);
}
private function geraetezugangBenoetigt(): bool
{
if ($this->ReadPropertyBoolean('PrognoseAktiv')
|| $this->ReadPropertyBoolean('StoerueberwachungAktiv')
) {
return true;
}
try {
$topologie = $this->leseAnlagentopologie();
} catch (Throwable $fehler) {
return false;
}
return $topologie['inverters'] !== []
|| $topologie['pvArrays'] !== []
|| $topologie['batteries'] !== [];
}
private function prognoseTelemetrieKonfiguriert(): bool
{
return $this->ReadPropertyBoolean('PrognoseAktiv')
@@ -2697,11 +2715,6 @@ class Manager extends IPSModule implements ManagerSchnittstelle
private function synchronisiereAnlagentopologie(): void
{
if (!$this->ReadPropertyBoolean('PrognoseAktiv')) {
$this->setzeDiagnosewert('Prognosestatus', 'NichtVerwendet');
return;
}
try {
$topologie = $this->leseAnlagentopologie();
if ($topologie['inverters'] === []
@@ -2717,7 +2730,12 @@ class Manager extends IPSModule implements ManagerSchnittstelle
throw new RuntimeException('Der Geraetezugang fuer die Prognose fehlt.');
}
$this->sendeAnlagentopologie($topologie, $token);
$this->setzeDiagnosewert('Prognosestatus', 'Verbunden');
$this->setzeDiagnosewert(
'Prognosestatus',
$this->ReadPropertyBoolean('PrognoseAktiv')
? 'Verbunden'
: 'Topologie synchronisiert'
);
} catch (Throwable $fehler) {
$meldung = substr($fehler->getMessage(), 0, 500);
$this->setzeDiagnosewert('Prognosestatus', 'Fehler: ' . $meldung);