From d4ba8f5b2e65f4a097cd8cfc744a80e4e8479390 Mon Sep 17 00:00:00 2001 From: ISA Date: Fri, 9 May 2025 10:59:18 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Integration=20von=20CGI-Platzhaltern=20?= =?UTF-8?q?f=C3=BCr=20digitale=20Ausg=C3=A4nge=20(DASx,=20DANx)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Platzhalter in da.js auf neue Struktur (DAS1–DAS4, DAN1–DAN4) umgestellt - fetchDigitalOutputsService liest Werte dynamisch über da.js vom CPL-Webserver - Schreibvorgänge via window.location.href mit CGI-Parametern (DASx=, DANx=) - Umschaltlogik zwischen Entwicklungs- und Produktionsmodus eingebaut - Modal-Speichern aktualisiert sowohl Status als auch Bezeichnung per CGI - Unterstützung für lokale Mockdaten über API bleibt bestehen --- .../SERVICE/digitaleAusgaengeMockData.js | 17 ++++++ .../einausgaenge/DigitalOutputsWidget.tsx | 22 +++++--- .../modals/DigitalOutputsModal.tsx | 52 +++++++++++++------ config/webVersion.ts | 2 +- public/CPL/SERVICE/da.js | 11 ++-- 5 files changed, 73 insertions(+), 31 deletions(-) diff --git a/apiMockData/SERVICE/digitaleAusgaengeMockData.js b/apiMockData/SERVICE/digitaleAusgaengeMockData.js index 5b00803..ab525d7 100644 --- a/apiMockData/SERVICE/digitaleAusgaengeMockData.js +++ b/apiMockData/SERVICE/digitaleAusgaengeMockData.js @@ -1,2 +1,19 @@ win_da_state = [0, 0, 1, 0]; win_da_bezeichnung = ["Ausgang1", "Ausgang2", "Ausgang3", "Ausgang4"]; + +/* +📤 Schreiben der digitalen Ausgänge: +Zustand setzen (0/1): +DAS1=1 // Ausgang 1 auf EIN +DAS2=0 // Ausgang 2 auf AUS +DAS3=1 // Ausgang 3 auf EIN +DAS4=0 // Ausgang 4 auf AUS + +Bezeichnung setzen: +DAN1=Licht Flur // Bezeichnung für Ausgang 1 +DAN2="Licht Relais" // Bezeichnung für Ausgang 2 +DAN3=Beleuchtung // Bezeichnung für Ausgang 3 +DAN4=Beleuchtung // Bezeichnung für Ausgang 4 + + +*/ diff --git a/components/main/einausgaenge/DigitalOutputsWidget.tsx b/components/main/einausgaenge/DigitalOutputsWidget.tsx index 2fff0cd..7296a46 100644 --- a/components/main/einausgaenge/DigitalOutputsWidget.tsx +++ b/components/main/einausgaenge/DigitalOutputsWidget.tsx @@ -14,6 +14,7 @@ export default function DigitalOutputsWidget({ openOutputModal }) { const digitalOutputs = useSelector( (state: RootState) => state.digitalOutputsSlice.outputs ); + const isCPL = process.env.NEXT_PUBLIC_NODE_ENV === "production"; const handleToggle = async (id: number) => { const updatedOutputs = digitalOutputs.map((output) => @@ -23,14 +24,21 @@ export default function DigitalOutputsWidget({ openOutputModal }) { dispatch(setDigitalOutputs(updatedOutputs)); try { - await fetch("/api/cpl/updateDigitalOutputs", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ outputs: updatedOutputs }), - }); - console.log("✅ Status gespeichert für Ausgang", id); + if (isCPL) { + window.location.href = `/CPL?dummy.htm&DAS${id}=${ + updatedOutputs[id - 1].status ? 1 : 0 + }`; + } else { + await fetch("/api/cpl/updateDigitalOutputs", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ outputs: updatedOutputs }), + }); + } + + console.log("✅ Ausgang aktualisiert:", id); } catch (error) { - console.error("❌ Fehler beim Speichern:", error); + console.error("❌ Fehler beim Schreiben:", error); } }; diff --git a/components/main/einausgaenge/modals/DigitalOutputsModal.tsx b/components/main/einausgaenge/modals/DigitalOutputsModal.tsx index 919f7ce..9b92fe6 100644 --- a/components/main/einausgaenge/modals/DigitalOutputsModal.tsx +++ b/components/main/einausgaenge/modals/DigitalOutputsModal.tsx @@ -44,25 +44,47 @@ export default function DigitalOutputsModal({ : output ); - try { - const res = await fetch("/api/cpl/updateDigitalOutputs", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ outputs: updatedOutputs }), - }); + const isCPL = process.env.NEXT_PUBLIC_NODE_ENV === "production"; - if (!res.ok) { - const err = await res.json(); - setErrorMsg(err?.error || "Fehler beim Speichern."); + try { + if (isCPL) { + // ✅ Name speichern (DANx=...) + const nameEncoded = encodeURIComponent(label.trim()); + const nameUrl = `/CPL?dummy.htm&DAN${selectedOutput.id}=${nameEncoded}`; + + // ✅ Status speichern (DASx=...) + const statusUrl = `/CPL?dummy.htm&DAS${selectedOutput.id}=${ + status ? 1 : 0 + }`; + + // 🟢 Beide nacheinander senden (wichtig bei älteren CPL-Versionen) + window.location.href = nameUrl; // Name zuerst (ggf. durch Refresh überschrieben) + setTimeout(() => { + window.location.href = statusUrl; + }, 300); // kleine Verzögerung (optional) + + // 💡 Modal wird nicht automatisch geschlossen — da Seite neu lädt. } else { - console.log( - "✅ Status & Label gespeichert für Ausgang", - selectedOutput.id - ); - closeOutputModal(); + // 🧪 Lokaler Entwicklungsmodus + const res = await fetch("/api/cpl/updateDigitalOutputs", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ outputs: updatedOutputs }), + }); + + if (!res.ok) { + const err = await res.json(); + setErrorMsg(err?.error || "Fehler beim Speichern."); + } else { + console.log( + "✅ Status & Label gespeichert für Ausgang", + selectedOutput.id + ); + closeOutputModal(); + } } } catch (err) { - setErrorMsg("❌ Netzwerkfehler beim Speichern."); + setErrorMsg("❌ Fehler beim Speichern."); } finally { setIsSaving(false); } diff --git a/config/webVersion.ts b/config/webVersion.ts index 5305bbc..63f85b3 100644 --- a/config/webVersion.ts +++ b/config/webVersion.ts @@ -6,5 +6,5 @@ 2: Patch oder Hotfix (Bugfixes oder kleine Änderungen). */ -const webVersion = "1.6.396"; +const webVersion = "1.6.397"; export default webVersion; diff --git a/public/CPL/SERVICE/da.js b/public/CPL/SERVICE/da.js index ca4ff51..9691db7 100644 --- a/public/CPL/SERVICE/da.js +++ b/public/CPL/SERVICE/da.js @@ -1,13 +1,8 @@ // /public/CPL/SERVICE/da.js -//var win_da_state=[<%=DES80%>,<%=DES81%>,<%=DES82%>,<%=DES83%>]; +//var win_da_state=[<%=DES80%>,<%=DES81%>,<%=DES82%>,<%=DES83%>]; // alte Platzhalter aber ich bekome noch die Werte //var win_da_bezeichnung=["Ausgang1", "Ausgang2", "Ausgang3", "Ausgang4"]; -var win_da_state=[<%=DAS80%>,<%=DAS81%>,<%=DAS82%>,<%=DAS83%>]; //neu aber noch leer String - -var win_da_bezeichnung=[<%=DAN80%>,<%=DAN81%>,<%=DAN82%>,<%=DAN83%>]; // neu aber noch leere String - - - - +var win_da_state=[<%=DAS1%>,<%=DAS2%>,<%=DAS3%>,<%=DAS4%>]; //neu aber ein Leere Array mit 4 indizes , Backend ist noch in Arbeit +var win_da_bezeichnung=[<%=DAN1%>,<%=DAN2%>,<%=DAN3%>,<%=DAN4%>]; //neu aber ein Leere Array mit 4 indizes , Backend ist noch in Arbeit \ No newline at end of file