diff --git a/components/Navigation.tsx b/components/Navigation.tsx index d957403..ded9ecb 100644 --- a/components/Navigation.tsx +++ b/components/Navigation.tsx @@ -27,7 +27,7 @@ const Navigation: React.FC = ({ className }) => { { name: "Ein- und Ausgänge", path: "/einausgaenge" }, { name: "Analoge Eingänge", path: "/analogeEingaenge" }, { name: "Meldungen", path: "/messages" }, - { name: "Einstellung", path: "/settings" }, + { name: "Einstellungen", path: "/settings" }, // Weitere Menüpunkte hier ]; diff --git a/components/modules/Kue705FO.tsx b/components/modules/Kue705FO.tsx index aa0e475..ff579ec 100644 --- a/components/modules/Kue705FO.tsx +++ b/components/modules/Kue705FO.tsx @@ -13,6 +13,7 @@ import { setSelectedFileName, } from "../../redux/slices/variablesSlice"; import TDRPopup from "../modales/kueModal/TDRPopup"; +import { createLoopChart, createTDRChart } from "../../utils/chartUtils"; const Kue705FO: React.FC = ({ isolationswert, @@ -192,97 +193,6 @@ const Kue705FO: React.FC = ({ const chartInstance = useRef(null); - const createTDRChart = (dataTDR: DataTDR[]) => { - const canvas = document.getElementById("myChart") as HTMLCanvasElement; - - if (!canvas) { - console.error("Canvas mit ID 'myChart' nicht gefunden."); - return; - } - - const ctx = canvas.getContext("2d"); - if (!ctx) { - console.error("2D-Kontext für Canvas konnte nicht erstellt werden."); - return; - } - - // Vorhandenes Chart zerstören, falls vorhanden - if (chartInstance.current) { - console.log("Vorhandenes Chart wird zerstört."); - chartInstance.current.destroy(); - chartInstance.current = null; // Referenz zurücksetzen - } - - // Maximal- und Minimalwerte berechnen - const minX = Math.min(...dataTDR.map((row) => row.t)); - const maxX = Math.max(...dataTDR.map((row) => row.t)); - const minY = Math.min(...dataTDR.map((row) => row.m)); - const maxY = Math.max(...dataTDR.map((row) => row.m)); - - // Neues Chart erstellen - try { - chartInstance.current = new Chart(ctx, { - type: "line", - data: { - labels: dataTDR.map((row) => row.t), - datasets: [ - { - label: "Pegel", - data: dataTDR.map((row) => row.m), - borderColor: "#00AEEF", - borderWidth: 2, - fill: false, - tension: 0.1, // Weiche Kurve - }, - ], - }, - options: { - responsive: true, - maintainAspectRatio: false, // Ermöglicht flexible Größe - layout: { - padding: { - bottom: 25, // Fügt zusätzliches Padding unten hinzu - }, - }, - plugins: { - zoom: { - pan: { - enabled: true, - mode: "xy", - }, - zoom: { - wheel: { - enabled: true, - }, - pinch: { - enabled: true, - }, - mode: "xy", - }, - }, - }, - scales: { - x: { - type: "linear", - position: "bottom", - title: { display: true, text: "Entfernung" }, - min: minX - 5, // Etwas Puffer hinzufügen - max: maxX + 5, - }, - y: { - title: { display: true, text: "Pegel" }, - min: minY - 10, // Puffer für Y-Werte - max: maxY + 10, - }, - }, - }, - }); - console.log("Neues Chart erfolgreich erstellt."); - } catch (error) { - console.error("Fehler beim Erstellen des Charts:", error); - } - }; - const selectedFileName = useSelector( (state: RootState) => state.variables.selectedFileName ); @@ -347,96 +257,6 @@ const Kue705FO: React.FC = ({ n: number; // Schleifenwiderstand } - const createLoopChart = (data: DataLoop[], title: string) => { - const canvas = document.getElementById("myChart") as HTMLCanvasElement; - if (!canvas) { - console.error("Canvas mit ID 'myChart' nicht gefunden."); - return; - } - - const ctx = canvas.getContext("2d"); - if (!ctx) { - console.error("2D-Kontext für Canvas konnte nicht erstellt werden."); - return; - } - - // Konvertiere Zeitstempel in ein lesbares Format für die X-Achse - const labels = data.map((row) => { - const date = new Date(String(row.t).replace(/-/g, "/")); // Zeitstring parsen - return date.toLocaleString("de-DE", { - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - }); - }); - - new Chart(ctx, { - type: "line", - data: { - labels, - datasets: [ - { - label: "Isolationswiderstand (MOhm)", - data: data.map((row) => row.m), - borderColor: "#00AEEF", - borderWidth: 1, - tension: 0.1, // Glättung der Linie - pointRadius: 1, - pointHoverRadius: 5, - fill: false, - yAxisID: "y", - }, - { - label: "Schleifenwiderstand (kOhm)", - data: data.map((row) => row.n), - borderColor: "black", - borderWidth: 1, - tension: 0.1, - pointRadius: 1, - pointHoverRadius: 5, - fill: false, - yAxisID: "y1", - }, - ], - }, - options: { - scales: { - x: { - type: "category", - title: { display: true, text: "Zeit" }, - }, - y: { - type: "linear", - position: "left", - title: { display: true, text: "MOhm" }, - }, - y1: { - type: "linear", - position: "right", - title: { display: true, text: "kOhm" }, - }, - }, - plugins: { - zoom: { - pan: { - enabled: true, - mode: "xy", - }, - zoom: { - wheel: { - enabled: true, - }, - pinch: { - enabled: true, - }, - mode: "xy", - }, - }, - }, - }, - }); - }; - useEffect(() => { const updateAlarmStatus = () => { const alarmStatus = diff --git a/components/settingsPageComponents/OPCUAInterfaceSettings.tsx b/components/settingsPageComponents/OPCUAInterfaceSettings.tsx index 864db1c..3197071 100644 --- a/components/settingsPageComponents/OPCUAInterfaceSettings.tsx +++ b/components/settingsPageComponents/OPCUAInterfaceSettings.tsx @@ -1,5 +1,113 @@ -import React from "react"; +import React, { useState } from "react"; export default function OPCUAInterfaceSettings() { - return
OPCUAInterfaceSettings
; + const [isEnabled, setIsEnabled] = useState(true); + const [encryption, setEncryption] = useState("None"); + const [users, setUsers] = useState([ + { id: 1, username: "admin", password: "admin123" }, + { id: 2, username: "user1", password: "user123" }, + ]); + const [newUser, setNewUser] = useState({ username: "", password: "" }); + + const toggleServer = () => setIsEnabled(!isEnabled); + const updateEncryption = (event) => setEncryption(event.target.value); + const addUser = () => { + if (newUser.username && newUser.password) { + setUsers([...users, { id: users.length + 1, ...newUser }]); + setNewUser({ username: "", password: "" }); + } + }; + const removeUser = (id) => setUsers(users.filter((user) => user.id !== id)); + + return ( +
+

OPCUA Server Einstellungen

+ + {/* Server Aktivierung */} +
+ +
+ + {/* Verschlüsselung */} +
+ + +
+ + {/* Benutzer & Passwörter */} +
+

Benutzer

+
    + {users.map((user) => ( +
  • + {user.username} + + (Passwort: {user.password}) + + +
  • + ))} +
+
+ + setNewUser({ ...newUser, username: e.target.value }) + } + className="p-2 border rounded mr-2" + /> + + setNewUser({ ...newUser, password: e.target.value }) + } + className="p-2 border rounded mr-2" + /> + +
+
+
+ ); } diff --git a/pages/settings.tsx b/pages/settings.tsx index 7626be4..e7f8362 100644 --- a/pages/settings.tsx +++ b/pages/settings.tsx @@ -17,7 +17,7 @@ export default function Settings() { }`} onClick={() => setActiveTab("tab1")} > - Allgemeine Einstellung + Allgemeine Einstellungen