last20Messages.acp als Script einbinden in dashboard/page.jsx und daten in der tabelle bekommen

This commit is contained in:
ISA
2024-09-25 11:29:34 +02:00
parent d9f12bb07d
commit 0bdfa9dd8d

View File

@@ -5,65 +5,66 @@ import "@fontsource/roboto";
import "bootstrap-icons/font/bootstrap-icons.css";
function Dashboard() {
const [deviceData, setDeviceData] = useState(null);
const [digitalInputs, setDigitalInputs] = useState(null);
const [cableMonitoring, setCableMonitoring] = useState(null);
const [cableDetails, setCableDetails] = useState(null);
const [startData, setStartData] = useState(null);
const [last20Messages, setLast20Messages] = useState(null); // State für die Meldungen
const [last20Messages, setLast20Messages] = useState([]); // State für die Meldungen als Array
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
// Funktion zum Laden der last20Messages von der Start.acp-Seite
const fetchStartACP = async () => {
try {
const response = await fetch("https://10.10.0.118/CPL?Start.acp", {
method: "GET",
mode: "cors",
credentials: "include", // Falls Authentifizierung erforderlich ist
});
if (!response.ok) {
throw new Error(
`Fehler beim Laden von Start.acp: ${response.status}`
// Funktion zum Laden und Einbinden der last20Messages.acp
const loadScript = (src) => {
return new Promise((resolve, reject) => {
const script = document.createElement("script");
script.src = src;
script.async = true;
script.onload = () => {
// Prüfe, ob last20Messages im globalen Fensterobjekt existiert
if (window.last20Messages) {
const parsedMessages = parseMessages(window.last20Messages);
setLast20Messages(parsedMessages);
console.log(
"Meldungen direkt aus dem Skript geladen:",
parsedMessages
);
}
const text = await response.text();
// Extrahiere die last20Messages aus dem HTML-Text von Start.acp
const match = text.match(/var last20Messages = `(.*?)`;/s);
if (match && match[1]) {
const messages = match[1];
// Speichere die Nachrichten in localStorage
localStorage.setItem("last20Messages", messages);
setLast20Messages(messages);
// Speichere die Nachrichten im window-Objekt
window.last20Messages = messages; // Hinzufügen zu window
} else {
console.error("Konnte last20Messages nicht finden.");
}
resolve();
};
script.onerror = reject;
document.head.appendChild(script);
});
};
// Lade das Skript und aktualisiere den State
const fetchLast20Messages = async () => {
try {
await loadScript("/CPL?last20Messages.acp");
} catch (error) {
console.error("Fehler beim Abrufen der Start.acp-Datei:", error);
console.error(
"Fehler beim Laden des Skripts last20Messages.acp:",
error
);
}
};
// Lade last20Messages, wenn sie nicht im localStorage sind
const messages = localStorage.getItem("last20Messages");
if (messages) {
setLast20Messages(messages);
fetchLast20Messages();
// Speichere die Nachrichten im window-Objekt
window.last20Messages = messages; // Hinzufügen zu window
} else {
fetchStartACP();
}
// Andere Daten laden (falls benötigt)
// Hier kannst du deine ACP-Dateien laden, wie in deinem bestehenden Code gezeigt
// Funktion zum Parsen der Nachrichten
const parseMessages = (messages) => {
// Nachrichten in Zeilen aufteilen
const rows = messages.split("\n");
return rows.map((row) => {
// Passe die Längen hier basierend auf der Struktur in deinem Bild an
const columns = [
row.substring(0, 5), // ID
row.substring(5, 10), // Wert (z.B. Modulnummer)
row.substring(10, 34), // Zeitstempel
row.substring(34, 60), // Meldung
row.substring(60), // Status
];
return columns;
});
};
}, []);
return (
@@ -108,25 +109,16 @@ function Dashboard() {
<thead className="bg-gray-200 text-sm font-semibold">
<tr>
<th className="py-2 px-4">ID</th>
<th className="py-2 px-4">Wert</th>
<th className="py-2 px-4">Zeitstempel</th>
<th className="py-2 px-4">Modul</th>
<th className="py-2 px-4">Meldung</th>
<th className="py-2 px-4">Status</th>
</tr>
</thead>
<tbody className="text-sm">
{last20Messages ? (
{last20Messages.length > 0 ? (
// Aufteilung der Nachrichten und Mapping zu Zeilen
last20Messages
.split("<tr>")
.slice(1)
.map((row, index) => {
const columns = row
.replace("</tr>", "")
.split("<td>")
.slice(1)
.map((col) => col.replace("</td>", ""));
return (
last20Messages.map((columns, index) => (
<tr key={index}>
<td className="py-2 px-4">{columns[0]}</td>
<td className="py-2 px-4">{columns[1]}</td>
@@ -134,8 +126,7 @@ function Dashboard() {
<td className="py-2 px-4">{columns[3]}</td>
<td className="py-2 px-4">{columns[4]}</td>
</tr>
);
})
))
) : (
<tr>
<td className="py-2 px-4" colSpan="5">