- Unterstützung für drei Modi implementiert: json, jsmock und production - fetchDigitalOutputsService.ts erkennt NEXT_PUBLIC_CPL_MODE und lädt Daten je nach Umgebung - API-Handler /api/cpl/updateDigitalOutputsHandler verarbeitet POST-Anfragen für json und jsmock - In production wird Statusänderung per Redirect (window.location.href) an das CPL gesendet - Redux-Slice für digitale Ausgänge vollständig angebunden - UI (DigitalOutputsWidget.tsx) zeigt Status und ermöglicht das Umschalten - Dokumentation als README_digitalOutputs_final.md mit UML-Diagrammen ergänzt - CHANGELOG.md auf Version 1.6.417 aktualisiert
92 lines
3.0 KiB
Markdown
92 lines
3.0 KiB
Markdown
# 📦 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
|