Files
CPLv4.0/docs/Architektur/CPL_DataHandling.md
ISA dbb38cc7d8 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
2025-06-19 09:01:49 +02:00

3.2 KiB
Raw Blame History

📦 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)

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)

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