- 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
3.2 KiB
3.2 KiB
📦 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, diewindow-Variablen setztproduction– Echte CPL-Hardware mit CGI-Platzhaltern (JS in HTML/JS-Dateien)
🧩 Datenfluss-Überblick (UML Diagramm)
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
.jsDatei per Regex und überschreibtwin_da_state = [...]
production
- ❌ Gerät entscheidet – nur lesender Zugriff über
<script> - ⚙️ Änderung über CGI-URL z. B.
/digitalOutputs.html?OUT3=1
🧪 Tipps
- Verwende
setInterval()beijsmockoderproduction, um regelmäßig<script>neu zu laden - Bei
json: nutze Redux-Thunk + Service → API → JSON fetchDigitalOutputsService.tskapselt 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)
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