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:
12
CHANGELOG.md
12
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
|
## [1.6.339] – 2025-05-02
|
||||||
|
|
||||||
### Hinzugefügt
|
### Hinzugefügt
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user