feat(portal): prepare heat pump licensing and header navigation
Tests / test (push) Failing after 49s
Tests / test (push) Failing after 49s
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
# Portal: Waermepumpe und Header
|
||||
|
||||
Stand: 6. Oktober 2026. Entwickelt und getestet, noch nicht live veroeffentlicht.
|
||||
|
||||
## Aenderung / Pull-Request-Text
|
||||
|
||||
Der bestehende Katalogeintrag `heat_pump` wird im Lizenzkauf beruecksichtigt.
|
||||
Die bestehenden Preise bleiben unveraendert: CHF 20.95 Lizenz und CHF 27.25
|
||||
Generator / Ersteinrichtung, jeweils netto. Die Bereitstellung aktiviert nur die
|
||||
Verfuegbarkeit des Produkts; sie kauft keine Lizenz und vergibt keine kostenlose
|
||||
Berechtigung an eine Anlage.
|
||||
|
||||
Der Wizard hat einen eigenen Waermepumpenschritt mit SG Ready oder Sperre/Erhoehung,
|
||||
zwei Kontakten, Betriebsrueckmeldung und Schutzzeiten. Gespeicherte Konfigurationen,
|
||||
Lizenzvorschlag und generiertes Symcon-Paket verwenden das Modul
|
||||
`{A31C9274-54F7-4BD2-9804-7AF23E86C4D1}`. Freie Bestandskontingente von
|
||||
`consumer_single` werden wie im Manager angerechnet, ohne Doppelbelegung.
|
||||
Technische Variablenkennungen duerfen zur Planung noch 0 sein. Das Bootstrap-Skript
|
||||
bricht vor Objektveraenderungen ab, wenn die Waermepumpen-Zuordnung unvollstaendig
|
||||
ist, das Modul fehlt oder die Rueckmeldung einen unpassenden Typ hat.
|
||||
|
||||
Dokumentation und Preise stehen als Textlinks rechts im Portalheader und nicht
|
||||
mehr in der Seitennavigation. Oeffentliche Links auf der Anmeldeseite bleiben.
|
||||
|
||||
## Voraussetzungen und Konfliktschutz
|
||||
|
||||
- Ziel: `/home/agent/services/license` auf `enelix-services`.
|
||||
- `portal.patch` zeigt ausschliesslich Aenderungen gegen den gelesenen Live-Stand.
|
||||
- `manifest.json` enthaelt SHA-256 vor und nach jeder Quellaenderung.
|
||||
- Die weiterentwickelte, nicht veroeffentlichte Wizard-Fassung auf `ubuntu` wird
|
||||
nicht durch diesen Live-Patch ersetzt.
|
||||
- Keine Aenderung an Symcon-Anlagen, Docker-Compose, Datenbankschema, Geheimnissen,
|
||||
Prognosediensten oder fremden Git-Aenderungen. Daniel Haefliger hat Commit und
|
||||
Push auf `develop` sowie den Portalneustart ausdruecklich freigegeben.
|
||||
|
||||
## Tests
|
||||
|
||||
- 32 Node-Tests: vorhandene Portalregressionen plus acht neue Waermepumpentests.
|
||||
- Browserpruefung mit isolierten API-Fixtures: Header bei 1440, 768, 390 und
|
||||
320 Pixeln; Wizard konfigurieren, speichern, Lizenzvorschlag und erneut oeffnen.
|
||||
- Keine Browserfehler. Kein echter Kauf, keine Live-Lizenzvergabe und keine
|
||||
Schaltbefehle an eine Waermepumpe.
|
||||
- JavaScript-Syntax und Anwendbarkeit des Patches geprueft. PHP-Syntaxpruefung
|
||||
und Symcon-Laufzeittest konnten nicht ausgefuehrt werden: keine native PHP-CLI
|
||||
und kein Zugriff auf die Docker-Sockets in dieser Agent-Ausfuehrung.
|
||||
- `tests/` enthaelt neue bzw. angepasste Tests. Im Testcheckout in dessen
|
||||
vorhandenes `tests/` uebernehmen und `node --test tests/*.test.mjs` ausfuehren.
|
||||
- Browserpruefung: `node tests/browser-smoke.mjs` mit installiertem Playwright und
|
||||
Chromium; optional `BROWSER_PACKAGE` und `BROWSER_EXECUTABLE` fuer vorhandene
|
||||
Testwerkzeuge setzen. API-Antworten stammen ausschliesslich aus Test-Fixtures.
|
||||
|
||||
## Bereitstellung
|
||||
|
||||
Der Portalneustart ist vom Auftraggeber freigegeben; dem Serverkonto `agent`
|
||||
fehlt jedoch der technische Zugriff auf den Docker-Socket. Ein berechtigter
|
||||
Administrator prueft dieses Paket und fuehrt auf dem Diensteserver aus:
|
||||
|
||||
```sh
|
||||
python3 /PFAD/ZUM/PAKET/deploy.py
|
||||
```
|
||||
|
||||
Das Skript verlangt Root, prueft alle Ausgangshashes und Container-Mounts und
|
||||
bricht bei Abweichungen ohne Quellaenderung ab. Es sichert die betroffenen Dateien
|
||||
und den Katalog, stoppt nur `enelix_license_portal`, schreibt die Quelldateien
|
||||
unter Erhalt der Datei-Bind-Mounts und setzt ausschliesslich die Produktfreigabe
|
||||
`items.heat_pump.available` auf `true`. Anschliessend startet es den Portalcontainer
|
||||
und prueft Healthcheck, Wizardkatalog und ausgelieferte Oberflaeche. Es nimmt keine
|
||||
Bestellung vor und laesst alle Produktpreise unveraendert.
|
||||
|
||||
Das Stoppen/Starten verursacht eine kurze Portalunterbrechung. Backoffice und
|
||||
Anlagensteuerungen werden nicht neu gestartet. Vor Ausfuehrung parallele
|
||||
Katalogbearbeitungen im Backoffice fuer das Wartungsfenster aussetzen.
|
||||
|
||||
## Ruecksetzen und Nachkontrolle
|
||||
|
||||
Bei Fehlern stellt das Skript die gesicherten Quellinhalte wieder her und startet
|
||||
den Portalcontainer erneut. Ein nachtraeglich anderweitig veraenderter Katalog
|
||||
wird dabei nicht blind ueberschrieben. Sicherungen liegen unter
|
||||
`/home/agent/services/license/change-backups/heat-pump-header-<Zeitpunkt>`.
|
||||
|
||||
Nach erfolgreicher Bereitstellung angemeldet Headerlinks, neue Lizenzzeile,
|
||||
Waermepumpenschritt, Speichern und Wiedereroeffnen kontrollieren. Zahlungen nur
|
||||
mit einem ausdruecklich freigegebenen Sandbox-Test abschliessen. Das erzeugte
|
||||
Symcon-Paket zuerst in einer isolierten IP-Symcon-8-Installation pruefen; das
|
||||
Ausfuehren des Pakets kann Kontakte schalten und ist kein Bestandteil dieser
|
||||
Portalbereitstellung.
|
||||
Reference in New Issue
Block a user