From 845c2dd6589bcd7881dbc5d71c86787019baf89b Mon Sep 17 00:00:00 2001 From: ISA Date: Wed, 25 Jun 2025 15:26:00 +0200 Subject: [PATCH] Add: SERVICE JSON Files --- .env.development | 2 +- .env.production | 2 +- CHANGELOG.md | 5 ++ .../main/analogInputs/AnalogInputsChart.tsx | 9 ++- .../main/analogInputs/AnalogInputsTable.tsx | 12 ++-- docs/TODO.md | 18 +++--- package-lock.json | 4 +- package.json | 2 +- pages/analogeEingaenge.tsx | 2 +- pages/kabelueberwachung.tsx | 58 ++++++++---------- public/CPL/SERVICE/Start.json | 3 + public/CPL/SERVICE/System.json | 17 +++++ public/CPL/SERVICE/digitalInputs.json | 20 ++++++ public/CPL/SERVICE/digitalOutputs.json | 4 ++ public/CPL/SERVICE/kueData.json | 42 +++++++++++++ .../CPL/SERVICE/kueDataKnoten/kueData0.json | 50 +++++++++++++++ public/CPL/SERVICE/opcua.json | 5 ++ public/CPL/SERVICE/systemVoltTemp.json | 3 + redux/slices.zip | Bin 0 -> 28547 bytes redux/slices/selectedAnalogInputSlice.ts | 35 +++++++++++ redux/store.ts | 2 + redux/thunks.zip | Bin 0 -> 14624 bytes redux/types.zip | Bin 0 -> 835 bytes 23 files changed, 242 insertions(+), 53 deletions(-) create mode 100644 public/CPL/SERVICE/Start.json create mode 100644 public/CPL/SERVICE/System.json create mode 100644 public/CPL/SERVICE/digitalInputs.json create mode 100644 public/CPL/SERVICE/digitalOutputs.json create mode 100644 public/CPL/SERVICE/kueData.json create mode 100644 public/CPL/SERVICE/kueDataKnoten/kueData0.json create mode 100644 public/CPL/SERVICE/opcua.json create mode 100644 public/CPL/SERVICE/systemVoltTemp.json create mode 100644 redux/slices.zip create mode 100644 redux/slices/selectedAnalogInputSlice.ts create mode 100644 redux/thunks.zip create mode 100644 redux/types.zip diff --git a/.env.development b/.env.development index 8162e2e..d848a19 100644 --- a/.env.development +++ b/.env.development @@ -6,7 +6,7 @@ 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.446 +NEXT_PUBLIC_APP_VERSION=1.6.447 NEXT_PUBLIC_CPL_MODE=jsSimulatedProd # json (Entwicklungsumgebung) oder jsSimulatedProd (CPL ->CGI-Interface-Simulator) oder production (CPL-> CGI-Interface Platzhalter) #### Feature-Flags #### diff --git a/.env.production b/.env.production index 1f97e8b..32a5ebf 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.446 +NEXT_PUBLIC_APP_VERSION=1.6.447 NEXT_PUBLIC_CPL_MODE=production \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index cd77fd4..3b6dc27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [1.6.447] – 2025-06-25 + +- feat: Zeitraum einstellbar in AnalogInputsChart mit Zoom- und Pan-Funktion umgesetzt + +--- ## [1.6.446] – 2025-06-25 - docs: Zusatzfunktionen (Kai, 25.06.2025) in TODO.md ergänzt diff --git a/components/main/analogInputs/AnalogInputsChart.tsx b/components/main/analogInputs/AnalogInputsChart.tsx index 366afc0..efd717f 100644 --- a/components/main/analogInputs/AnalogInputsChart.tsx +++ b/components/main/analogInputs/AnalogInputsChart.tsx @@ -36,6 +36,9 @@ export default function AnalogInputsChart({ }: { selectedId: number | null; }) { + const selectedInput = useSelector( + (state: RootState) => state.selectedAnalogInput + ); const zoomEnabled = process.env.NEXT_PUBLIC_FEATURE_MESSWERTANZEIGE_EINGANG === "true"; const dispatch = useDispatch(); @@ -82,7 +85,9 @@ export default function AnalogInputsChart({ const chartData = { datasets: [ { - label: `Messkurve Messwerteingang ${selectedId}`, + label: `Messkurve ${selectedInput?.label ?? "Eingang"} (${ + selectedInput?.unit ?? "" + })`, data: inputData.map((point: any) => ({ x: point.t, y: point.m, @@ -145,7 +150,7 @@ export default function AnalogInputsChart({ y: { title: { display: true, - text: "Messwert", + text: `Messwert (${selectedInput?.unit ?? ""})`, }, }, }, diff --git a/components/main/analogInputs/AnalogInputsTable.tsx b/components/main/analogInputs/AnalogInputsTable.tsx index eacc411..6a66a8d 100644 --- a/components/main/analogInputs/AnalogInputsTable.tsx +++ b/components/main/analogInputs/AnalogInputsTable.tsx @@ -18,6 +18,7 @@ import { getAnalogInputsThunk } from "@/redux/thunks/getAnalogInputsThunk"; import { Icon } from "@iconify/react"; import settingsIcon from "@iconify/icons-mdi/settings"; import waveformIcon from "@iconify/icons-mdi/waveform"; +import { setSelectedAnalogInput } from "@/redux/slices/selectedAnalogInputSlice"; export default function AnalogInputsTable({ setSelectedId, @@ -39,9 +40,10 @@ export default function AnalogInputsTable({ (state: RootState) => state.analogInputs ?? [] ); - const handleSelect = (id: number) => { + const handleSelect = (id: number, input: AnalogInput) => { setSelectedId(id); setActiveId(id); + dispatch(setSelectedAnalogInput(input)); // 🧠 hier kommt die Bezeichnung in Redux }; return ( @@ -79,7 +81,7 @@ export default function AnalogInputsTable({ > handleSelect(e.id!)} + onClick={() => handleSelect(e.id!, e)} >
handleSelect(e.id!)} + onClick={() => handleSelect(e.id!, e)} > {typeof e.value === "number" ? e.value.toFixed(2) : "-"} @@ -99,7 +101,7 @@ export default function AnalogInputsTable({ {e.unit || "-"} handleSelect(e.id!)} + onClick={() => handleSelect(e.id!, e)} > {e.label || "----"} @@ -107,7 +109,7 @@ export default function AnalogInputsTable({ ))}
- {racks[`rack${activeRack}` as RackKey].map((slot, index) => { - const slotIndex = index + (activeRack - 1) * 8; - return ( -
- -
- ); - })} +
+ {racks[`rack${activeRack}`].map((slot, index) => { + const slotIndex = index + (activeRack - 1) * 8; + return ( +
+ +
+ ); + })} +
); } diff --git a/public/CPL/SERVICE/Start.json b/public/CPL/SERVICE/Start.json new file mode 100644 index 0000000..3533961 --- /dev/null +++ b/public/CPL/SERVICE/Start.json @@ -0,0 +1,3 @@ +{ + "win_last20Messages": "<%=SAM01%>" +} diff --git a/public/CPL/SERVICE/System.json b/public/CPL/SERVICE/System.json new file mode 100644 index 0000000..29bae80 --- /dev/null +++ b/public/CPL/SERVICE/System.json @@ -0,0 +1,17 @@ +{ + "win_appVersion": "<%=SAV00%>", + "win_deviceName": "<%=SAN01%>", + "win_mac1": "<%=SEM01%>", + "win_ip": "<%=SEI01%>", + "win_subnet": "<%=SES01%>", + "win_gateway": "<%=SEG01%>", + "win_cplInternalTimestamp": "<%=SCL01%>", + "win_ntp1": "<%=STP01%>", + "win_ntp2": "<%=STP02%>", + "win_ntp3": "<%=STP03%>", + "win_ntpTimezone": "<%=STT00%>", + "win_ntpActive": "<%=STA00%>", + "win_opcState": "<%=SOS01%>", + "win_opcSessions": "<%=SOC01%>", + "win_opcName": "<%=SON01%>" +} diff --git a/public/CPL/SERVICE/digitalInputs.json b/public/CPL/SERVICE/digitalInputs.json new file mode 100644 index 0000000..f7699e6 --- /dev/null +++ b/public/CPL/SERVICE/digitalInputs.json @@ -0,0 +1,20 @@ +{ + "win_de_state": ["<%=DES80%>", "<%=DES81%>", "<%=DES82%>", "<%=DES83%>"], + "win_de_label": ["<%=DEN80%>", "<%=DEN81%>", "<%=DEN82%>", "<%=DEN83%>"], + "win_de_counter": ["<%=DEC80%>", "<%=DEC81%>", "<%=DEC82%>", "<%=DEC83%>"], + "win_de_time_filter": [ + "<%=DEF80%>", + "<%=DEF81%>", + "<%=DEF82%>", + "<%=DEF83%>" + ], + "win_de_weighting": ["<%=DEG80%>", "<%=DEG81%>", "<%=DEG82%>", "<%=DEG83%>"], + "win_de_invert": ["<%=DEI80%>", "<%=DEI81%>", "<%=DEI82%>", "<%=DEI83%>"], + "win_de_counter_active": [ + "<%=DEZ80%>", + "<%=DEZ81%>", + "<%=DEZ82%>", + "<%=DEZ83%>" + ], + "win_de_offline": ["<%=DEA80%>", "<%=DEA81%>", "<%=DEA82%>", "<%=DEA83%>"] +} diff --git a/public/CPL/SERVICE/digitalOutputs.json b/public/CPL/SERVICE/digitalOutputs.json new file mode 100644 index 0000000..57ce80c --- /dev/null +++ b/public/CPL/SERVICE/digitalOutputs.json @@ -0,0 +1,4 @@ +{ + "win_da_state": ["<%=DAS01%>", "<%=DAS02%>", "<%=DAS03%>", "<%=DAS04%>"], + "win_da_bezeichnung": ["<%=DAN01%>", "<%=DAN02%>", "<%=DAN03%>", "<%=DAN04%>"] +} diff --git a/public/CPL/SERVICE/kueData.json b/public/CPL/SERVICE/kueData.json new file mode 100644 index 0000000..04bb774 --- /dev/null +++ b/public/CPL/SERVICE/kueData.json @@ -0,0 +1,42 @@ +{ + "win_kueOnline": ["<%=KSO80%>", "<%=KSO81%>", "<%=KSO82%>", "<%=KSO83%>"], + "win_kueVersion": ["<%=KSV80%>", "<%=KSV81%>", "<%=KSV82%>", "<%=KSV83%>"], + "win_kuePSTmMinus96V": [ + "<%=KSS80%>", + "<%=KSS81%>", + "<%=KSS82%>", + "<%=KSS83%>" + ], + "win_kueCableBreak": ["<%=KSC80%>", "<%=KSC81%>", "<%=KSC82%>", "<%=KSC83%>"], + "win_kueGroundFault": [ + "<%=KSG80%>", + "<%=KSG81%>", + "<%=KSG82%>", + "<%=KSG83%>" + ], + "win_kueOverflow": ["<%=KIW80%>", "<%=KIW81%>", "<%=KIW82%>", "<%=KIW83%>"], + "win_kueIso": ["<%=KIM80%>", "<%=KIM81%>", "<%=KIM82%>", "<%=KIM83%>"], + "win_kueAlarm1": ["<%=KIA80%>", "<%=KIA81%>", "<%=KIA82%>", "<%=KIA83%>"], + "win_kueLimit1": ["<%=KIG80%>", "<%=KIG81%>", "<%=KIG82%>", "<%=KIG83%>"], + "win_kueResidence": ["<%=KRM80%>", "<%=KRM81%>", "<%=KRM82%>", "<%=KRM83%>"], + "win_kueAlarm2": ["<%=KRA80%>", "<%=KRA81%>", "<%=KRA82%>", "<%=KRA83%>"], + "win_kueLimit2Low": ["<%=KRG80%>", "<%=KRG81%>", "<%=KRG82%>", "<%=KRG83%>"], + "win_kueDelay1": ["<%=KID80%>", "<%=KID81%>", "<%=KID82%>", "<%=KID83%>"], + "win_kueLoopInterval": [ + "<%=KRI80%>", + "<%=KRI81%>", + "<%=KRI82%>", + "<%=KRI83%>" + ], + "win_kueID": ["<%=KSI80%>", "<%=KSI81%>", "<%=KSI82%>", "<%=KSI83%>"], + "win_kueName": ["<%=KSA80%>", "<%=KSA81%>", "<%=KSA82%>", "<%=KSA83%>"], + "win_tdrActive": ["<%=KTX80%>", "<%=KTX81%>", "<%=KTX82%>", "<%=KTX83%>"], + "win_tdrAtten": ["<%=KTD80%>", "<%=KTD81%>", "<%=KTD82%>", "<%=KTD83%>"], + "win_tdrSpeed": ["<%=KTS80%>", "<%=KTS81%>", "<%=KTS82%>", "<%=KTS83%>"], + "win_tdrTrigger": ["<%=KTE80%>", "<%=KTE81%>", "<%=KTE82%>", "<%=KTE83%>"], + "win_tdrPulse": ["<%=KTP80%>", "<%=KTP81%>", "<%=KTP82%>", "<%=KTP83%>"], + "win_tdrAmp": ["<%=KTA80%>", "<%=KTA81%>", "<%=KTA82%>", "<%=KTA83%>"], + "win_tdrLast": ["<%=KTL80%>", "<%=KTL81%>", "<%=KTL82%>", "<%=KTL83%>"], + "win_tdrLocation": ["<%=KTF80%>", "<%=KTF81%>", "<%=KTF82%>", "<%=KTF83%>"], + "win_memoryInterval": ["<%=KIL80%>", "<%=KIL81%>", "<%=KIL82%>", "<%=KIL83%>"] +} diff --git a/public/CPL/SERVICE/kueDataKnoten/kueData0.json b/public/CPL/SERVICE/kueDataKnoten/kueData0.json new file mode 100644 index 0000000..fab6f03 --- /dev/null +++ b/public/CPL/SERVICE/kueDataKnoten/kueData0.json @@ -0,0 +1,50 @@ +{ + "kueNodeID": [ + "<%=KN001%>", + "<%=KN101%>", + "<%=KN201%>", + "<%=KN301%>", + "<%=KN401%>", + "<%=KN501%>", + "<%=KN601%>", + "<%=KN701%>", + "<%=KN801%>", + "<%=KN901%>" + ], + "kueLinkID": [ + "<%=KP001%>", + "<%=KP101%>", + "<%=KP201%>", + "<%=KP301%>", + "<%=KP401%>", + "<%=KP501%>", + "<%=KP601%>", + "<%=KP701%>", + "<%=KP801%>", + "<%=KP901%>" + ], + "kueLinkLength": [ + "<%=KQ001%>", + "<%=KQ101%>", + "<%=KQ201%>", + "<%=KQ301%>", + "<%=KQ401%>", + "<%=KQ501%>", + "<%=KQ601%>", + "<%=KQ701%>", + "<%=KQ801%>", + "<%=KQ901%>" + ], + "kueLinkStatus": [ + "<%=KU001%>", + "<%=KU101%>", + "<%=KU201%>", + "<%=KU301%>", + "<%=KU401%>", + "<%=KU501%>", + "<%=KU601%>", + "<%=KU701%>", + "<%=KU801%>", + "<%=KU901%>" + ] +} diff --git a/public/CPL/SERVICE/opcua.json b/public/CPL/SERVICE/opcua.json new file mode 100644 index 0000000..72fce9d --- /dev/null +++ b/public/CPL/SERVICE/opcua.json @@ -0,0 +1,5 @@ +{ + "win_opcUaZustand": "<%=SOS01%>", + "win_opcUaActiveClientCount": "<%=SOC01%>", + "win_opcUaNodesetName": "<%=SON01%>" +} diff --git a/public/CPL/SERVICE/systemVoltTemp.json b/public/CPL/SERVICE/systemVoltTemp.json new file mode 100644 index 0000000..8d15e3d --- /dev/null +++ b/public/CPL/SERVICE/systemVoltTemp.json @@ -0,0 +1,3 @@ +{ + "win_systemVoltTemp": ["AAV09", "AAV11", "AAV15", "AAV16", "AAV17", "AAV18"] +} diff --git a/redux/slices.zip b/redux/slices.zip new file mode 100644 index 0000000000000000000000000000000000000000..c63406e0f1ccd89230c43d1b09b8508765ecbf13 GIT binary patch literal 28547 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 literal 0 HcmV?d00001 diff --git a/redux/slices/selectedAnalogInputSlice.ts b/redux/slices/selectedAnalogInputSlice.ts new file mode 100644 index 0000000..656cde0 --- /dev/null +++ b/redux/slices/selectedAnalogInputSlice.ts @@ -0,0 +1,35 @@ +// /redux/slices/selectedAnalogInputSlice.ts +import { createSlice, PayloadAction } from "@reduxjs/toolkit"; + +export interface SelectedAnalogInput { + id: number; + label: string; + unit?: string; + value?: number; + offset?: number; + factor?: number; + loggerInterval?: number; + weighting?: number; +} + +const initialState: SelectedAnalogInput | null = null; + +const selectedAnalogInputSlice = createSlice({ + name: "selectedAnalogInput", + initialState, + reducers: { + setSelectedAnalogInput: ( + state, + action: PayloadAction + ) => { + return action.payload; + }, + clearSelectedAnalogInput: () => { + return null; + }, + }, +}); + +export const { setSelectedAnalogInput, clearSelectedAnalogInput } = + selectedAnalogInputSlice.actions; +export default selectedAnalogInputSlice.reducer; diff --git a/redux/store.ts b/redux/store.ts index 71a67e8..fc55a8a 100644 --- a/redux/store.ts +++ b/redux/store.ts @@ -24,6 +24,7 @@ import tdrReferenceChartDataBySlotReducer from "./slices/tdrReferenceChartDataBy import loopChartTypeSlice from "./slices/loopChartTypeSlice"; import systemVoltTempReducer from "./slices/systemVoltTempSlice"; import analogInputsHistoryReducer from "./slices/analogInputsHistorySlice"; +import selectedAnalogInputReducer from "./slices/selectedAnalogInputSlice"; const store = configureStore({ reducer: { @@ -50,6 +51,7 @@ const store = configureStore({ loopChartType: loopChartTypeSlice, systemVoltTemp: systemVoltTempReducer, analogInputsHistory: analogInputsHistoryReducer, + selectedAnalogInput: selectedAnalogInputReducer, }, }); diff --git a/redux/thunks.zip b/redux/thunks.zip new file mode 100644 index 0000000000000000000000000000000000000000..125141952651f5d93499261ba6f4f796325a2f7c GIT binary patch literal 14624 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