- Neue API /api/cpl/getDigitalOutputsHandler.ts implementiert (vereint json + jsmock) - fetchDigitalOutputsService.ts auf zentrale API umgestellt (weniger Code, klarere Struktur) - Nur production-Modus lädt weiterhin Skript /CPL?/CPL/SERVICE/digitalOutputs.js - README_digitalOutputs.md überarbeitet: - Diagrammtyp („flowchart“, Datenflussdiagramm) explizit benannt - API-Endpunkte konsolidiert dargestellt - CHANGELOG.md um neue API-Struktur und Dokumentationsänderung ergänzt
2.9 KiB
2.9 KiB
📦 Datenfluss-Dokumentation: Digitale Ausgänge (Lesen & Schreiben)
Dieses Dokument beschreibt die Architektur und Datenflüsse für das Lesen und Updaten der digitalen Ausgänge im CPL-System. Unterstützt werden folgende Modi:
json: Entwicklung mit editierbarer JSON-Dateijsmock: Simulation durchdigitalOutputsMockData.jsproduction: Reale CPL-Hardware über CGI-Platzhalter
🔁 flowchart: Lesen der digitalen Ausgänge
flowchart TD
A[DigitalOutputsWidget.tsx] --> B[useEffect]
B --> C[dispatch fetchDigitalOutputsThunk]
C --> D[fetchDigitalOutputsService]
D --> E{Moduswahl: NEXT_PUBLIC_CPL_MODE}
E -->|json oder jsmock| F[GET /api/cpl/getDigitalOutputsHandler.ts]
F --> G[JSON oder geparste JS-Datei]
E -->|production| H[loadScript '/CPL?/CPL/SERVICE/digitalOutputs.js']
H --> I[Platzhalter-basierte win_da_state]
G & I --> J[Redux: digitalOutputsSlice]
J --> K[useSelector] --> A
✍️ flowchart: Updaten der digitalen Ausgänge
flowchart TD
A[DigitalOutputsWidget.tsx: onToggle] --> B[handleToggle id]
B --> C[Redux: setDigitalOutputs]
B --> D{Modus: production oder nicht}
D -->|production| E1[window.location.href = /CPL?digitalOutputs.html&DAS0X=1]
D -->|json oder jsmock| F1[POST /api/cpl/updateDigitalOutputsHandler]
F1 --> F2[Schreibe JSON oder JS-Datei]
F2 & E1 --> G[Aktualisierte Zustände am Gerät]
🌐 API-Endpunkte
| Route | Methode | Modus | Funktion |
|---|---|---|---|
/api/cpl/getDigitalOutputsHandler.ts |
GET |
json, jsmock |
Liest JSON-Datei oder JS-Datei |
/CPL?/CPL/SERVICE/digitalOutputs.js |
SCRIPT |
production |
Liefert Platzhalter vom Gerät |
/api/cpl/updateDigitalOutputsHandler.ts |
POST |
json, jsmock |
Speichert Statusänderung |
🧪 Beispiel-JSON (Mock)
{
"win_da_state": [1, 0, 1, 0],
"win_da_bezeichnung": ["Ausgang1", "Ausgang2", "Ausgang3", "Ausgang4"]
}
📁 Verzeichnisse
/mocks/api/SERVICE/ → JSON-Dateien
/mocks/device-cgi-simulator/SERVICE/→ jsmock: digitalOutputsMockData.js
/public/CPL/SERVICE/ → production: digitalOutputs.js
/pages/api/cpl/ → GET/POST-Handler für json + jsmock
/components/main/einausgaenge/ → UI-Komponente: DigitalOutputsWidget.tsx
✅ Status
- Lesen funktioniert in allen Modi
- Schreiben funktioniert in allen Modi (production nur über Redirect)
- json + jsmock verwenden jetzt denselben API-Handler
- Redux-Integration ist vollständig