Files
CPLv4.0/docs/diagrams/analog-inputs-flow.md

2.1 KiB
Raw Blame History

🧩 Datenfluss & Architekturstrategie Analoge Eingänge (Alle Modi)

Diese Dokumentation beschreibt die Architekturstrategie für die Verarbeitung von analogen Eingangsdaten in den drei unterstützten Modi: jsmock, json und production.


🎯 Ziel

  • Trennung von Verantwortung (API, Service, UI)
  • Mock-fähige Entwicklung ohne echte Hardware
  • Einheitliches JSON-Format für alle Modi
  • Zukunftssicherheit für moderne Systeme mit nativen JSON-APIs

🔁 Datenfluss (alle Modi)

flowchart TD

    subgraph JSMOCK-Modus
      A1["analogInputsMockData.js - Mockdaten mit window-Variablen"]
      B1["/api/cpl/getAnalogInputsHandler.ts - API gibt Rohdaten zurück"]
      C1["fetchAnalogInputsService.ts - wandelt in JSON"]
      A1 --> B1 --> C1
    end

    subgraph JSON-Modus
      A2["analogInputs.json - Mockdaten im JSON-Format"]
      B2["/api/cpl/getAnalogInputsHandler.ts - gibt JSON direkt weiter"]
      C2["fetchAnalogInputsService.ts - verarbeitet JSON"]
      A2 --> B2 --> C2
    end

    subgraph Production-Modus
      A3["CPL Gerät via CGI - JS mit Platzhaltern (im public-Verzeichnis)"]
      C3["fetchAnalogInputsService.ts - wandelt direkt JS in JSON"]
      A3 --> C3
    end

    C1 --> D["getAnalogInputsThunk.ts"]
    C2 --> D
    C3 --> D
    D --> E["Redux Store und UI"]

Vorteile dieser Struktur

  • 🔄 Austauschbare Datenquellen ohne Frontend-Codeänderung
  • 🧼 Trennung von Datenformaten (JS, JSON, CGI) und deren Umwandlung
  • 🧪 Mock-fähig für Entwickler und CI ohne Backend
  • 🔮 Zukunftssicher für moderne embedded APIs mit echtem JSON

📁 Verzeichnisstruktur (Auszug)

/mocks/device-cgi-simulator/SERVICE/*.js      # jsmock-Modus
/mocks/api/SERVICE/*.json                    # json-Modus
/public/CPL/SERVICE/*.js                     # production-Modus (CGI-Daten im JS-Format)
/services/fetchAnalogInputsService.ts        # verarbeitet Rückgabe zu JSON
/redux/thunks/getAnalogInputsThunk.ts        # Redux-Thunk zur Übergabe
/components/AnalogInputsDisplay.tsx          # Anzeige in der UI