From 1dfa7590dc1b060fe7f3058a9b94e3c672387e8b Mon Sep 17 00:00:00 2001 From: ISA Date: Fri, 2 May 2025 11:04:34 +0200 Subject: [PATCH] =?UTF-8?q?feat(analogeEingaenge):=20CGI-Unterst=C3=BCtzun?= =?UTF-8?q?g=20f=C3=BCr=20Produktion=20=E2=80=93=20Einstellungen=20werden?= =?UTF-8?q?=20je=20nach=20Umgebung=20per=20API=20oder=20per=20CPL-Link=20g?= =?UTF-8?q?espeichert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 12 ++++ README.md | 5 ++ .../AnalogInputsSettingsModal.tsx | 68 +++++++++++-------- config/webVersion.ts | 2 +- 4 files changed, 56 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70e3040..342bb94 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ Alle Änderungen und Versionen des CPLv4.0 Frontends chronologisch dokumentiert. --- +## [1.6.340] – 2025-05-02 + +### Verbesserungen + +- Das Modal für analoge Eingänge unterstützt jetzt auch die Produktion: + - In der Entwicklungsumgebung wird wie bisher die Mock-Datei (`analogeEingaengeMockData.js`) über die API gespeichert + - In der Produktionsumgebung werden die Einstellungen direkt per CGI-Aufruf an das CPL gesendet (`/CPL?/Service/ae.ACP&...`) +- Die Erkennung der Umgebung (DEV/PROD) erfolgt automatisch über `window.location.hostname` +- Die Speicherung per CGI-Link wurde erfolgreich getestet mit `ACN1=...`, `ACO1=...`, `ACF1=...`, `ACL1=...` + +--- + ## [1.6.339] – 2025-05-02 ### Hinzugefügt diff --git a/README.md b/README.md index d54aa86..6af4d66 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,11 @@ Beispielaufruf im DEV-Modus (über UI gesteuert, nicht manuell notwendig): - Neue Chart.js Visualisierung: - Beim Klick auf einen Eingang in der Tabelle wird nur dessen Verlaufskurve angezeigt - Der Verlauf bezieht sich auf die letzten 24 Stunden, dargestellt mit deutscher Zeitachse +- In der **Produktionsumgebung** (CPL) werden die Einstellungen per CGI-Aufruf direkt an das Gerät gesendet: + z. B. `/CPL?/Service/ae.ACP&ACN1=AE22&ACO1=0.1&ACF1=1.0&ACL1=30` +- In der **Entwicklungsumgebung** erfolgt die Speicherung weiterhin lokal über die zentrale API +- Das System erkennt automatisch, welche Umgebung aktiv ist (localhost vs. echte IP) + - **Bearbeitbare Felder im Modal:** Name, Offset, Faktor, Loggerintervall - Änderungen werden in der Entwicklungsumgebung direkt in `/apiMockData/SERVICE/analogeEingaengeMockData.js` gespeichert - Speicherung erfolgt einzeilig im Format `var xyz = [1, 2, 3];`, Kommentare im File bleiben erhalten diff --git a/components/main/analogeEingaenge/AnalogInputsSettingsModal.tsx b/components/main/analogeEingaenge/AnalogInputsSettingsModal.tsx index 167ddb6..7888a6d 100644 --- a/components/main/analogeEingaenge/AnalogInputsSettingsModal.tsx +++ b/components/main/analogeEingaenge/AnalogInputsSettingsModal.tsx @@ -31,40 +31,48 @@ export default function AnalogInputsSettingsModal({ const handleSave = async () => { setIsSaving(true); + + const slot = selectedInput.id; + const isDev = window.location.hostname === "localhost"; + + const acn = encodeURIComponent(name); + const offsetParam = offset.toString().replace(",", "."); + const factorParam = factor.toString().replace(",", "."); + const loggerParam = loggerInterval.toString(); + + const url = `/CPL?/Service/ae.ACP&ACN${slot}=${acn}&ACO${slot}=${offsetParam}&ACF${slot}=${factorParam}&ACL${slot}=${loggerParam}`; + try { - await fetch("/api/cpl/updateAnalogInputsSettingsAPIHandler", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ - updates: [ - { - key: "win_analogInputsNames", - index: selectedInput.id - 1, - value: name, - }, - { - key: "win_analogInputsOffset", - index: selectedInput.id - 1, - value: parseFloat(offset.toString()), - }, - { - key: "win_analogInputsFactor", - index: selectedInput.id - 1, - value: parseFloat(factor.toString()), - }, - { - key: "win_analogInputsloggerIntervall", - index: selectedInput.id - 1, - value: parseInt(loggerInterval.toString()), - }, - ], - }), - }); - alert("Einstellungen gespeichert."); + if (isDev) { + // Entwicklung: lokale Mock-API + await fetch("/api/cpl/updateAnalogInputsSettingsAPIHandler", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + updates: [ + { key: "win_analogInputsNames", index: slot - 1, value: name }, + { key: "win_analogInputsOffset", index: slot - 1, value: offset }, + { key: "win_analogInputsFactor", index: slot - 1, value: factor }, + { + key: "win_analogInputsloggerIntervall", + index: slot - 1, + value: loggerInterval, + }, + ], + }), + }); + alert("Mockdaten gespeichert."); + } else { + // Produktion: direkter CGI-Befehl + const result = await fetch(url); + if (!result.ok) throw new Error("Fehler bei CGI-Aufruf"); + alert("Einstellungen gespeichert (Produktion)."); + } + onClose(); location.reload(); } catch (err) { - alert("Fehler beim Speichern der Einstellungen."); + alert("Fehler beim Speichern."); console.error(err); } finally { setIsSaving(false); diff --git a/config/webVersion.ts b/config/webVersion.ts index 743300d..8470788 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.339"; +const webVersion = "1.6.340"; export default webVersion;