chore(release): erste Beta vorbereiten
Tests / test (push) Successful in 51s

This commit is contained in:
dh
2026-09-29 06:25:29 +00:00
parent 40c6a17dd1
commit 59eec738ab
9 changed files with 73 additions and 14 deletions
+8
View File
@@ -21,6 +21,14 @@ jobs:
- name: Abhaengigkeiten installieren - name: Abhaengigkeiten installieren
run: composer install --no-interaction --no-progress --prefer-dist run: composer install --no-interaction --no-progress --prefer-dist
- name: Composer-Metadaten pruefen
run: composer validate --strict
- name: Abhaengigkeiten auf Sicherheitsmeldungen pruefen
run: |
composer audit --no-interaction
composer audit --working-dir=Verbrauchskostenreport/libs --locked --no-interaction
- name: Unit-Tests und Syntaxpruefung ausfuehren - name: Unit-Tests und Syntaxpruefung ausfuehren
run: composer check run: composer check
+26
View File
@@ -0,0 +1,26 @@
# Changelog
Alle wesentlichen Aenderungen an Enelix Utils werden in dieser Datei dokumentiert.
## 0.1 Build 1 - Erste Beta - 2026-09-29
### Enthalten
- Verbrauchskostenreport mit PDF-Ausgabe und Schweizer QR-Zahlteil nach SIX 2.3.
- Verbrauchskostenreport mit Grundlizenz sowie Strom- und Nebenzaehlerkontingenten.
- Virtuelle Batterie und VGT-Schnittstelle.
- CC100 Hardware und generisches Shelly Modul.
- Energiediagramm fuer die IP-Symcon-Kachelvisualisierung.
### Beta-Aenderungen
- Dezimale IP-Symcon-Farbwerte werden im Energiediagramm korrekt verarbeitet.
- Kachelabstand fuer den Symcon-Kopf und versionsabhaengiger Vollbildmodus.
- Vollstaendige PHP-, Struktur- und Symcon-Modultests fuer alle Module.
- Composer-Metadaten- und Abhaengigkeitspruefung in der CI.
### Hinweise
- Diese Version ist fuer kontrollierte Anlagen- und Feldtests bestimmt.
- Vor produktivem Einsatz sind Sicherung und anlagenspezifische Abnahme erforderlich.
- Korrekturen werden vorwaerts ueber `develop` und anschliessend `beta` verteilt.
+9 -3
View File
@@ -4,9 +4,11 @@ Unabhaengige Zusatzmodule fuer IP-Symcon. Dieses Repository ist nicht vom Enelix
## Status ## Status
Das Repository befindet sich im Aufbau. Verbrauchskostenreport, Virtuelle Version 0.1 Build 1 ist die erste Beta fuer kontrollierte Anlagen- und
Batterie, CC100 Hardware, Energiediagramm, VGT-Schnittstelle und Shelly Modul Feldtests. Verbrauchskostenreport, Virtuelle Batterie, CC100 Hardware,
sind als installierbare IP-Symcon-Module enthalten. Energiediagramm, VGT-Schnittstelle und Shelly Modul sind als installierbare
IP-Symcon-Module enthalten. Produktiver Einsatz setzt eine anlagenspezifische
Pruefung und Sicherung voraus.
## Module ## Module
@@ -23,6 +25,10 @@ Punkten stehen in der [Modulübersicht](docs/module/README.md).
Prognose, Lizenzierung und Störüberwachung sind keine Module dieses Prognose, Lizenzierung und Störüberwachung sind keine Module dieses
Repositories. Die Utils-Module bleiben auch untereinander unabhängig. Repositories. Die Utils-Module bleiben auch untereinander unabhängig.
## Release-Hinweise
Die Aenderungen der ersten Beta stehen im [Changelog](CHANGELOG.md).
## Voraussetzungen ## Voraussetzungen
- IP-Symcon ab Version 8.0 - IP-Symcon ab Version 8.0
+8
View File
@@ -19,6 +19,13 @@ Abmelden des WebHooks beim Löschen einer Instanz.
- erzeugt optional einen Schweizer QR-Zahlteil - erzeugt optional einen Schweizer QR-Zahlteil
- unterstützt den konfigurierbaren MWST-Ausweis - unterstützt den konfigurierbaren MWST-Ausweis
## Lizenzierung
Der Report benoetigt eine Grundlizenz. Zusaetzlich prueft das Modul getrennte
Kontingente fuer konfigurierte Stromzaehler und Nebenzaehler. Lizenzcodes werden
zur Laufzeit gegen `https://license.enelix.ch` geprueft; Zugangsdaten oder
Lizenzcodes werden nicht im Repository gespeichert.
## QR-Zahlteil ## QR-Zahlteil
Der QR-Zahlteil verwendet strukturierte Adressen (`S`) nach SIX SPS 2.3. Der QR-Zahlteil verwendet strukturierte Adressen (`S`) nach SIX SPS 2.3.
@@ -30,6 +37,7 @@ Benutzer- und Zahlungsempfängeradresse benötigen Name, PLZ, Ort und ISO-2-Land
| Property | Beschreibung | | Property | Beschreibung |
|---|---| |---|---|
| `Lizenzcode` | Laufzeitparameter fuer die Freigabe am Lizenzdienst |
| `Users` | Benutzerliste | | `Users` | Benutzerliste |
| `PowerMeters` | Stromzählerliste | | `PowerMeters` | Stromzählerliste |
| `WaterMeters` | Nebenkostenzähler | | `WaterMeters` | Nebenkostenzähler |
+1
View File
@@ -2,6 +2,7 @@
"name": "belevo/enelix-utils", "name": "belevo/enelix-utils",
"description": "Unabhaengige Zusatzmodule fuer IP-Symcon", "description": "Unabhaengige Zusatzmodule fuer IP-Symcon",
"type": "library", "type": "library",
"license": "proprietary",
"require": { "require": {
"php": ">=8.0" "php": ">=8.0"
}, },
@@ -7,6 +7,12 @@
Der Modulpräfix lautet `VKR`. Der Report wird über die Aktion `CreateReport` Der Modulpräfix lautet `VKR`. Der Report wird über die Aktion `CreateReport`
erstellt und im Medium `ReportPDF` bereitgestellt. erstellt und im Medium `ReportPDF` bereitgestellt.
## Lizenzierung
Die Freigabe besteht aus einer Grundlizenz und getrennten Kontingenten fuer
Stromzaehler und Nebenzaehler. Der konfigurierte Umfang darf die vom
Lizenzdienst bestaetigten Mengen nicht ueberschreiten.
## Variablen ## Variablen
| Technischer Ident / Anzeige | Typ / Zugriff | Beschreibung | | Technischer Ident / Anzeige | Typ / Zugriff | Beschreibung |
@@ -28,6 +34,7 @@ erstellt und im Medium `ReportPDF` bereitgestellt.
| Technischer Ident / Anzeige | Typ | Standard / Beschreibung | | Technischer Ident / Anzeige | Typ | Standard / Beschreibung |
| --- | --- | --- | | --- | --- | --- |
| `Lizenzcode` / Lizenzcode | String | leer; wird zur Laufzeit am Lizenzdienst geprueft. |
| `Users` / Benutzer | String/JSON | `[]`; Benutzerstruktur. | | `Users` / Benutzer | String/JSON | `[]`; Benutzerstruktur. |
| `PowerMeters` / Stromzähler | String/JSON | `[]`; Zuordnungen. | | `PowerMeters` / Stromzähler | String/JSON | `[]`; Zuordnungen. |
| `WaterMeters` / Wasserzähler | String/JSON | `[]`; Zuordnungen. | | `WaterMeters` / Wasserzähler | String/JSON | `[]`; Zuordnungen. |
+9 -9
View File
@@ -43,7 +43,7 @@ werden, wenn sie vor dem Lauf nicht existierten.
- `affected`: die durch geänderte Pfade ermittelten Module - `affected`: die durch geänderte Pfade ermittelten Module
Verfügbare Module: `CC100Hardware`, `Energiediagramm`, `ShellyModul`, Verfügbare Module: `CC100Hardware`, `Energiediagramm`, `ShellyModul`,
`Verbrauchskostenreport`. `VGTSchnittstelle`, `Verbrauchskostenreport` und `VirtuelleBatterie`.
Die Utils-Module werden jeweils eigenständig und ohne Abhängigkeit zu Enelix EMS getestet. Die Utils-Module werden jeweils eigenständig und ohne Abhängigkeit zu Enelix EMS getestet.
@@ -84,15 +84,15 @@ Zusätzlich schreibt der Runner die Zusammenfassung in das IP-Symcon-Log.
## CI-Regeln ## CI-Regeln
Bei jedem Push laufen sämtliche PHPUnit-Tests. Auf `develop` werden zusätzlich Bei jedem Push laufen sämtliche PHPUnit-Tests und die PHP-Syntaxprüfung. Die
die von den geänderten Pfaden betroffenen Symcon-Modultests ausgeführt. Bei Symcon-Modultests werden bis zur Verfügbarkeit eines geschützten Runners auf
gemeinsamen Framework- oder Vertragsänderungen läuft die vollständige Suite. der isolierten IP-Symcon-8.0-Instanz des Agent-Servers ausgeführt. Vor jeder
Für `beta` ist immer `all` vorgeschrieben. Übernahme nach `beta` ist ein erfolgreicher Lauf im Modus `all` verbindlich.
Der erzeugte JSON- und JUnit-Bericht gehört zum Freigabenachweis.
Die Symcon-Jobs benötigen einen geschützten Runner mit dem Label `symcon-8`, Eine spätere CI-Automatisierung benötigt einen geschützten Runner mit dem Label
lokalem Zugriff auf eine isolierte IP-Symcon-8.x-Instanz und den installierten `symcon-8`, lokalem Zugriff auf die isolierte IP-Symcon-Instanz und den exakt
Repository-Stand. Ohne diesen Runner ist die Richtlinie dokumentiert, aber zu prüfenden Repository-Stand.
nicht technisch durchsetzbar.
## Checkliste für neue Module ## Checkliste für neue Module
+2 -2
View File
@@ -7,6 +7,6 @@
"version": "8.0" "version": "8.0"
}, },
"version": "0.1", "version": "0.1",
"build": 0, "build": 1,
"date": 0 "date": 1790662541
} }
+3
View File
@@ -16,6 +16,9 @@ final class LibraryMetadataTest extends TestCase
$daten = json_decode($inhalt, true, 512, JSON_THROW_ON_ERROR); $daten = json_decode($inhalt, true, 512, JSON_THROW_ON_ERROR);
self::assertSame('Enelix Utils', $daten['name']); self::assertSame('Enelix Utils', $daten['name']);
self::assertSame('8.0', $daten['compatibility']['version']); self::assertSame('8.0', $daten['compatibility']['version']);
self::assertSame('0.1', $daten['version']);
self::assertSame(1, $daten['build']);
self::assertGreaterThan(0, $daten['date']);
self::assertMatchesRegularExpression('/^\{[0-9A-F-]{36}\}$/', $daten['id']); self::assertMatchesRegularExpression('/^\{[0-9A-F-]{36}\}$/', $daten['id']);
} }