const jsonFilePath = "static/dtc_table.json"; var dtcState = {}; async function processDTCNotifications(dtcArray) { if (dtcArray.length === 0 || dtcArray[0] == "0") { dtcState = {}; return; } for (var i = 0; i < dtcArray.length; i++) { var dtcInfo = dtcArray[i].split(","); var errorCode = parseInt(dtcInfo[1]); var activity = parseInt(dtcInfo[3]); var severity = parseInt(dtcInfo[2]); try { var { title, description } = await getDescriptionForDTCNumber(errorCode); switch (severity) { case 1: severity = "info"; break; case 2: severity = "warning"; break; case 3: severity = "danger"; break; } if (dtcState[errorCode]) { // Überprüfen, ob sich der Zustand von "previous" auf "active" geändert hat if (activity !== dtcState[errorCode]) { dtcState[errorCode] = activity; if (activity === 1) showNotification(description, severity); } } else { // DTC ist neu, Zustand speichern und Benachrichtigung anzeigen dtcState[errorCode] = activity; showNotification(description, severity); } } catch (error) { console.error("Error processing DTC:", error); } } } function getDescriptionForDTCNumber(number) { return new Promise((resolve, reject) => { fetch(jsonFilePath) .then((response) => response.json()) .then((data) => { const dtcList = data.dtc_table_data; const foundEntry = dtcList.find((entry) => entry.num === number); if (foundEntry) { const description = foundEntry.description; const title = foundEntry.title; resolve({ title, description }); } else { // Wenn die Nummer nicht gefunden wurde, geben Sie einen Fehler zurück reject(`Beschreibung für Nummer ${number} nicht gefunden.`); } }) .catch((error) => { // Im Fehlerfall geben Sie den Fehler zurück reject(error); }); }); } async function showDTCModal(event) { var dtc = parseInt(event.currentTarget.getAttribute("data-dtc")); var debugval = event.currentTarget.getAttribute("data-debugval"); var modal = $("#dtcModal"); try { var { title, description } = await getDescriptionForDTCNumber(dtc); modal.find(".modal-title").text(title); modal.find(".dtc-desc").text(description); if (debugval > 0) { modal.find(".dtc-debugval").text("Debugvalue: " + debugval); } else { modal.find(".dtc-debugval").remove(); } } catch (error) { console.error("Fehler beim Abrufen der Beschreibung:", error); modal.find(".modal-title").text("Fehler"); modal.find(".dtc-desc").text("DTC-Beschreibung konnte nicht geladen werden"); } // Modal anzeigen modal.modal("show"); } function fillDTCTable(dtcArray) { // Referenz auf das Tabellen-Element var table = document.getElementById("dtc_table"); var tablediv = document.getElementById("dtc_container"); // Prüfen, ob DTC vorhanden sind if (dtcArray.length === 0 || dtcArray[0] == "0") { // Verstecke das Tabellen-Div, wenn keine DTC vorhanden sind tablediv.hidden = true; table.innerHTML = ""; return; } else { // Zeige das Tabellen-Div, wenn DTC vorhanden sind tablediv.hidden = false; } // Tabelle leeren, bevor sie neu gefüllt wird table.innerHTML = ""; // Überschriften für die Tabelle erstellen var headerRow = table.insertRow(0); // Definition der Klassen und Scopes für die Spalten var columnDefinitions = [ { class: "col-6", scope: "Zeitstempel" }, { class: "col-2", scope: "Fehlercode" }, { class: "col-2", scope: "Schwere" }, { class: "col-2", scope: "Aktiv" }, ]; for (var i = 0; i < columnDefinitions.length; i++) { var headerCell = headerRow.insertCell(i); headerCell.className = `th ${columnDefinitions[i].class}`; headerCell.scope = columnDefinitions[i].scope; headerCell.innerHTML = columnDefinitions[i].scope; } // DTC-Daten in die Tabelle einfügen for (var i = 0; i < dtcArray.length; i++) { var dtcInfo = dtcArray[i].split(","); var row = table.insertRow(i + 1); // +1 wegen der Überschriftenzeile // Zeitstempel var timestampCell = row.insertCell(0); timestampCell.innerHTML = formatTimestamp(parseInt(dtcInfo[0])); // Fehlercode var errorCodeCell = row.insertCell(1); errorCodeCell.innerHTML = dtcInfo[1]; // Schwere var severityCell = row.insertCell(2); var severity = parseInt(dtcInfo[2]); // Schwere switch (severity) { case 1: severityCell.innerHTML = 'Info'; break; case 2: severityCell.innerHTML = 'Warnung'; break; case 3: severityCell.innerHTML = 'Kritisch'; break; default: severityCell.innerHTML = 'Unbekannt'; } row.setAttribute("data-dtc", dtcInfo[1]); row.setAttribute("data-debugval", dtcInfo[4]); row.addEventListener("click", showDTCModal); // Aktivität var activityCell = row.insertCell(3); activityCell.innerHTML = parseInt(dtcInfo[3]) === 1 ? "active" : "previous"; } } function formatTimestamp(milliseconds) { const date = new Date(milliseconds); const days = String(date.getUTCDate() - 1).padStart(2, "0"); const hours = String(date.getUTCHours()).padStart(2, "0"); const minutes = String(date.getUTCMinutes()).padStart(2, "0"); const seconds = String(date.getUTCSeconds()).padStart(2, "0"); const millisecondsFormatted = String(date.getUTCMilliseconds()).padStart( 3, "0" ); return `${days}-${hours}:${minutes}:${seconds}:${millisecondsFormatted}`; }