- 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
100 lines
3.2 KiB
Markdown
100 lines
3.2 KiB
Markdown
# 📦 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
|
||
```
|