feat: Digitale Ausgänge vollständig implementiert (Lesen & Schreiben in allen Modi)

- 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
This commit is contained in:
ISA
2025-06-19 09:01:49 +02:00
parent 1b01f37f90
commit dbb38cc7d8
17 changed files with 401 additions and 64 deletions

View File

@@ -0,0 +1,99 @@
# 📦 Datenverarbeitung in CPL: JSON, jsmock, production
Dieses Dokument beschreibt die Architektur zur Verarbeitung von Digitalausgängen (DA) im CPL-System unter verschiedenen Modi.
## ✅ Unterstützte Modi
- `json` Entwicklung mit lokalen Mock-JSON-Dateien (editierbar)
- `jsmock` Simulation des Geräts mit einer JS-Datei, die `window`-Variablen setzt
- `production` Echte CPL-Hardware mit CGI-Platzhaltern (JS in HTML/JS-Dateien)
---
## 🧩 Datenfluss-Überblick (UML Diagramm)
```mermaid
flowchart TD
A[NEXT_PUBLIC_CPL_MODE] --> B{Modus}
B -->|json| C[API: fetchDigitalOutputsAPIHandler]
C --> D[JSON-Datei (editable)]
B -->|jsmock| E[fetchDigitalOutputsService()]
E --> F[<script> digitalOutputsMockData.js]
F --> G[window.win_da_state / bezeichnung]
B -->|production| H[fetchDigitalOutputsService()]
H --> I[<script> /CPL/digitalOutputs.js]
I --> J[window.win_da_state / bezeichnung]
D & G & J --> K[Redux Store / Slice]
K --> L[Redux Selector]
L --> M[UI: DigitalOutputsWidget.tsx]
```
---
## 🧠 Entscheidungshilfe
| Modus | Quelle | Vorteil | Änderbar |
| ------------ | ------------------------------------------ | ---------------------------- | -------------- |
| `json` | `/mocks/api/SERVICE/*.json` | Schnell editierbar & testbar | ✅ Ja |
| `jsmock` | `/mocks/device-cgi-simulator/SERVICE/*.js` | Realistische Simulation | ❌ Nur per API |
| `production` | `/public/CPL/*.js` | Reale Gerätedaten | ❌ Nein |
---
## 🔁 Aktualisierung der Daten
### json
-`POST /api/cpl/updateDigitalOutputsHandler`
- 📂 Schreibt direkt in JSON-Datei (z.B. `digitaleAusgaengeMockData.json`)
### jsmock
-`GET /api/fake-cpl/updateDigitalOutputsHandler?id=3&value=1`
- ✍️ Ändert `.js` Datei per Regex und überschreibt `win_da_state = [...]`
### production
- ❌ Gerät entscheidet nur lesender Zugriff über `<script>`
- ⚙️ Änderung über CGI-URL z.B. `/digitalOutputs.html?OUT3=1`
---
## 🧪 Tipps
- Verwende `setInterval()` bei `jsmock` oder `production`, um regelmäßig `<script>` neu zu laden
- Bei `json`: nutze Redux-Thunk + Service → API → JSON
- `fetchDigitalOutputsService.ts` kapselt alle Unterschiede sauber ab
---
## 📁 Verzeichnisse
```
/mocks/api/SERVICE/ # JSON-Dateien
/public/CPLmockData/SERVICE/ # jsmock-Skripte
/public/CPL/SERVICE/ # Geräteplatzhalter
/pages/api/fake-cpl/ # GET/UPDATE API für jsmock
/pages/api/cpl/ # JSON- und Gerätelogik
/store/digitalOutputs/ # Redux-Slice & Thunk
```
## 🧩 Redux-Flow Übersicht (Mermaid)
```mermaid
flowchart TD
A[Component: DigitalOutputsWidget] --> B[useEffect]
B --> C[dispatch fetchDigitalOutputsThunk]
C --> D[fetchDigitalOutputsService]
D --> E{Moduswahl}
E -->|json| F[API: /api/cpl/fetchDigitalOutputsAPIHandler]
E -->|jsmock| G[<script> digitalOutputsMockData.js]
E -->|production| H[<script> /CPL/digitalOutputs.js]
F & G & H --> I[Reducer: digitalOutputsSlice]
I --> J[useSelector] --> A
```