# 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-`. 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.