# 📦 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-Datei - `jsmock`: Simulation durch `digitalOutputsMockData.js` - `production`: Reale CPL-Hardware über CGI-Platzhalter --- ## 🔁 Lesen der digitalen Ausgänge ```mermaid flowchart TD A[DigitalOutputsWidget.tsx] --> B[useEffect] B --> C[dispatch fetchDigitalOutputsThunk] C --> D[fetchDigitalOutputsService] D --> E{Moduswahl: NEXT_PUBLIC_CPL_MODE} E -->|json| F1[GET /api/cpl/fetchDigitalOutputsHandler.ts] F1 --> F2[digitalOutputsMockData.json] E -->|jsmock| G1[GET /api/fake-cpl/fetchDigitalOutputsDeviceMockHandler] G1 --> G2[digitalOutputsMockData.js → window.win_da_state] E -->|production| H1[loadScript '/CPL?/CPL/SERVICE/digitalOutputs.js'] H1 --> H2[Platzhalter-basierte win_da_state] F2 & G2 & H2 --> I[Redux: digitalOutputsSlice] I --> J[useSelector] --> A ``` --- ## ✍️ Updaten der digitalen Ausgänge ```mermaid 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/fetchDigitalOutputsHandler.ts` | `GET` | `json` | Liest JSON-Datei | | `/api/fake-cpl/fetchDigitalOutputsDeviceMockHandler.ts` | `GET` | `jsmock` | Liest Mock-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) ```json { "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/ → JSON-/Update-Handler /pages/api/fake-cpl/ → jsmock-API-Handler /components/main/einausgaenge/ → UI-Komponente: DigitalOutputsWidget.tsx ``` --- ## ✅ Status - [x] Lesen funktioniert in allen Modi - [x] Schreiben funktioniert in allen Modi (production nur über Redirect) - [x] Redux-Integration ist vollständig