analoge eingänge

This commit is contained in:
ISA
2025-06-19 12:27:00 +02:00
parent 887e7b4992
commit 3a829f2298
28 changed files with 285 additions and 248 deletions

View File

@@ -14,7 +14,7 @@ import Footer from "../components/footer/Footer";
// Thunks importieren
import { fetchKueDataThunk } from "../redux/thunks/fetchKueDataThunk";
import { fetchDigitalOutputsThunk } from "../redux/thunks/fetchDigitalOutputsThunk";
import { fetchAnalogeEingaengeThunk } from "../redux/thunks/fetchAnalogeEingaengeThunk";
import { fetchAnalogInputsThunk } from "../redux/thunks/fetchAnalogInputsThunk";
import { fetchAnalogInputsHistoryThunk } from "../redux/thunks/fetchAnalogInputsHistoryThunk";
import { fetchLast20MessagesThunk } from "../redux/thunks/fetchLast20MessagesThunk";
import { fetchOpcUaSettingsThunk } from "../redux/thunks/fetchOpcUaSettingsThunk";
@@ -50,8 +50,8 @@ function AppContent({ Component, pageProps }: AppProps) {
dispatch(fetchDigitalOutputsThunk());
} else if (pathname.includes("digitalInputs")) {
dispatch(fetchDigitalOutputsThunk()); // 🟠 evtl. anpassen
} else if (pathname.includes("analogeEingaenge")) {
dispatch(fetchAnalogeEingaengeThunk());
} else if (pathname.includes("analogInputs")) {
dispatch(fetchAnalogInputsThunk());
} else if (pathname.includes("analogHistory")) {
dispatch(fetchAnalogInputsHistoryThunk());
} else if (pathname.includes("dashboard")) {

View File

@@ -1,12 +1,12 @@
"use client"; ///pages/analogeEingaenge.tsx
"use client"; ///pages/analogInputs.tsx
import React, { useState, useEffect } from "react";
import AnalogeEingaengeTabelle from "../components/main/analogeEingaenge/AnalogeEingaengeTable";
import AnalogInputsChart from "../components/main/analogeEingaenge/AnalogInputsChart";
import AnalogInputsSettingsModal from "../components/main/analogeEingaenge/AnalogInputsSettingsModal";
import { fetchAnalogeEingaengeThunk } from "../redux/thunks/fetchAnalogeEingaengeThunk";
import AnalogInputsTable from "../components/main/analogInputs/AnalogInputsTable";
import AnalogInputsChart from "../components/main/analogInputs/AnalogInputsChart";
import AnalogInputsSettingsModal from "../components/main/analogInputs/AnalogInputsSettingsModal";
import { fetchAnalogInputsThunk } from "../redux/thunks/fetchAnalogInputsThunk";
import { useAppDispatch } from "../redux/store";
function AnalogeEingaenge() {
function AnalogInputs() {
const [selectedId, setSelectedId] = useState<number | null>(null);
const [selectedInput, setSelectedInput] = useState<any | null>(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() {
<h2 className="text-xl font-semibold mb-4 text-gray-700">
Messwerteingänge
</h2>
<AnalogeEingaengeTabelle
<AnalogInputsTable
setSelectedId={setSelectedId}
setSelectedInput={setSelectedInput}
setIsSettingsModalOpen={setIsSettingsModalOpen}
@@ -55,4 +55,4 @@ function AnalogeEingaenge() {
);
}
export default AnalogeEingaenge;
export default AnalogInputs;

View File

@@ -1,26 +0,0 @@
// /pages/api/cpl/analogeEingaengeAPIHandler.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs/promises";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const filePath = path.join(
process.cwd(),
"apiMockData",
"SERVICE",
"analogeEingaengeMockData.js"
);
try {
const data = await fs.readFile(filePath, "utf-8");
res.setHeader("Content-Type", "text/javascript");
res.status(200).send(data);
} catch (error) {
res.status(404).json({ error: "File not found" });
}
}

View File

@@ -0,0 +1,63 @@
// /pages/api/cpl/getAnalogInputsHandler.ts
import { NextApiRequest, NextApiResponse } from "next";
import path from "path";
import fs from "fs";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const mode = process.env.NEXT_PUBLIC_CPL_MODE;
if (mode === "json") {
const filePath = path.join(
process.cwd(),
"mocks/api/SERVICE/analogInputsMockData.json"
);
const content = fs.readFileSync(filePath, "utf-8");
const data = JSON.parse(content);
return res.status(200).json(data);
}
if (mode === "jsmock") {
const filePath = path.join(
process.cwd(),
"mocks/device-cgi-simulator/SERVICE/analogInputsMockData.js"
);
const fileContent = fs.readFileSync(filePath, "utf-8");
function extractArray(name) {
const match = fileContent.match(
new RegExp(`var\\s+${name}\\s*=\\s*\\[([\\s\\S]*?)\\];`)
);
return match
? match[1].split(",").map((s) => 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" });
}

View File

@@ -15,7 +15,7 @@ export default async function handler(
process.cwd(),
"apiMockData",
"SERVICE",
"analogeEingaengeMockData.js"
"analogInputsMockData.js"
);
try {

View File

@@ -26,7 +26,7 @@ const EinAusgaenge: React.FC = () => {
const interval = setInterval(() => {
dispatch(fetchDigitaleEingaengeThunk());
dispatch(fetchDigitalOutputsThunk());
}, 2000);
}, 500);
return () => clearInterval(interval);
}, [dispatch]);