"use client"; // app/dashboard/page.jsx import React, { useEffect } from "react"; import { useRouter } from "next/navigation"; import "tailwindcss/tailwind.css"; import "@fontsource/roboto"; import "bootstrap-icons/font/bootstrap-icons.css"; import CPLStatus from "../components/modulesStatus/CPLStatus"; import KabelModulStatus from "../components/modulesStatus/KabelModulStatus"; import { Icon } from "@iconify/react"; import { useSelector } from "react-redux"; import { RootState } from "../redux/store"; import { useDispatch } from "react-redux"; import { setOpcUaZustand, setOpcUaActiveClientCount, setOpcUaNodesetName, } from "../redux/slices/variablesSlice"; function Dashboard() { const router = useRouter(); const dispatch = useDispatch(); useEffect(() => { if (typeof window !== "undefined") { dispatch(setOpcUaZustand(window.win_opcUaZustand || "Unbekannt")); dispatch( setOpcUaActiveClientCount( Number(window.win_opcUaActiveClientCount) || 0 ) ); dispatch(setOpcUaNodesetName(window.win_opcUaNodesetName || "Unbekannt")); } }, []); // Redux-Variablen abrufen const opcUaZustand = useSelector( (state: RootState) => state.variables.opcUaZustand ); const opcUaActiveClientCount = useSelector( (state: RootState) => state.variables.opcUaActiveClientCount ); const opcUaNodesetName = useSelector( (state: RootState) => state.variables.opcUaNodesetName ); const rawLast20Messages = useSelector( (state: RootState) => state.variables.last20Messages ); const ip = useSelector((state: RootState) => state.variables.ip); const subnet = useSelector((state: RootState) => state.variables.subnet); const gateway = useSelector((state: RootState) => state.variables.gateway); const appVersion = useSelector( (state: RootState) => state.variables.appVersion ); const kueCableBreak = useSelector( (state: RootState) => state.variables.kueCableBreak ); const kueOnline = useSelector( (state: RootState) => state.variables.kueOnline ); const kueVersion = useSelector( (state: RootState) => state.variables.kueVersion ); const kueAlarm1 = useSelector( (state: RootState) => state.variables.kueAlarm1 ); const kueAlarm2 = useSelector( (state: RootState) => state.variables.kueAlarm2 ); const kueGroundFault = useSelector( (state: RootState) => state.variables.kueGroundFault ); // Hilfsfunktion zum Parsen der Nachrichten const parseMessages = (messages) => { if (typeof messages === "string") { messages = messages .replace(//g, "\n") .replace(/<\/?td>/g, "") .replace(/<\/tr>/g, "") .trim(); const rows = messages.split("\n"); return rows.map((row) => [ row.substring(0, 5), row.substring(5, 10), row.substring(10, 29), row.substring(33, row.length - 1), row.substring(row.length - 1), ]); } return []; }; const last20Messages = parseMessages(rawLast20Messages); const handleModuleClick = (rackNumber) => { router.push(`/kabelueberwachung?rack=${rackNumber}`); }; const renderBaugruppentraeger = () => { const baugruppen: JSX.Element[] = []; const numBaugruppen = Math.ceil(kueOnline.length / 8); for (let i = 0; i < numBaugruppen; i++) { const slots = kueOnline.slice(i * 8, (i + 1) * 8); baugruppen.push(
{slots.map((version, index) => { const slotNumber = i * 8 + index + 1; const isSlotOnline = kueOnline[slotNumber - 1] === 1; const moduleVersion = kueVersion[slotNumber - 1] || version; // Berechnung der Rack-Nummer basierend auf dem slotNumber const rackNumber = Math.ceil(slotNumber / 8); // 1–8 -> Rack 1, 9–16 -> Rack 2 usw. return (
handleModuleClick(rackNumber)} // Klick-Handler mit Rack-Nummer >
); })}
); } return baugruppen; }; return (

Letzten 20 Meldungen

{last20Messages.length > 0 ? ( last20Messages.map((columns, index) => ( )) ) : ( )}
ID Modul Zeitstempel Meldung Status
{columns[0]} {columns[1]}
{columns[2].split(" ")[0]} {columns[2].split(" ")[1]}
{columns[3]} {columns[4]}
Keine Meldungen verfügbar.

Versionsinformationen

Applikationsversion:{" "} {appVersion}

Webserverversion: 1.0.6.2

{renderBaugruppentraeger()}
IP Address

IP-Adresse

{ip}

subnet mask

Subnet-Maske

{subnet}

gateway

Gateway

{gateway}

OPC UA Status

OPCUA Status

{opcUaZustand}

OPC UA Clients

Verbundene Clients

{opcUaActiveClientCount}

Nodeset Name

Nodeset Name

{opcUaNodesetName}

); } export default Dashboard;