diff --git a/Manager/module.php b/Manager/module.php index 7fa93bb..64d74d3 100644 --- a/Manager/module.php +++ b/Manager/module.php @@ -2263,12 +2263,7 @@ class Manager extends IPSModule implements ManagerSchnittstelle /** @param array $lease */ private function prognoseBerechtigungInLease(array $lease): bool { - return Lizenzpruefung::berechtigungsMenge($lease, Lizenzpruefung::NETZFAHRPLAN) > 0 - || (Lizenzpruefung::berechtigungsMenge($lease, Lizenzpruefung::PROGNOSE_PV) > 0 - && Lizenzpruefung::berechtigungsMenge( - $lease, - Lizenzpruefung::PROGNOSE_VERBRAUCH - ) > 0); + return Lizenzpruefung::hatPrognoseBerechtigung($lease); } private function berechtigungLizenziert(string $kennung, ?string $lizenzcode = null): bool @@ -2418,7 +2413,10 @@ class Manager extends IPSModule implements ManagerSchnittstelle if (!$lizenziert) { return 'Prognosen sind deaktiviert. Fuer die Manager-ID ' . $managerID - . ' fehlen forecast_pv plus forecast_load oder grid_schedule.'; + . ' ist keine Prognoseberechtigung vorhanden. Benoetigt wird entweder ' + . 'PV-Ertragsprognose zusammen mit Verbrauchsprognose oder der ' + . 'Intelligente Netzfahrplan. Nach der Erweiterung im Lizenzportal ' + . 'die Lizenz erneut pruefen und binden.'; } return ($aktiv ? 'Prognosen sind aktiviert. ' : 'Prognosen sind deaktiviert. ') diff --git a/docs/module/Manager/README.md b/docs/module/Manager/README.md index e61e765..7e4e611 100644 --- a/docs/module/Manager/README.md +++ b/docs/module/Manager/README.md @@ -279,6 +279,7 @@ stabile ID gebunden werden. | HTTP `429` | Zu viele Aktivierungsversuche; vor dem naechsten Versuch warten. | | `Lizenzserver nicht erreichbar` | DNS, Internetzugang, HTTPS und Systemzeit des Symcon-Systems pruefen. Eine bestehende Lease gilt nur bis `offlineUntil`. | | `Offline-Freigabe ist abgelaufen.` | Verbindung zum Lizenzserver wiederherstellen und Lizenz erneut pruefen. | +| `Keine Prognoseberechtigung vorhanden` | Im Lizenzportal entweder PV-Ertragsprognose zusammen mit Verbrauchsprognose oder den Intelligenten Netzfahrplan ergaenzen. Anschliessend im Manager `Lizenz pruefen und binden` ausloesen, die Prognose aktivieren und die Konfiguration speichern. | Fuer eine genauere Diagnose koennen die Diagnosevariablen eingeblendet werden. `Lizenzstatus` zeigt dann den aktuellen Zustand. Mit aktiviertem Debug-Logging diff --git a/libs/Lizenzpruefung.php b/libs/Lizenzpruefung.php index dcd267e..a6f80a5 100644 --- a/libs/Lizenzpruefung.php +++ b/libs/Lizenzpruefung.php @@ -117,6 +117,19 @@ final class Lizenzpruefung return $menge; } + /** + * Eine Prognose ist entweder durch den Netzfahrplan oder durch beide + * Einzelberechtigungen fuer PV und Verbrauch freigeschaltet. + * + * @param array $lease + */ + public static function hatPrognoseBerechtigung(array $lease): bool + { + return self::berechtigungsMenge($lease, self::NETZFAHRPLAN) > 0 + || (self::berechtigungsMenge($lease, self::PROGNOSE_PV) > 0 + && self::berechtigungsMenge($lease, self::PROGNOSE_VERBRAUCH) > 0); + } + /** * Rechnet freie, bestehende Einzellizenzen auf nicht separat lizenzierte Waermepumpen an. * diff --git a/tests/LizenzpruefungTest.php b/tests/LizenzpruefungTest.php index b9c736f..7225b17 100644 --- a/tests/LizenzpruefungTest.php +++ b/tests/LizenzpruefungTest.php @@ -228,6 +228,47 @@ final class LizenzpruefungTest extends TestCase Lizenzpruefung::pruefeVerbrauchermengen($lease, $pruefmengen); } + public function testPvUndVerbrauchGebenPrognoseFrei(): void + { + $lease = $this->lease('manager_standard'); + $lease['entitlements'][] = [ + 'catalog_key' => Lizenzpruefung::PROGNOSE_PV, + 'quantity' => 1, + 'status' => 'active', + ]; + $lease['entitlements'][] = [ + 'catalog_key' => Lizenzpruefung::PROGNOSE_VERBRAUCH, + 'quantity' => 1, + 'status' => 'active', + ]; + + self::assertTrue(Lizenzpruefung::hatPrognoseBerechtigung($lease)); + } + + public function testEinzelnePrognoseBerechtigungReichtNichtAus(): void + { + $lease = $this->lease('manager_standard'); + $lease['entitlements'][] = [ + 'catalog_key' => Lizenzpruefung::PROGNOSE_PV, + 'quantity' => 1, + 'status' => 'active', + ]; + + self::assertFalse(Lizenzpruefung::hatPrognoseBerechtigung($lease)); + } + + public function testNetzfahrplanGibtPrognoseAlleineFrei(): void + { + $lease = $this->lease('manager_standard'); + $lease['entitlements'][] = [ + 'catalog_key' => Lizenzpruefung::NETZFAHRPLAN, + 'quantity' => 1, + 'status' => 'active', + ]; + + self::assertTrue(Lizenzpruefung::hatPrognoseBerechtigung($lease)); + } + public function testLizenzcodeWirdWieAufDemServerNormalisiert(): void { self::assertSame(