From 0fb6d184bd06379a21700aa278985171d4dba5f6 Mon Sep 17 00:00:00 2001 From: ISA Date: Wed, 13 Aug 2025 12:13:16 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Meldung=20f=C3=BCr=20Events=20darstelle?= =?UTF-8?q?n=20(Kalibrierung,=20TDR=20ud=20Schleifenmessung)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 2 +- .env.production | 2 +- CHANGELOG.md | 5 ++ components/common/DeviceEventsBridge.tsx | 55 ++++++++++++++++++ components/common/GlobalActivityOverlay.tsx | 26 +++++++++ .../SERVICE/kabelueberwachungMockData.js | 16 +++++ package-lock.json | 4 +- package.json | 2 +- pages/_app.tsx | 15 +++++ pages/api/cpl/kabelueberwachungAPIHandler.ts | 3 + public/CPL/SERVICE/kueData.js | 6 +- redux/slices/deviceEventsSlice.ts | 58 +++++++++++++++++++ redux/store.ts | 2 + 13 files changed, 188 insertions(+), 8 deletions(-) create mode 100644 components/common/DeviceEventsBridge.tsx create mode 100644 components/common/GlobalActivityOverlay.tsx create mode 100644 redux/slices/deviceEventsSlice.ts diff --git a/.env.development b/.env.development index 47dcdae..ab2dcaa 100644 --- a/.env.development +++ b/.env.development @@ -6,6 +6,6 @@ NEXT_PUBLIC_USE_MOCK_BACKEND_LOOP_START=false NEXT_PUBLIC_EXPORT_STATIC=false NEXT_PUBLIC_USE_CGI=false # App-Versionsnummer -NEXT_PUBLIC_APP_VERSION=1.6.705 +NEXT_PUBLIC_APP_VERSION=1.6.706 NEXT_PUBLIC_CPL_MODE=json # json (Entwicklungsumgebung) oder jsSimulatedProd (CPL ->CGI-Interface-Simulator) oder production (CPL-> CGI-Interface Platzhalter) diff --git a/.env.production b/.env.production index 302ea31..280e338 100644 --- a/.env.production +++ b/.env.production @@ -5,5 +5,5 @@ NEXT_PUBLIC_CPL_API_PATH=/CPL NEXT_PUBLIC_EXPORT_STATIC=true NEXT_PUBLIC_USE_CGI=true # App-Versionsnummer -NEXT_PUBLIC_APP_VERSION=1.6.705 +NEXT_PUBLIC_APP_VERSION=1.6.706 NEXT_PUBLIC_CPL_MODE=production \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index b7aa15e..270056a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [1.6.706] – 2025-08-13 + +- Events Schleifenmessung, TDR-Messung und Abgleich in public/CPL/kueData.js eingefügt um später zu lesen und entsprechend ' Bitte Warten' Meldung zu erstellen für den User + +--- ## [1.6.705] – 2025-08-13 - Daten von CPL bekommen DIA0- DIA2 ISO und RSL diff --git a/components/common/DeviceEventsBridge.tsx b/components/common/DeviceEventsBridge.tsx new file mode 100644 index 0000000..2a8bc87 --- /dev/null +++ b/components/common/DeviceEventsBridge.tsx @@ -0,0 +1,55 @@ +"use client"; +import React from "react"; +import { useAppDispatch } from "@/redux/store"; +import { setEvents } from "@/redux/slices/deviceEventsSlice"; + +declare global { + interface Window { + loopMeasurementEvent?: number[]; + tdrMeasurementEvent?: number[]; + alignmentEvent?: number[]; + } +} + +const POLL_MS = 2000; // poll every 2 seconds + +export default function DeviceEventsBridge() { + const dispatch = useAppDispatch(); + + React.useEffect(() => { + let lastSig = ""; + const readAndDispatch = () => { + const ksx = Array.isArray(window.loopMeasurementEvent) + ? window.loopMeasurementEvent + : undefined; + const ksy = Array.isArray(window.tdrMeasurementEvent) + ? window.tdrMeasurementEvent + : undefined; + const ksz = Array.isArray(window.alignmentEvent) + ? window.alignmentEvent + : undefined; + // Build a stable signature of first 32 values per array + const to32 = (a?: number[]) => { + const out: number[] = []; + if (Array.isArray(a)) { + for (let i = 0; i < 32; i++) out.push(a[i] ? 1 : 0); + } else { + for (let i = 0; i < 32; i++) out.push(0); + } + return out; + }; + const sig = `${to32(ksx).join("")}|${to32(ksy).join("")}|${to32(ksz).join( + "" + )}`; + if (sig !== lastSig) { + lastSig = sig; + dispatch(setEvents({ ksx, ksy, ksz })); + } + }; + readAndDispatch(); + const id = setInterval(readAndDispatch, POLL_MS); + return () => clearInterval(id); + }, [dispatch]); + + return null; +} diff --git a/components/common/GlobalActivityOverlay.tsx b/components/common/GlobalActivityOverlay.tsx new file mode 100644 index 0000000..171ca14 --- /dev/null +++ b/components/common/GlobalActivityOverlay.tsx @@ -0,0 +1,26 @@ +"use client"; +import React from "react"; +import { useAppSelector } from "@/redux/store"; + +export default function GlobalActivityOverlay() { + const anyLoop = useAppSelector((s) => s.deviceEvents.anyLoopActive); + const anyTdr = useAppSelector((s) => s.deviceEvents.anyTdrActive); + const anyAlign = useAppSelector((s) => s.deviceEvents.anyAlignmentActive); + + const active = anyLoop || anyTdr || anyAlign; + if (!active) return null; + + const messages: string[] = []; + if (anyLoop) messages.push("Schleifenmessung läuft…"); + if (anyTdr) messages.push("TDR-Messung läuft…"); + if (anyAlign) messages.push("Abgleich läuft…"); + + return ( +
+
+
Bitte warten…
+
{messages.join(" · ")}
+
+
+ ); +} diff --git a/mocks/device-cgi-simulator/SERVICE/kabelueberwachungMockData.js b/mocks/device-cgi-simulator/SERVICE/kabelueberwachungMockData.js index 92020fb..4252ed5 100644 --- a/mocks/device-cgi-simulator/SERVICE/kabelueberwachungMockData.js +++ b/mocks/device-cgi-simulator/SERVICE/kabelueberwachungMockData.js @@ -257,3 +257,19 @@ var win_fallSensors = [ { id: "KVZ3", status: 1 }, { id: "KVZ4", status: 1 }, ]; + +// Event Schleifenmessung KSX +var loopMeasurementEvent = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, +]; +//Event TDR-Messung +var tdrMeasurementEvent = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, +]; +//Event Abgleich +var alignmentEvent = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, +]; diff --git a/package-lock.json b/package-lock.json index e52d0f4..544c2b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cpl-v4", - "version": "1.6.705", + "version": "1.6.706", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cpl-v4", - "version": "1.6.705", + "version": "1.6.706", "dependencies": { "@fontsource/roboto": "^5.1.0", "@headlessui/react": "^2.2.4", diff --git a/package.json b/package.json index 9b919c1..43b3ee0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cpl-v4", - "version": "1.6.705", + "version": "1.6.706", "private": true, "scripts": { "dev": "next dev", diff --git a/pages/_app.tsx b/pages/_app.tsx index f080ee5..7863448 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -11,6 +11,9 @@ import Header from "@/components/header/Header"; import Navigation from "@/components/navigation/Navigation"; import Footer from "@/components/footer/Footer"; import { store } from "@/redux/store"; +import Script from "next/script"; +import DeviceEventsBridge from "@/components/common/DeviceEventsBridge"; +import GlobalActivityOverlay from "@/components/common/GlobalActivityOverlay"; // Thunks importieren import { getKueDataThunk } from "@/redux/thunks/getKueDataThunk"; @@ -40,7 +43,18 @@ import "@/styles/globals.css"; function MyApp({ Component, pageProps }: AppProps) { return ( + {/* Load global data: dev -> API mock JS; prod -> real device JS from public */} + {process.env.NODE_ENV === "development" ? ( +