From 3a829f229803709c1a8bd8250619130e18f3ce50 Mon Sep 17 00:00:00 2001 From: ISA Date: Thu, 19 Jun 2025 12:27:00 +0200 Subject: [PATCH] =?UTF-8?q?analoge=20eing=C3=A4nge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 4 +- .env.production | 2 +- ...ngeMockData.js => analogInputsMockData.js} | 6 +- .../AnalogInputsChart.tsx | 0 .../AnalogInputsSettingsModal.tsx | 0 .../AnalogInputsTable.tsx} | 16 +-- .../XioPM.tsx | 0 ...ockData.json => analogInputsMockData.json} | 0 mocks/api/SERVICE/digitalOutputsMockData.json | 4 +- ...ngeMockData.js => analogInputsMockData.js} | 18 +++- .../SERVICE/digitalOutputsMockData.js | 4 +- package-lock.json | 4 +- package.json | 2 +- pages/_app.tsx | 6 +- pages/analogeEingaenge.tsx | 20 ++-- pages/api/cpl/analogeEingaengeAPIHandler.ts | 26 ----- pages/api/cpl/getAnalogInputsHandler.ts | 63 +++++++++++ .../updateAnalogInputsSettingsAPIHandler.ts | 2 +- pages/digitalOutputs.tsx | 2 +- public/CPL/SERVICE/{ae.js => analogInputs.js} | 2 +- redux/slices/analogInputsSlice.ts | 97 +++++++++++++++++ redux/slices/analogeEingaengeSlice.ts | 101 ------------------ redux/store.ts | 4 +- redux/thunks/fetchAnalogInputsThunk.ts | 22 ++++ redux/thunks/fetchAnalogeEingaengeThunk.ts | 22 ---- services/fetchAnalogInputsService.ts | 47 ++++++++ services/fetchAnalogeEingaengeService.ts | 55 ---------- utils/loadWindowVariables.ts | 4 +- 28 files changed, 285 insertions(+), 248 deletions(-) rename apiMockData/SERVICE/{analogeEingaengeMockData.js => analogInputsMockData.js} (77%) rename components/main/{analogeEingaenge => analogInputs}/AnalogInputsChart.tsx (100%) rename components/main/{analogeEingaenge => analogInputs}/AnalogInputsSettingsModal.tsx (100%) rename components/main/{analogeEingaenge/AnalogeEingaengeTable.tsx => analogInputs/AnalogInputsTable.tsx} (88%) rename components/main/{analogeEingaenge => analogInputs}/XioPM.tsx (100%) rename mocks/api/SERVICE/{analogeEingaengeMockData.json => analogInputsMockData.json} (100%) rename mocks/device-cgi-simulator/SERVICE/{analogeEingaengeMockData.js => analogInputsMockData.js} (71%) delete mode 100644 pages/api/cpl/analogeEingaengeAPIHandler.ts create mode 100644 pages/api/cpl/getAnalogInputsHandler.ts rename public/CPL/SERVICE/{ae.js => analogInputs.js} (97%) create mode 100644 redux/slices/analogInputsSlice.ts delete mode 100644 redux/slices/analogeEingaengeSlice.ts create mode 100644 redux/thunks/fetchAnalogInputsThunk.ts delete mode 100644 redux/thunks/fetchAnalogeEingaengeThunk.ts create mode 100644 services/fetchAnalogInputsService.ts delete mode 100644 services/fetchAnalogeEingaengeService.ts diff --git a/.env.development b/.env.development index 9d0f224..f3eb587 100644 --- a/.env.development +++ b/.env.development @@ -6,5 +6,5 @@ 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.419 -NEXT_PUBLIC_CPL_MODE=json # json (Entwicklungsumgebung) oder jsmock (CPL ->CGI-Interface-Simulator) oder production (CPL-> CGI-Interface Platzhalter) \ No newline at end of file +NEXT_PUBLIC_APP_VERSION=1.6.420 +NEXT_PUBLIC_CPL_MODE=jsmock # json (Entwicklungsumgebung) oder jsmock (CPL ->CGI-Interface-Simulator) oder production (CPL-> CGI-Interface Platzhalter) \ No newline at end of file diff --git a/.env.production b/.env.production index d216308..06f5b26 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.419 +NEXT_PUBLIC_APP_VERSION=1.6.420 NEXT_PUBLIC_CPL_MODE=production \ No newline at end of file diff --git a/apiMockData/SERVICE/analogeEingaengeMockData.js b/apiMockData/SERVICE/analogInputsMockData.js similarity index 77% rename from apiMockData/SERVICE/analogeEingaengeMockData.js rename to apiMockData/SERVICE/analogInputsMockData.js index a9426bb..e5c3df3 100644 --- a/apiMockData/SERVICE/analogeEingaengeMockData.js +++ b/apiMockData/SERVICE/analogInputsMockData.js @@ -1,10 +1,10 @@ -// /apiMockData/SERVICE/analogeEingaengeMockData.js +// /apiMockData/SERVICE/analogInputsMockData.js var win_analogInputsValues = [4.771072, 5.665244, 0.005467, -0.007468, 0.000002, 0.000001, 0.000001, 0.000007]; -var win_analogInputsNames = ["AE1", "AE 2", "AE 3", "AE 4", "AE 5", "AE 6", "AE 7", "AE 8"]; +var win_analogInputsNames = ["Test", "AE 2", "AE 3", "AE 4", "AE 5", "AE 6", "AE 7", "AE 8"]; var win_analogInputsOffset = [11.001, 0.0, 0.0, 0, 0.0, 0.0, 0.0, 0.0]; var win_analogInputsFactor = [12.001, 1.0, 1.0, 1, 1.0, 1.0, 1.0, 1.0]; -var win_analogInputsloggerIntervall = [5, 10, 10, 10, 10, 10, 10, 10]; +var win_analogInputsloggerIntervall = [10, 10, 10, 10, 10, 10, 10, 10]; var win_analogInputsUnits = ["V", "V", "V", "V", "mA", "mA", "mA", "mA"]; var win_analogInputsWeighting = [0, 0, 0, 0, 0, 0, 0, 0]; diff --git a/components/main/analogeEingaenge/AnalogInputsChart.tsx b/components/main/analogInputs/AnalogInputsChart.tsx similarity index 100% rename from components/main/analogeEingaenge/AnalogInputsChart.tsx rename to components/main/analogInputs/AnalogInputsChart.tsx diff --git a/components/main/analogeEingaenge/AnalogInputsSettingsModal.tsx b/components/main/analogInputs/AnalogInputsSettingsModal.tsx similarity index 100% rename from components/main/analogeEingaenge/AnalogInputsSettingsModal.tsx rename to components/main/analogInputs/AnalogInputsSettingsModal.tsx diff --git a/components/main/analogeEingaenge/AnalogeEingaengeTable.tsx b/components/main/analogInputs/AnalogInputsTable.tsx similarity index 88% rename from components/main/analogeEingaenge/AnalogeEingaengeTable.tsx rename to components/main/analogInputs/AnalogInputsTable.tsx index c981d36..d173604 100644 --- a/components/main/analogeEingaenge/AnalogeEingaengeTable.tsx +++ b/components/main/analogInputs/AnalogInputsTable.tsx @@ -1,13 +1,13 @@ -"use client"; // /components/main/analogeEingaenge/AnalogeEingaengeTable.tsx +"use client"; // /components/main/analogInputs/AnalogInputsTable.tsx import React, { useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { RootState, AppDispatch } from "../../../redux/store"; -import { fetchAnalogeEingaengeThunk } from "../../../redux/thunks/fetchAnalogeEingaengeThunk"; +import { RootState, AppDispatch } from "@/redux/store"; +import { fetchAnalogInputsThunk } from "@/redux/thunks/fetchAnalogInputsThunk"; import { Icon } from "@iconify/react"; import settingsIcon from "@iconify/icons-mdi/settings"; import waveformIcon from "@iconify/icons-mdi/waveform"; -export default function AnalogeEingaengeTable({ +export default function AnalogInputsTable({ setSelectedId, setSelectedInput, setIsSettingsModalOpen, @@ -20,11 +20,11 @@ export default function AnalogeEingaengeTable({ const [activeId, setActiveId] = React.useState(null); useEffect(() => { - dispatch(fetchAnalogeEingaengeThunk()); + dispatch(fetchAnalogInputsThunk()); }, [dispatch]); - const analogeEingaenge = useSelector( - (state: RootState) => state.analogeEingaengeSlice + const analogInputs = useSelector( + (state: RootState) => state.analogeInputsSlice ); const handleSelect = (id: number) => { @@ -53,7 +53,7 @@ export default function AnalogeEingaengeTable({ - {Object.values(analogeEingaenge) + {Object.values(analogInputs) .filter((e) => e?.id !== null && e?.id !== undefined) .map((e, index) => ( (null); const [selectedInput, setSelectedInput] = useState(null); const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false); @@ -14,9 +14,9 @@ function AnalogeEingaenge() { useEffect(() => { if (typeof window !== "undefined") { - dispatch(fetchAnalogeEingaengeThunk()); + dispatch(fetchAnalogInputsThunk()); const interval = setInterval(() => { - dispatch(fetchAnalogeEingaengeThunk()); + dispatch(fetchAnalogInputsThunk()); }, 10000); return () => clearInterval(interval); } @@ -30,7 +30,7 @@ function AnalogeEingaenge() {

