From e932bee120be2361b79cba6eeccfb246e281bae5 Mon Sep 17 00:00:00 2001 From: ISA Date: Thu, 24 Jul 2025 13:59:44 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Anzeige=20K=C3=9C-Display:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Zeile Alarm: Isolationsfehler, Schleifenfehler, Aderbruch, Erdschluß, Messpannung: Immer in Rot; wenn kein Alarm, bleibt die Zeile leer 2. Zeile: Isowert: xx MOhm (großes M) in Rot, wenn Iso-Fehler ansteht Beispiel: ISO: 100 MOHm der beim Abliech: ISO: Abgleich 3. Zeile: Schleifenwert, xx kOhm (kleines k) in Rot, wenn Schleifenfehler ansteht Beispiel:: RSL: 1,7 kOhm oder wenn Schleifenmessung aktiv: RSL: Messung --- .env.development | 2 +- .env.production | 2 +- CHANGELOG.md | 5 ++ .../kabelueberwachung/kue705FO/Kue705FO.tsx | 90 ++++++++----------- components/main/system/DetailModal.tsx | 32 ++++++- components/main/system/SystemCharts.tsx | 19 +++- docs/TODO.md | 16 ++++ .../SERVICE/kabelueberwachungMockData.js | 12 +-- package-lock.json | 4 +- package.json | 2 +- 10 files changed, 117 insertions(+), 67 deletions(-) diff --git a/.env.development b/.env.development index ab70ae3..18beba6 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.644 +NEXT_PUBLIC_APP_VERSION=1.6.645 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 3529f29..c7c290f 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.644 +NEXT_PUBLIC_APP_VERSION=1.6.645 NEXT_PUBLIC_CPL_MODE=production \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 494732d..2207a82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [1.6.645] – 2025-07-24 + +- Feat: Fenster nicht schließen für Firmware Update + +--- ## [1.6.644] – 2025-07-24 - Firmware Update Bestätigung in Littwin blau diff --git a/components/main/kabelueberwachung/kue705FO/Kue705FO.tsx b/components/main/kabelueberwachung/kue705FO/Kue705FO.tsx index 070c5eb..47f68e7 100644 --- a/components/main/kabelueberwachung/kue705FO/Kue705FO.tsx +++ b/components/main/kabelueberwachung/kue705FO/Kue705FO.tsx @@ -220,67 +220,53 @@ const Kue705FO: React.FC = ({ - {/* Anzeige des Isolation und Schleifenwiderstand zusammen */} -
-
+ {/* Schwarzes Display mit drei Zeilen: Alarm, ISO, Schleife */} +
+
+ {/* 1. Zeile: Alarmtext in Rot, sonst leer */} - {Number(kuePSTmMinus96V?.[slotIndex]) === 1 ? ( - "PST Fehler" - ) : Number(kueCableBreak?.[slotIndex]) === 1 ? ( - "Aderbruch" - ) : Number(kueGroundFault?.[slotIndex]) === 1 ? ( - "Erdschluss" - ) : Number(kueAlarm1?.[slotIndex]) === 1 ? ( -
- - Isolationsfehler - - - {isoDisplayValue} MOhm - -
- ) : Number(kueAlarm2?.[slotIndex]) === 1 ? ( - "Schleifenfehler" - ) : ( - <> - - - ISO: {" "} - {isoDisplayValue} MOhm - - - - )} + {Number(kuePSTmMinus96V?.[slotIndex]) === 1 + ? "Messpannung" + : Number(kueCableBreak?.[slotIndex]) === 1 + ? "Aderbruch" + : Number(kueGroundFault?.[slotIndex]) === 1 + ? "Erdschluss" + : Number(kueAlarm1?.[slotIndex]) === 1 + ? "Isolationsfehler" + : Number(kueAlarm2?.[slotIndex]) === 1 + ? "Schleifenfehler" + : ""} +
+ {/* 2. Zeile: ISO-Wert, immer anzeigen */} + + {isoDisplayValue === "Abgleich" + ? "ISO: Abgleich" + : `ISO: ${Number(isolationswert)} MOhm`} + + {/* 3. Zeile: Schleifenwert, in Rot bei Schleifenfehler, sonst normal */} + + {activeButton === "Schleife" && loading + ? "RSL: Messung" + : `RSL: ${loopDisplayValue} kOhm`} - {/* Schleifenwiderstand immer anzeigen, außer bei Fehlern */} - {![ - Number(kuePSTmMinus96V?.[slotIndex]), - Number(kueCableBreak?.[slotIndex]), - Number(kueGroundFault?.[slotIndex]), - Number(kueAlarm1?.[slotIndex]), - Number(kueAlarm2?.[slotIndex]), - ].includes(1) && ( - <> - - - Sch.: {" "} - {loopDisplayValue} kOhm - - - - )}
diff --git a/components/main/system/DetailModal.tsx b/components/main/system/DetailModal.tsx index 1451d2d..ebd2085 100644 --- a/components/main/system/DetailModal.tsx +++ b/components/main/system/DetailModal.tsx @@ -126,6 +126,7 @@ export const DetailModal = ({ const [chartData, setChartData] = useState({ datasets: [], }); + const [isLoading, setIsLoading] = useState(false); const vonDatum = useSelector( (state: RootState) => state.kabelueberwachungChartSlice.vonDatum ); @@ -186,6 +187,7 @@ export const DetailModal = ({ }, []); const handleFetchData = () => { + setIsLoading(true); let sortedData = [...reduxData].reverse(); if (vonDatum && bisDatum) { @@ -254,10 +256,31 @@ export const DetailModal = ({ } }, [isOpen, selectedKey]); + // Chart.js animation complete callback to set isLoading false + useEffect(() => { + if (chartRef.current && isLoading) { + const chartInstance = chartRef.current; + // Save previous callback to restore later + const prevCallback = chartInstance.options.animation?.onComplete; + chartInstance.options.animation = { + ...chartInstance.options.animation, + onComplete: () => { + setIsLoading(false); + if (typeof prevCallback === "function") prevCallback(); + }, + }; + chartInstance.update(); + } + }, [chartData, isLoading]); + if (!isOpen || !selectedKey) return null; return ( -
+
diff --git a/components/main/system/SystemCharts.tsx b/components/main/system/SystemCharts.tsx index 55e998d..5f73ba2 100644 --- a/components/main/system/SystemCharts.tsx +++ b/components/main/system/SystemCharts.tsx @@ -38,6 +38,7 @@ type Props = { zeitraum: "DIA0" | "DIA1" | "DIA2"; }; export const SystemCharts = ({ history }: Props) => { + const [isLoading, setIsLoading] = React.useState(true); const reversedHistory = [...history].reverse(); const labels = reversedHistory.map((h) => new Date(h.time).toLocaleTimeString() @@ -45,9 +46,21 @@ export const SystemCharts = ({ history }: Props) => { const formatValue = (v: number) => v.toFixed(2); + // Chart.js animation callback + const animation = { + onComplete: () => { + setIsLoading(false); + }, + }; + + React.useEffect(() => { + setIsLoading(true); + }, [history]); + const baseOptions = { responsive: true, maintainAspectRatio: false, + animation, scales: { y: { beginAtZero: false, @@ -65,7 +78,11 @@ export const SystemCharts = ({ history }: Props) => { }; return ( -
+
später - [ ] TODO: KVz später + +Anzeige KÜ-Display: + +1. Zeile Alarm: Isolationsfehler, Schleifenfehler, Aderbruch, Erdschluß, Messpannung: Immer in Rot; wenn kein Alarm, bleibt die Zeile leer + +2. Zeile: Isowert: xx MOhm (großes M) + +in Rot, wenn Iso-Fehler ansteht + +Beispiel: ISO: 100 MOHm der beim Abliech: ISO: Abgleich + +3. Zeile: Schleifenwert, xx kOhm (kleines k) + +in Rot, wenn Schleifenfehler ansteht + +Beispiel:: RSL: 1,7 kOhm oder wenn Schleifenmessung aktiv: RSL: Messung diff --git a/mocks/device-cgi-simulator/SERVICE/kabelueberwachungMockData.js b/mocks/device-cgi-simulator/SERVICE/kabelueberwachungMockData.js index ded1757..92020fb 100644 --- a/mocks/device-cgi-simulator/SERVICE/kabelueberwachungMockData.js +++ b/mocks/device-cgi-simulator/SERVICE/kabelueberwachungMockData.js @@ -15,8 +15,8 @@ var win_kuePSTmMinus96V = [ ]; //Aderbruch 1 = Fehler, 0 = kein Fehler var win_kueCableBreak = [ - 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 1, 1, 1, + 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 0, ]; //Erdschluss 1 = Fehler, 0 = kein Fehler var win_kueGroundFault = [ @@ -25,12 +25,12 @@ var win_kueGroundFault = [ ]; //Isolationsfehler 1 = Fehler, 0 = kein Fehler, Alarm kommt wenn kueIso < kueLimit1 var win_kueAlarm1 = [ - 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, + 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, ]; //Schleifenfehler 1 = Fehler, 0 = kein Fehler var win_kueAlarm2 = [ - 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ]; //Überlauf 1 = Fehler, 0 = kein Fehler , hier wird in Display ">200 MOhm" angezeigt @@ -62,9 +62,9 @@ die Filterzeit startet beim nächsten Unterschreiten des Grenzwerts neu. Die Fil kurzfristige Schwankungen oder Störungen fälschlicherweise als Fehler gemeldet werden. */ var win_kueDelay1 = [ - 3, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, - 420, + 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, + 420, 420, ]; //--------------------------------------------------- //Schleifenwiderstand in Display (resDisplay) Einheit: KOhm diff --git a/package-lock.json b/package-lock.json index f8f281b..f1d74a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cpl-v4", - "version": "1.6.644", + "version": "1.6.645", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cpl-v4", - "version": "1.6.644", + "version": "1.6.645", "dependencies": { "@fontsource/roboto": "^5.1.0", "@headlessui/react": "^2.2.4", diff --git a/package.json b/package.json index 1dc46a9..5e498b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cpl-v4", - "version": "1.6.644", + "version": "1.6.645", "private": true, "scripts": { "dev": "next dev",