feat(analogeEingaenge): CGI-Unterstützung für Produktion – Einstellungen werden je nach Umgebung per API oder per CPL-Link gespeichert

This commit is contained in:
ISA
2025-05-02 11:04:34 +02:00
parent 732c9820b9
commit 1dfa7590dc
4 changed files with 56 additions and 31 deletions

View File

@@ -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 ## [1.6.339] 2025-05-02
### Hinzugefügt ### Hinzugefügt

View File

@@ -117,6 +117,11 @@ Beispielaufruf im DEV-Modus (über UI gesteuert, nicht manuell notwendig):
- Neue Chart.js Visualisierung: - Neue Chart.js Visualisierung:
- Beim Klick auf einen Eingang in der Tabelle wird nur dessen Verlaufskurve angezeigt - 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 - 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 - **Bearbeitbare Felder im Modal:** Name, Offset, Faktor, Loggerintervall
- Änderungen werden in der Entwicklungsumgebung direkt in `/apiMockData/SERVICE/analogeEingaengeMockData.js` gespeichert - Ä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 - Speicherung erfolgt einzeilig im Format `var xyz = [1, 2, 3];`, Kommentare im File bleiben erhalten

View File

@@ -31,40 +31,48 @@ export default function AnalogInputsSettingsModal({
const handleSave = async () => { const handleSave = async () => {
setIsSaving(true); 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 { try {
await fetch("/api/cpl/updateAnalogInputsSettingsAPIHandler", { if (isDev) {
method: "POST", // Entwicklung: lokale Mock-API
headers: { "Content-Type": "application/json" }, await fetch("/api/cpl/updateAnalogInputsSettingsAPIHandler", {
body: JSON.stringify({ method: "POST",
updates: [ headers: { "Content-Type": "application/json" },
{ body: JSON.stringify({
key: "win_analogInputsNames", updates: [
index: selectedInput.id - 1, { key: "win_analogInputsNames", index: slot - 1, value: name },
value: name, { key: "win_analogInputsOffset", index: slot - 1, value: offset },
}, { key: "win_analogInputsFactor", index: slot - 1, value: factor },
{ {
key: "win_analogInputsOffset", key: "win_analogInputsloggerIntervall",
index: selectedInput.id - 1, index: slot - 1,
value: parseFloat(offset.toString()), value: loggerInterval,
}, },
{ ],
key: "win_analogInputsFactor", }),
index: selectedInput.id - 1, });
value: parseFloat(factor.toString()), alert("Mockdaten gespeichert.");
}, } else {
{ // Produktion: direkter CGI-Befehl
key: "win_analogInputsloggerIntervall", const result = await fetch(url);
index: selectedInput.id - 1, if (!result.ok) throw new Error("Fehler bei CGI-Aufruf");
value: parseInt(loggerInterval.toString()), alert("Einstellungen gespeichert (Produktion).");
}, }
],
}),
});
alert("Einstellungen gespeichert.");
onClose(); onClose();
location.reload(); location.reload();
} catch (err) { } catch (err) {
alert("Fehler beim Speichern der Einstellungen."); alert("Fehler beim Speichern.");
console.error(err); console.error(err);
} finally { } finally {
setIsSaving(false); setIsSaving(false);

View File

@@ -6,5 +6,5 @@
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen). 2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
*/ */
const webVersion = "1.6.339"; const webVersion = "1.6.340";
export default webVersion; export default webVersion;