Messwerteingänge

- s.trim().replace(/^["']|["']$/g, "")) + : []; + } + + const result = { + win_analogInputsValues: extractArray("win_analogInputsValues").map( + Number + ), + win_analogInputsNames: extractArray("win_analogInputsNames"), + win_analogInputsOffset: extractArray("win_analogInputsOffset").map( + Number + ), + win_analogInputsFactor: extractArray("win_analogInputsFactor").map( + Number + ), + win_analogInputsloggerIntervall: extractArray( + "win_analogInputsloggerIntervall" + ).map(Number), + win_analogInputsUnits: extractArray("win_analogInputsUnits"), + win_analogInputsWeighting: extractArray("win_analogInputsWeighting").map( + Number + ), + }; + + return res.status(200).json(result); + } + + return res.status(400).json({ error: "Unsupported mode" }); +} diff --git a/pages/api/cpl/updateAnalogInputsSettingsAPIHandler.ts b/pages/api/cpl/updateAnalogInputsSettingsAPIHandler.ts index 20c64ec..d843264 100644 --- a/pages/api/cpl/updateAnalogInputsSettingsAPIHandler.ts +++ b/pages/api/cpl/updateAnalogInputsSettingsAPIHandler.ts @@ -15,7 +15,7 @@ export default async function handler( process.cwd(), "apiMockData", "SERVICE", - "analogeEingaengeMockData.js" + "analogInputsMockData.js" ); try { diff --git a/pages/digitalOutputs.tsx b/pages/digitalOutputs.tsx index 311c2f8..7f3c759 100644 --- a/pages/digitalOutputs.tsx +++ b/pages/digitalOutputs.tsx @@ -26,7 +26,7 @@ const EinAusgaenge: React.FC = () => { const interval = setInterval(() => { dispatch(fetchDigitaleEingaengeThunk()); dispatch(fetchDigitalOutputsThunk()); - }, 2000); + }, 500); return () => clearInterval(interval); }, [dispatch]); diff --git a/public/CPL/SERVICE/ae.js b/public/CPL/SERVICE/analogInputs.js similarity index 97% rename from public/CPL/SERVICE/ae.js rename to public/CPL/SERVICE/analogInputs.js index 55ff1e4..498e168 100644 --- a/public/CPL/SERVICE/ae.js +++ b/public/CPL/SERVICE/analogInputs.js @@ -1,4 +1,4 @@ -// /public/CPL/SERVICE/ae.js +// /public/CPL/SERVICE/analogInputs.js //CGI-Variablen var win_analogInputsValues = [<%=AAV01%>,<%=AAV02%>,<%=AAV03%>,<%=AAV04%>,<%=AAV05%>,<%=AAV06%>,<%=AAV07%>,<%=AAV08%>]; var win_analogInputsNames=[<%=ACN01%>,<%=ACN02%>,<%=ACN03%>,<%=ACN04%>,<%=ACN05%>,<%=ACN06%>,<%=ACN07%>,<%=ACN08%>]; diff --git a/redux/slices/analogInputsSlice.ts b/redux/slices/analogInputsSlice.ts new file mode 100644 index 0000000..7aa4da9 --- /dev/null +++ b/redux/slices/analogInputsSlice.ts @@ -0,0 +1,97 @@ +// Redux Slice: redux/slices/analogInputsSlice.ts +import { createSlice, PayloadAction, createAsyncThunk } from "@reduxjs/toolkit"; + +export interface AnalogInput { + id: number | null; + value: number | null; + name: string; + uW: boolean; + uG: boolean; + oW: boolean; + oG: boolean; +} + +export interface AnalogInputsState { + [key: string]: AnalogInput; +} + +// Standardwerte für Eingänge +const defaultAnalogInput: AnalogInput = { + id: null, + value: null, + name: "", + uW: false, + uG: false, + oW: false, + oG: false, +}; + +// Initialer Zustand +const initialState: AnalogInputsState = { + win_analogInputs1: { ...defaultAnalogInput }, + win_analogInputs2: { ...defaultAnalogInput }, + win_analogInputs3: { ...defaultAnalogInput }, + win_analogInputs4: { ...defaultAnalogInput }, + win_analogInputs5: { ...defaultAnalogInput }, + win_analogInputs6: { ...defaultAnalogInput }, + win_analogInputs7: { ...defaultAnalogInput }, + win_analogInputs8: { ...defaultAnalogInput }, +}; + +// Dynamisch Mock-Daten aus `window` abrufen +export const loadFromWindow = createAsyncThunk( + "analogInputs/loadFromWindow", + async (_, { dispatch }) => { + const data: Partial = {}; + + for (let i = 1; i <= 8; i++) { + const key = `win_analogInputs${i}`; + const value = (window as any)[key]; + + if (Array.isArray(value) && value.length === 7) { + data[key] = { + id: value[0], + value: value[1], + name: value[2], + uW: value[3] === 1, + uG: value[4] === 1, + oW: value[5] === 1, + oG: value[6] === 1, + }; + } + } + + dispatch(setAnalogInputs(data)); // ✅ Redux direkt aktualisieren + return data; + } +); + +// Redux Slice +const analogInputsSlice = createSlice({ + name: "analogInputsSlice", + initialState, + reducers: { + setAnalogInput( + state, + action: PayloadAction<{ key: string; value: AnalogInput }> + ) { + state[action.payload.key] = action.payload.value; + }, + setAnalogInputs(state, action: PayloadAction>) { + Object.entries(action.payload).forEach(([key, value]) => { + if (value) { + state[key] = value; + } + }); + }, + }, + extraReducers: (builder) => { + builder.addCase(loadFromWindow.fulfilled, (state, action) => { + Object.assign(state, action.payload); + }); + }, +}); + +export const { setAnalogInput, setAnalogInputs } = analogInputsSlice.actions; + +export default analogInputsSlice.reducer; diff --git a/redux/slices/analogeEingaengeSlice.ts b/redux/slices/analogeEingaengeSlice.ts deleted file mode 100644 index 387372b..0000000 --- a/redux/slices/analogeEingaengeSlice.ts +++ /dev/null @@ -1,101 +0,0 @@ -// Redux Slice: redux/slices/analogeEingaengeSlice.ts -import { createSlice, PayloadAction, createAsyncThunk } from "@reduxjs/toolkit"; - -export interface AnalogerEingang { - id: number | null; - value: number | null; - name: string; - uW: boolean; - uG: boolean; - oW: boolean; - oG: boolean; -} - -export interface AnalogeEingaengeState { - [key: string]: AnalogerEingang; -} - -// Standardwerte für Eingänge -const defaultAnalogerEingang: AnalogerEingang = { - id: null, - value: null, - name: "", - uW: false, - uG: false, - oW: false, - oG: false, -}; - -// Initialer Zustand -const initialState: AnalogeEingaengeState = { - win_analogeEingaenge1: { ...defaultAnalogerEingang }, - win_analogeEingaenge2: { ...defaultAnalogerEingang }, - win_analogeEingaenge3: { ...defaultAnalogerEingang }, - win_analogeEingaenge4: { ...defaultAnalogerEingang }, - win_analogeEingaenge5: { ...defaultAnalogerEingang }, - win_analogeEingaenge6: { ...defaultAnalogerEingang }, - win_analogeEingaenge7: { ...defaultAnalogerEingang }, - win_analogeEingaenge8: { ...defaultAnalogerEingang }, -}; - -// Dynamisch Mock-Daten aus `window` abrufen -export const loadFromWindow = createAsyncThunk( - "analogeEingaenge/loadFromWindow", - async (_, { dispatch }) => { - const data: Partial = {}; - - for (let i = 1; i <= 8; i++) { - const key = `win_analogeEingaenge${i}`; - const value = (window as any)[key]; - - if (Array.isArray(value) && value.length === 7) { - data[key] = { - id: value[0], - value: value[1], - name: value[2], - uW: value[3] === 1, - uG: value[4] === 1, - oW: value[5] === 1, - oG: value[6] === 1, - }; - } - } - - dispatch(setAnalogeEingaenge(data)); // ✅ Redux direkt aktualisieren - return data; - } -); - -// Redux Slice -const analogeEingaengeSlice = createSlice({ - name: "analogeEingaengeSlice", - initialState, - reducers: { - setAnalogerEingang( - state, - action: PayloadAction<{ key: string; value: AnalogerEingang }> - ) { - state[action.payload.key] = action.payload.value; - }, - setAnalogeEingaenge( - state, - action: PayloadAction> - ) { - Object.entries(action.payload).forEach(([key, value]) => { - if (value) { - state[key] = value; - } - }); - }, - }, - extraReducers: (builder) => { - builder.addCase(loadFromWindow.fulfilled, (state, action) => { - Object.assign(state, action.payload); - }); - }, -}); - -export const { setAnalogerEingang, setAnalogeEingaenge } = - analogeEingaengeSlice.actions; - -export default analogeEingaengeSlice.reducer; diff --git a/redux/store.ts b/redux/store.ts index 83fb31c..773bbc5 100644 --- a/redux/store.ts +++ b/redux/store.ts @@ -11,7 +11,7 @@ import opcuaSettingsReducer from "./slices/opcuaSettingsSlice"; import digitalOutputsReducer from "./slices/digitalOutputsSlice"; import brushReducer from "./slices/brushSlice"; import tdrChartReducer from "./slices/tdrChartSlice"; -import analogeEingaengeReducer from "./slices/analogeEingaengeSlice"; +import analogInputsReducer from "./slices/analogInputsSlice"; import digitalInputsReducer from "./slices/digitalInputsSlice"; import tdrReferenceChartReducer from "./slices/tdrReferenceChartSlice"; import loopChartReducer from "./slices/loopChartSlice"; @@ -36,7 +36,7 @@ const store = configureStore({ systemSettingsSlice: systemSettingsReducer, opcuaSettingsSlice: opcuaSettingsReducer, digitalOutputsSlice: digitalOutputsReducer, - analogeEingaengeSlice: analogeEingaengeReducer, + analogeInputsSlice: analogInputsReducer, brushSlice: brushReducer, tdrChartSlice: tdrChartReducer, tdrReferenceChartSlice: tdrReferenceChartReducer, diff --git a/redux/thunks/fetchAnalogInputsThunk.ts b/redux/thunks/fetchAnalogInputsThunk.ts new file mode 100644 index 0000000..def1d6f --- /dev/null +++ b/redux/thunks/fetchAnalogInputsThunk.ts @@ -0,0 +1,22 @@ +// /redux/thunks/fetchAnalogInputsThunk.ts +import { createAsyncThunk } from "@reduxjs/toolkit"; +import { fetchAnalogInputsService } from "@/services/fetchAnalogInputsService"; +import { setAnalogInputs } from "@/redux/slices/analogInputsSlice"; + +/** + * Holt die analogen Eingänge von der API und speichert sie in Redux. + */ +export const fetchAnalogInputsThunk = createAsyncThunk( + "analogeInputs/fetchAnalogInputs", + async (_, { dispatch }) => { + if (typeof window === "undefined") return; // Server-Side Execution blockieren + try { + const data = await fetchAnalogInputsService(); + if (data) { + dispatch(setAnalogInputs(data)); // ✅ Redux mit API-Daten füllen + } + } catch (error) { + console.error("❌ Fehler beim Laden der analogen Eingänge:", error); + } + } +); diff --git a/redux/thunks/fetchAnalogeEingaengeThunk.ts b/redux/thunks/fetchAnalogeEingaengeThunk.ts deleted file mode 100644 index e6e20af..0000000 --- a/redux/thunks/fetchAnalogeEingaengeThunk.ts +++ /dev/null @@ -1,22 +0,0 @@ -// /redux/thunks/fetchAnalogeEingaengeThunk.ts -import { createAsyncThunk } from "@reduxjs/toolkit"; -import { fetchAnalogeEingaengeService } from "../../services/fetchAnalogeEingaengeService"; -import { setAnalogeEingaenge } from "../slices/analogeEingaengeSlice"; - -/** - * Holt die analogen Eingänge von der API und speichert sie in Redux. - */ -export const fetchAnalogeEingaengeThunk = createAsyncThunk( - "analogeEingaenge/fetchAnalogeEingaenge", - async (_, { dispatch }) => { - if (typeof window === "undefined") return; // Server-Side Execution blockieren - try { - const data = await fetchAnalogeEingaengeService(); - if (data) { - dispatch(setAnalogeEingaenge(data)); // ✅ Redux mit API-Daten füllen - } - } catch (error) { - console.error("❌ Fehler beim Laden der analogen Eingänge:", error); - } - } -); diff --git a/services/fetchAnalogInputsService.ts b/services/fetchAnalogInputsService.ts new file mode 100644 index 0000000..b75b280 --- /dev/null +++ b/services/fetchAnalogInputsService.ts @@ -0,0 +1,47 @@ +// services/fetchAnalogInputsService.ts + +export const fetchAnalogInputsService = async () => { + const mode = process.env.NEXT_PUBLIC_CPL_MODE; + + if (mode === "production") { + const scriptUrl = "/CPL?/CPL/SERVICE/analogInputs.js"; + + await new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = scriptUrl; + script.async = true; + script.onload = () => resolve(); + script.onerror = () => reject("❌ Fehler beim Laden der analogInputs.js"); + document.body.appendChild(script); + }); + + const win = window as any; + + return Array.from({ length: 8 }, (_, i) => ({ + id: i + 1, + value: parseFloat(win.win_analogInputsValues[i]), + label: win.win_analogInputsNames[i], + unit: win.win_analogInputsUnits[i], + offset: parseFloat(win.win_analogInputsOffset[i]), + factor: parseFloat(win.win_analogInputsFactor[i]), + interval: parseInt(win.win_analogInputsloggerIntervall[i]), + weighting: parseInt(win.win_analogInputsWeighting[i]), + })); + } else { + const res = await fetch("/api/cpl/getAnalogInputsHandler"); + if (!res.ok) throw new Error("❌ Fehler beim Laden der analogen Eingänge"); + + const data = await res.json(); + + return data.win_analogInputsValues.map((value: number, i: number) => ({ + id: i + 1, + value, + label: data.win_analogInputsNames[i], + unit: data.win_analogInputsUnits[i], + offset: parseFloat(data.win_analogInputsOffset[i]), + factor: parseFloat(data.win_analogInputsFactor[i]), + interval: parseInt(data.win_analogInputsloggerIntervall[i]), + weighting: parseInt(data.win_analogInputsWeighting[i]), + })); + } +}; diff --git a/services/fetchAnalogeEingaengeService.ts b/services/fetchAnalogeEingaengeService.ts deleted file mode 100644 index 7195250..0000000 --- a/services/fetchAnalogeEingaengeService.ts +++ /dev/null @@ -1,55 +0,0 @@ -// services/fetchAnalogeEingaengeService.ts - -export const fetchAnalogeEingaengeService = async (): Promise | null> => { - try { - if (typeof window === "undefined") return null; - - const isDevelopment = process.env.NEXT_PUBLIC_NODE_ENV === "development"; - - const scriptSrc = isDevelopment - ? "/api/cpl/analogeEingaengeAPIHandler" - : "/CPL?/CPL/SERVICE/ae.js"; - - await new Promise((resolve, reject) => { - const script = document.createElement("script"); - script.src = scriptSrc; - script.async = true; - script.onload = () => resolve(); - script.onerror = () => reject(`❌ Error loading ${scriptSrc}`); - document.body.appendChild(script); - }); - - // Now read the real variables - const values = (window as any).win_analogInputsValues || []; - const names = (window as any).win_analogInputsNames || []; - const units = (window as any).win_analogInputsUnits || []; - const factor = (window as any).win_analogInputsFactor || []; - const offset = (window as any).win_analogInputsOffset || []; - const weighting = (window as any).win_analogInputsWeighting || []; - const loggerInterval = - (window as any).win_analogInputsloggerIntervall || []; - - const result: Record = {}; - - for (let i = 0; i < values.length; i++) { - result[`analogInput${i + 1}`] = { - id: i + 1, - value: values[i], - name: names[i], - unit: units[i], - factor: factor[i], - offset: offset[i], - weighting: weighting[i], - loggerInterval: loggerInterval[i], - }; - } - - return result; - } catch (error) { - console.error("❌ Error loading analog inputs:", error); - return null; - } -}; diff --git a/utils/loadWindowVariables.ts b/utils/loadWindowVariables.ts index a6ffb58..1193727 100644 --- a/utils/loadWindowVariables.ts +++ b/utils/loadWindowVariables.ts @@ -21,8 +21,8 @@ export async function loadWindowVariables(): Promise<{ scripts.push(isDev ? "digitaleEingaengeAPIHandler" : "de.js"); } else if (pathname.includes("digitalOutputs")) { scripts.push(isDev ? "digitalOutputsAPIHandler" : "da.js"); - } else if (pathname.includes("analogeEingaenge")) { - scripts.push(isDev ? "analogeEingaengeAPIHandler" : "ae.js"); + } else if (pathname.includes("analogInputs")) { + scripts.push(isDev ? "getAnalogInputsHandler" : "analogInputs.js"); } else if (pathname.includes("dashboard")) { scripts.push( isDev ? "last20MessagesAPIHandler" : "start.js",