Files
CPLv4.0/docs/Architektur/README_digitalOutputs.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.0 KiB

📦 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

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

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)

{
  "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

  • Lesen funktioniert in allen Modi
  • Schreiben funktioniert in allen Modi (production nur über Redirect)
  • Redux-Integration ist vollständig