feat(workflow): publish verified forecast controls and consolidated docs
Tests / test (push) Successful in 1m1s

Approved by Daniel Haefliger for develop and beta. Author dh_Agent, authenticated account dh. Preserve published battery, charging and overall Energy Pie changes. No deployment or plant control authorization.
This commit is contained in:
dh
2026-10-08 10:02:58 +00:00
parent af69151165
commit 74a2d6c685
82 changed files with 5054 additions and 617 deletions
+156
View File
@@ -464,3 +464,159 @@ oder Stellbefehl ist Teil dieser Quellcode-Aenderung.
- Anbieterformate für Prognose und Störüberwachung festlegen.
- Produktive signierte Lizenz-Leases nach Abschluss des Entwicklungsvertrags integrieren.
- Verhalten und Messabgrenzung bei Untermanagern im Anlagentest bestätigen.
## Ergänzungen zum Kanalstand vom 8. Oktober 2026
Diese Referenz gilt für Testing (`develop`) und Beta mit Quellbasis `5885681`.
Stable (`main`, Quellbasis `b6253f9`) enthält noch keinen installierbaren Manager.
Die Kanalnamen sind keine Anlagenabnahme. Die [Kanalübersicht](../../../README.md)
trennt Funktionen, Fehlerkorrekturen und noch offene Betriebsnachweise.
### Prognosebedienung und Netzfahrplan V4
Im Bereich **Prognose / Forecast** sind Topologie, Empfang, Vorschau und bewusste
Start-/Stoppbedienung zusammengeführt. `PrognoseAktiv` schaltet Telemetrie und
Topologiesynchronisation ein, startet aber keine V4-Regelung. `NetzfahrplanAktiv`
gehört weiterhin zum bisherigen Netzfahrplanregler. Bei eingerichteter V4-
Konfiguration wird dessen ausgeschalteter Altschalter verborgen; ein aktiver
Altregler bleibt zum Ausschalten sichtbar. Beide Regler nicht parallel starten.
Die neue Bedienung `FormNetzfahrplanSchalten` prüft gespeicherte Konfiguration,
Lizenz und lokale Testfreigaben erneut. Ausschalten bleibt bei Lizenzverlust
möglich. Der Stopp widerruft die Testsitzung und kann danach eine frisch
berechnete normale EMS-Zuteilung auslösen. Er ist kein anlagenweiter Not-Aus
und löscht keinen unabhängigen SDL-Auftrag.
V4 ist ein begrenzter Testpfad, kein freigegebener Dauerregler. Ein vorhandener
Plan, `optimal`, `shadow_seen` oder eine erfolgreiche Befehlsquittung belegt
weder physische Leistungsnachführung noch Einsparungen. Nach dem Modul-Reload
vom 6. Oktober wurde eine Batterietimerblockade dokumentiert. Die spätere
Nachkontrolle vom 7. Oktober meldet laufende periodische Timer, keine physische
V4-Abnahme. Ursache und Wiederholbarkeit des Reload-Problems bleiben offen;
nach Updates Timer erneut prüfen. Watchdog, Planwechsel und sicherer Stopp
bleiben separat abzunehmen. Die frühere befristete Testfreigabe endete am
7. Oktober 2026. Diese Dokumentation erneuert sie nicht; Schutzprüfungen dürfen
nicht umgangen werden.
| Property | Typ / Standard | Zweck und Grenze |
| --- | --- | --- |
| `NetzfahrplanV4SchattenAktiv` | Boolean / `false` | Versand nativer Betriebsdaten für die Schattenplanung; allein keine Stellbefehle. |
| `NetzfahrplanV4EmpfangAktiv` | Boolean / `false` | Planempfang und lokale Vorschau; Empfang ist keine Ausführung. |
| `NetzfahrplanV4NetzladenErlaubt` | Boolean / `false` | Netzladen in den Planungsrandbedingungen erlauben; ersetzt keine lokale Freigabe. |
| `NetzfahrplanV4BatterieOptionen` | String/JSON / `{}` | Batteriebezogene Planungsoptionen, gebunden an die Asset-ID der Topologie. |
| `NetzfahrplanV4MessnachweisVariableID` | Integer / `0` | Stringvariable mit geprüftem JSON-Messnachweis, keine Leistungsvariable. |
| `NetzfahrplanV4BezugszaehlerQuellen` | String/JSON / `[]` | Separate Bezugszählerquellen für Viertelstunden-/Monatspeaknachweise. Keine Übernahme eines ungeprüften Altzählers. |
| `NetzfahrplanV4MessdatenAktiv` | Boolean / `false` | Rohmessaufnahme alle 30 s mit Originalzeitstempeln, lokaler Outbox und bestätigtem Versand. |
| `NetzfahrplanV4ArchivAktiv` | Boolean / `false` | Optionale lokale Archivierung bestätigter Messdaten; kein Ersatz für externe Sicherungen. |
| `NetzfahrplanV4Messkonfiguration` | String/JSON / `{}` | Validierte Quellen-/Messgrenzenzuordnung, an Installation und Manager gebunden. |
| `NetzfahrplanV4Datensatz` | String / leer | Datensatzkennung, 1 bis 80 Buchstaben, Ziffern, `_` oder `-`. |
| `NetzfahrplanV4RegeltestErlaubt` | Boolean / `false` | Lokale Freigabe des begrenzten Regeltests; weitere Server-/Batteriegates bleiben erforderlich. |
| `NetzfahrplanV4AktivtestErlaubt` | Boolean / `false` | Zusätzliche Freigabe des ausdrücklich begrenzten Aktivtests, keine Produktionsfreigabe. |
| `NetzfahrplanV4WatchdogVerzichtErlaubt` | Boolean / `false` | Nur dokumentierte Testanlagen-Ausnahme, niemals Ersatz für einen Geräte-Watchdog im Dauerbetrieb. |
Komplexe Messkonfigurationen müssen aus den tatsächlichen Quellen abgeleitet
werden. Leere Standardwerte sind nicht ausführbare Musterkonfigurationen.
Vorhandene Datenkennungen, Outbox-Cursor und Bestätigungen nicht manuell ändern.
Normaler Rohdatenversand erfolgt im 60-s-Abstand; ein bestätigter Rückstand kann
schneller abgearbeitet werden, Fehler warten mindestens 60 s. `scheduled`
bezeichnet daher nicht automatisch einen Fehler. Die letzte Quittung ist
entscheidend. Ein HTTP-429 beim Planempfang behält seinen Backoff.
| Variable | Typ / Zugriff | Inhalt |
| --- | --- | --- |
| `NetzfahrplanV4Vorschau` | String/HTML / Anzeige | Geprüfte Planvorschau ohne Stellfreigabe. |
| `NetzfahrplanV4VorschauJSON` | String/JSON / Diagnose | Plan-, Eingangs- und Ablehnungsdiagnose. |
| `NetzfahrplanV4Datenstatus` | String/JSON / Diagnose | Aufnahme, Versand, Datensatz und letzte Bestätigung; `controlEnabled=false` bezieht sich auf diesen Datenweg. |
| `NetzfahrplanV4Aktivtest` | Boolean / bedienbar | Bestehender Schalter für den begrenzten Testbetrieb; kein automatischer Start beim Update. |
Die Idents bleiben für bestehende Verknüpfungen erhalten. Die separaten
V4-Diagnosevariablen sind im integrierten Stand verborgen; die Bedienung erfolgt
im Prognosebereich. Verborgene Diagnosen sind nicht gelöscht.
### Weitere Properties und Diagnosewerte
| Property | Typ / Standard | Beschreibung |
| --- | --- | --- |
| `StoerueberwachungAktiv` | Boolean / `false` | Optionale Übertragung des Störungszustands ans Portal. |
| `StoerungsSendeintervall` | Integer / `300` | Sendeintervall der Störungsüberwachung in Sekunden. |
| `DiagrammPVModus` | Integer / `0` | `0` gesamt, `1` einzeln, `2` gesamt und einzeln. |
| `DiagrammBatterieModus` | Integer / `0` | `0` gesamt, `1` einzeln, `2` gesamt und einzeln. |
| `LadestationenSeparatAnzeigen` | Boolean / `true` | Ladestationen in neu aufgebauten Darstellungen separat führen. |
| `VerbraucherSeparatAnzeigen` | Boolean / `true` | Weitere Verbraucher separat führen. Hausdarstellung wird entsprechend abgegrenzt. |
| `EnergieflussLeistungseinheit` | Integer / `0` | `0` W, `1` kW; interne Regelungswerte bleiben W. |
| `PrognosePVVariableID`, `PrognoseHausverbrauchVariableID`, `PrognoseSOCVariableID` | Integer / `0` | Verdeckte Altproperties; neue Messquellen über die Anlagentopologie pflegen. |
| `MessungPVLeistungVariableID`, `MessungHausverbrauchLeistungVariableID`, `MessungBatterieleistungVariableID` | Integer / `0` | Verdeckte frühere Messquellen, nicht als zweite aktive Topologie konfigurieren. |
| `MessungPVLeistungsfaktor`, `MessungHausverbrauchLeistungsfaktor`, `MessungBatterieleistungsfaktor` | Float / `1.0` | Zugehörige frühere Normierungsfaktoren. |
| `LizenzAnschluss` | String/JSON / `{}` | Verdeckte Altproperty; aktuelle Aktivierung über `Lizenzcode`. Keine Zugangsdaten in Beispielen. |
| Variable | Typ / Einheit | Beschreibung |
| --- | --- | --- |
| `NichtGeregelteGeraete` | String/JSON | Diagnose nicht geregelter Geräte. |
| `Monatsgrenzen` | String/JSON | Diagnose der Monatsgrenzen; gleichnamige Property ist die Konfiguration. |
| `EnergieFunFacts` | String/HTML | Optionale Energy-Facts-Anzeige. |
| `SDLLeistungArchiv` | Float / W | Separate signierte SDL-Leistung. |
| `SDLSOCArchiv` | Float / % | Separater SDL-Ladezustand. |
| `SDLLadenEnergie`, `SDLEntladenEnergie` | Float / kWh | Getrennte integrierte SDL-Richtungen. |
| `EnergieflussPV`, `EnergieflussNetz`, `EnergieflussHaus`, `EnergieflussBatterie` | Float / W oder kW | Verborgene Anzeigequellen des Energieflusses, keine Stellregister. |
| `EnergieflussSDL` | Float / W oder kW | Optionaler separater SDL-Knoten; verwendet die Einheit des Energieflusses. |
| `EnergieflussIst_<InstanzID>`, `EnergieflussSoll_<InstanzID>` | Float / W oder kW | Darstellungswerte je separat geführtem Verbraucher. |
| `DiagrammHausLeistung`, `DiagrammHausEnergie` | Float / W bzw. kWh | Haus ohne separat dargestellte Verbraucher. |
| `DiagrammPVLeistung_<Hash>`, `DiagrammPVEnergie_<Hash>` | Float / W bzw. kWh | Einzel-PV-Quellen aus der Topologie. |
| `DiagrammBatterieLeistung_<Hash>`, `DiagrammBatterieLaden_<Hash>`, `DiagrammBatterieEntladen_<Hash>` | Float / W bzw. kWh | Einzelbatterie und richtungsgetrennte Energie. |
| `DiagrammVerbraucherLeistung_<InstanzID>`, `DiagrammVerbraucherEnergie_<InstanzID>` | Float / W bzw. kWh | Einzelverbraucher und integrierte Energie. |
Die dynamischen Variablen entstehen nur bei passenden Quellen und aktivierter
Darstellung. `<Hash>` ist eine vom Modul berechnete stabile Kennung, keine
einzutragende Objekt-ID. Bestehende individuelle Energieflussknoten, Diagramm-
reihen und Energy-Pie-Messquellen bleiben erhalten. Anzeigeoptionen bei einer
Migration nicht zum Erzwingen eines Neuaufbaus aus- und wieder einschalten.
### SDL und Energieanteile: Beispiel
Bei 10 kW PV, 2 kW Netzbezug, 3 kW Batterieladung und 4 kW separat abgegrenzter
SDL-Ladung ergibt sich `max(0, 10 + 2 - 3 - 4) = 5 kW` Hauslast. Ein Faktor
`1000` wandelt eine kW-Quelle in W um. Eine bereits in der Batteriemessung
enthaltene SDL-Leistung darf nicht ein zweites Mal abgezogen werden.
Bei aktiver SDL lässt sich aus dem gemeinsamen Netzbezug nicht eindeutig
bestimmen, welcher Hausverbrauch aus PV stammt. Der Manager setzt deshalb
`EnergieanteileBerechenbar=false` am eigenen Energy Pie. Zähler bleiben sichtbar;
Autarkie und Eigenverbrauch werden als nicht bestimmbar statt als null angezeigt.
Zuerst Utils aktualisieren: Erkennt ein altes Utils diese Property nicht, blendet
EMS den eigenen Energy Pie aus und protokolliert den Aktualisierungsbedarf.
Die Regelung wird dadurch nicht gestoppt.
### Sicheres Lesebeispiel
In der Symcon-Schnellausführung zuerst eine vorhandene Manager-ID einsetzen.
Das Beispiel liest nur ausgewählte Werte, keine Lizenzdaten, und gibt keine
Stellbefehle aus. Fehlende optionale Diagnosevariablen werden übersprungen.
```php
<?php
$managerId = 0; // Vorhandene Manager-Instanz eintragen.
if ($managerId <= 0 || !IPS_InstanceExists($managerId)) {
throw new RuntimeException('Vorhandene Manager-ID erforderlich.');
}
foreach (['Aktiv', 'Betriebsart', 'Netzleistung', 'SDLStatus'] as $ident) {
$id = @IPS_GetObjectIDByIdent($ident, $managerId);
if ($id !== false && IPS_VariableExists($id)) {
echo $ident . ': ' . json_encode(GetValue($id), JSON_THROW_ON_ERROR) . PHP_EOL;
}
}
```
## V4-Zwei-Schalter-Workflow (08.10.2026)
Diese Bedienung ersetzt die historische separate V4-Testbedienung; Altangaben
weiter unten erteilen keine Freigabe fuer den neuen Workflow.
| Property | Typ / Standard | Wirkung |
| --- | --- | --- |
| `PrognoseAktiv` | Boolean / `true` | Prognose lernen; Uebertragung erfordert Lizenz und gueltige Messzuordnung. |
| `NetzfahrplanRegelungAktiv` | Boolean / `false` | Explizite lokale Regelanforderung. Kein Aktivstatus ohne frischen Plan, gueltige Rueckmeldung und lokale Schutzpruefung. |
Vorhandene Spezialzuordnungen bleiben erhalten. Alte Testschalter werden nicht
in eine Regelanforderung umgedeutet. Bei ungueltigen Daten bleibt der normale
lokale Regelpfad massgeblich. Eine Portalbestaetigung ist kein physischer
Soll-/Ist-Nachweis. [Einrichtung, Migration und Grenzen](../../prognose-v4-workflow.md).