fix: analoge Eingänge Interval in Modal in json
This commit is contained in:
@@ -6,5 +6,5 @@ NEXT_PUBLIC_USE_MOCK_BACKEND_LOOP_START=false
|
|||||||
NEXT_PUBLIC_EXPORT_STATIC=false
|
NEXT_PUBLIC_EXPORT_STATIC=false
|
||||||
NEXT_PUBLIC_USE_CGI=false
|
NEXT_PUBLIC_USE_CGI=false
|
||||||
# App-Versionsnummer
|
# App-Versionsnummer
|
||||||
NEXT_PUBLIC_APP_VERSION=1.6.423
|
NEXT_PUBLIC_APP_VERSION=1.6.424
|
||||||
NEXT_PUBLIC_CPL_MODE=jsmock # json (Entwicklungsumgebung) oder jsmock (CPL ->CGI-Interface-Simulator) oder production (CPL-> CGI-Interface Platzhalter)
|
NEXT_PUBLIC_CPL_MODE=json # json (Entwicklungsumgebung) oder jsmock (CPL ->CGI-Interface-Simulator) oder production (CPL-> CGI-Interface Platzhalter)
|
||||||
@@ -5,5 +5,5 @@ NEXT_PUBLIC_CPL_API_PATH=/CPL
|
|||||||
NEXT_PUBLIC_EXPORT_STATIC=true
|
NEXT_PUBLIC_EXPORT_STATIC=true
|
||||||
NEXT_PUBLIC_USE_CGI=true
|
NEXT_PUBLIC_USE_CGI=true
|
||||||
# App-Versionsnummer
|
# App-Versionsnummer
|
||||||
NEXT_PUBLIC_APP_VERSION=1.6.423
|
NEXT_PUBLIC_APP_VERSION=1.6.424
|
||||||
NEXT_PUBLIC_CPL_MODE=production
|
NEXT_PUBLIC_CPL_MODE=production
|
||||||
@@ -1,10 +1,22 @@
|
|||||||
// /apiMockData/SERVICE/analogInputsMockData.js
|
// /apiMockData/SERVICE/analogInputsMockData.js
|
||||||
|
|
||||||
var win_analogInputsValues = [4.771072, 5.665244, 0.005467, -0.007468, 0.000002, 0.000001, 0.000001, 0.000007];
|
var win_analogInputsValues = [
|
||||||
var win_analogInputsNames = ["Test", "AE 2", "AE 3", "AE 4", "AE 5", "AE 6", "AE 7", "AE 8"];
|
4.771072, 5.665244, 0.005467, -0.007468, 0.000002, 0.000001, 0.000001,
|
||||||
|
0.000007,
|
||||||
|
];
|
||||||
|
var win_analogInputsLabels = [
|
||||||
|
"AE 11",
|
||||||
|
"AE 2",
|
||||||
|
"AE 3",
|
||||||
|
"AE 4",
|
||||||
|
"AE 5",
|
||||||
|
"AE 6",
|
||||||
|
"AE 7",
|
||||||
|
"AE 8",
|
||||||
|
];
|
||||||
var win_analogInputsOffset = [11.001, 0.0, 0.0, 0, 0.0, 0.0, 0.0, 0.0];
|
var win_analogInputsOffset = [11.001, 0.0, 0.0, 0, 0.0, 0.0, 0.0, 0.0];
|
||||||
var win_analogInputsFactor = [12.001, 1.0, 1.0, 1, 1.0, 1.0, 1.0, 1.0];
|
var win_analogInputsFactor = [12.001, 1.0, 1.0, 1, 1.0, 1.0, 1.0, 1.0];
|
||||||
var win_analogInputsloggerIntervall = [10, 10, 10, 10, 10, 10, 10, 10];
|
var win_analogInputsLoggerIntervall = [10, 10, 10, 10, 10, 10, 10, 10];
|
||||||
var win_analogInputsUnits = ["V", "V", "V", "V", "mA", "mA", "mA", "mA"];
|
var win_analogInputsUnits = ["V", "V", "V", "V", "mA", "mA", "mA", "mA"];
|
||||||
var win_analogInputsWeighting = [0, 0, 0, 0, 0, 0, 0, 0];
|
var win_analogInputsWeighting = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export default function AnalogInputSettingsModal({
|
|||||||
const [label, setLabel] = useState("");
|
const [label, setLabel] = useState("");
|
||||||
const [offset, setOffset] = useState("0.000");
|
const [offset, setOffset] = useState("0.000");
|
||||||
const [factor, setFactor] = useState("1.000");
|
const [factor, setFactor] = useState("1.000");
|
||||||
const [loggerInterval, setLoggerInterval] = useState("10");
|
const [loggerInterval, setLoggerInterval] = useState("9");
|
||||||
const [unit, setUnit] = useState("V");
|
const [unit, setUnit] = useState("V");
|
||||||
const [isSaving, setIsSaving] = useState(false);
|
const [isSaving, setIsSaving] = useState(false);
|
||||||
|
|
||||||
@@ -32,12 +32,9 @@ export default function AnalogInputSettingsModal({
|
|||||||
? selectedInput.factor.toFixed(3)
|
? selectedInput.factor.toFixed(3)
|
||||||
: selectedInput.factor || "1.000"
|
: selectedInput.factor || "1.000"
|
||||||
);
|
);
|
||||||
setLoggerInterval(
|
setLoggerInterval(selectedInput.interval);
|
||||||
selectedInput.loggerInterval !== undefined
|
|
||||||
? selectedInput.loggerInterval.toString()
|
|
||||||
: "10"
|
|
||||||
);
|
|
||||||
setUnit(selectedInput.unit || "V");
|
setUnit(selectedInput.unit || "V");
|
||||||
|
console.log("selectedInput in analoge Eingänge:", selectedInput.interval);
|
||||||
}
|
}
|
||||||
}, [selectedInput, isOpen]);
|
}, [selectedInput, isOpen]);
|
||||||
|
|
||||||
@@ -58,12 +55,12 @@ export default function AnalogInputSettingsModal({
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
await fetch("/api/cpl/updateAnalogInputsSettingsAPIHandler", {
|
await fetch("/api/cpl/updateAnalogInputsSettingsHandler", {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: { "Content-Type": "application/json" },
|
headers: { "Content-Type": "application/json" },
|
||||||
body: JSON.stringify({
|
body: JSON.stringify({
|
||||||
updates: [
|
updates: [
|
||||||
{ key: "win_analogInputsNames", index: slot - 1, value: label },
|
{ key: "win_analogInputsLabels", index: slot - 1, value: label },
|
||||||
{
|
{
|
||||||
key: "win_analogInputsOffset",
|
key: "win_analogInputsOffset",
|
||||||
index: slot - 1,
|
index: slot - 1,
|
||||||
@@ -76,7 +73,7 @@ export default function AnalogInputSettingsModal({
|
|||||||
},
|
},
|
||||||
{ key: "win_analogInputsUnits", index: slot - 1, value: unit },
|
{ key: "win_analogInputsUnits", index: slot - 1, value: unit },
|
||||||
{
|
{
|
||||||
key: "win_analogInputsloggerIntervall",
|
key: "win_analogInputsLoggerIntervall",
|
||||||
index: slot - 1,
|
index: slot - 1,
|
||||||
value: parseInt(loggerParam),
|
value: parseInt(loggerParam),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
{
|
{
|
||||||
"win_analogInputsValues": [
|
"win_analogInputsValues": [
|
||||||
4.771072, 5.665244, 0.005467, -0.007468, 0.000002, 0.000001, 0.000001,
|
4.771072,
|
||||||
|
5.665244,
|
||||||
|
0.005467,
|
||||||
|
-0.007468,
|
||||||
|
0.000002,
|
||||||
|
0.000001,
|
||||||
|
0.000001,
|
||||||
0.000007
|
0.000007
|
||||||
],
|
],
|
||||||
"win_analogInputsNames": [
|
"win_analogInputsLabels": [
|
||||||
"AE1",
|
"AE 12",
|
||||||
"AE 2",
|
"AE 2",
|
||||||
"AE 3",
|
"AE 3",
|
||||||
"AE 4",
|
"AE 4",
|
||||||
@@ -13,9 +19,54 @@
|
|||||||
"AE 7",
|
"AE 7",
|
||||||
"AE 8"
|
"AE 8"
|
||||||
],
|
],
|
||||||
"win_analogInputsOffset": [11.001, 0.0, 0.0, 0, 0.0, 0.0, 0.0, 0.0],
|
"win_analogInputsOffset": [
|
||||||
"win_analogInputsFactor": [12.001, 1.0, 1.0, 1, 1.0, 1.0, 1.0, 1.0],
|
10.991,
|
||||||
"win_analogInputsloggerIntervall": [5, 10, 10, 10, 10, 10, 10, 10],
|
0,
|
||||||
"win_analogInputsUnits": ["V", "V", "V", "V", "mA", "mA", "mA", "mA"],
|
0,
|
||||||
"win_analogInputsWeighting": [0, 0, 0, 0, 0, 0, 0, 0]
|
0,
|
||||||
}
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
],
|
||||||
|
"win_analogInputsFactor": [
|
||||||
|
11.992,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1
|
||||||
|
],
|
||||||
|
"win_analogInputsUnits": [
|
||||||
|
"V",
|
||||||
|
"V",
|
||||||
|
"V",
|
||||||
|
"V",
|
||||||
|
"mA",
|
||||||
|
"mA",
|
||||||
|
"mA",
|
||||||
|
"mA"
|
||||||
|
],
|
||||||
|
"win_analogInputsLoggerIntervall": [
|
||||||
|
8,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
10,
|
||||||
|
10
|
||||||
|
],
|
||||||
|
"win_analogInputsWeighting": [
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -4,20 +4,11 @@ var win_analogInputsValues = [
|
|||||||
4.771072, 5.665244, 0.005467, -0.007468, 0.000002, 0.000001, 0.000001,
|
4.771072, 5.665244, 0.005467, -0.007468, 0.000002, 0.000001, 0.000001,
|
||||||
0.070007,
|
0.070007,
|
||||||
];
|
];
|
||||||
var win_analogInputsNames = [
|
var win_analogInputsLabels = ["AE 11", "AE 2", "AE 3", "AE 4", "AE 5", "AE 6", "AE 7", "AE 8", ];
|
||||||
"AE 1",
|
var win_analogInputsOffset = [10.999, 0.0, 0.0, 0, 0.0, 0.0, 0.0, 0.0];
|
||||||
"AE 2",
|
var win_analogInputsFactor = [11.999, 1.0, 1.0, 1, 1.0, 1.0, 1.0, 1.0];
|
||||||
"AE 3",
|
var win_analogInputsLoggerIntervall = [9, 10, 10, 10, 10, 10, 10, 10];
|
||||||
"AE 4",
|
var win_analogInputsUnits = ["mA", "V", "V", "V", "mA", "mA", "mA", "mA"];
|
||||||
"AE 5",
|
|
||||||
"AE 6",
|
|
||||||
"AE 7",
|
|
||||||
"AE 8",
|
|
||||||
];
|
|
||||||
var win_analogInputsOffset = [11.001, 0.0, 0.0, 0, 0.0, 0.0, 0.0, 0.0];
|
|
||||||
var win_analogInputsFactor = [12.001, 1.0, 1.0, 1, 1.0, 1.0, 1.0, 1.0];
|
|
||||||
var win_analogInputsloggerIntervall = [5, 10, 10, 10, 10, 10, 10, 10];
|
|
||||||
var win_analogInputsUnits = ["V", "V", "V", "V", "mA", "mA", "mA", "mA"];
|
|
||||||
var win_analogInputsWeighting = [0, 0, 0, 0, 0, 0, 0, 0];
|
var win_analogInputsWeighting = [0, 0, 0, 0, 0, 0, 0, 0];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "cpl-v4",
|
"name": "cpl-v4",
|
||||||
"version": "1.6.423",
|
"version": "1.6.424",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "cpl-v4",
|
"name": "cpl-v4",
|
||||||
"version": "1.6.423",
|
"version": "1.6.424",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fontsource/roboto": "^5.1.0",
|
"@fontsource/roboto": "^5.1.0",
|
||||||
"@iconify-icons/ri": "^1.2.10",
|
"@iconify-icons/ri": "^1.2.10",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "cpl-v4",
|
"name": "cpl-v4",
|
||||||
"version": "1.6.423",
|
"version": "1.6.424",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev",
|
"dev": "next dev",
|
||||||
|
|||||||
@@ -1,70 +1,67 @@
|
|||||||
// /pages/api/cpl/getAnalogInputsHandler.ts
|
// /pages/api/cpl/getAnalogInputsHandler.ts
|
||||||
|
|
||||||
import { NextApiRequest, NextApiResponse } from "next";
|
import { NextApiRequest, NextApiResponse } from "next";
|
||||||
import path from "path";
|
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
export default async function handler(
|
export default function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
req: NextApiRequest,
|
|
||||||
res: NextApiResponse
|
|
||||||
) {
|
|
||||||
const mode = process.env.NEXT_PUBLIC_CPL_MODE;
|
const mode = process.env.NEXT_PUBLIC_CPL_MODE;
|
||||||
|
|
||||||
if (mode === "json") {
|
try {
|
||||||
const filePath = path.join(
|
if (mode === "json") {
|
||||||
process.cwd(),
|
const filePath = path.join(
|
||||||
"mocks/api/SERVICE/analogInputsMockData.json"
|
process.cwd(),
|
||||||
);
|
"mocks/api/SERVICE/analogInputsMockData.json"
|
||||||
const content = fs.readFileSync(filePath, "utf-8");
|
|
||||||
const data = JSON.parse(content);
|
|
||||||
return res.status(200).json(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode === "jsmock") {
|
|
||||||
const filePath = path.join(
|
|
||||||
process.cwd(),
|
|
||||||
"mocks/device-cgi-simulator/SERVICE/analogInputsMockData.js"
|
|
||||||
);
|
|
||||||
const fileContent = fs.readFileSync(filePath, "utf-8");
|
|
||||||
|
|
||||||
function extractArray(name) {
|
|
||||||
const match = fileContent.match(
|
|
||||||
new RegExp(`var\\s+${name}\\s*=\\s*\\[([\\s\\S]*?)\\];`)
|
|
||||||
);
|
);
|
||||||
return match
|
const content = fs.readFileSync(filePath, "utf-8");
|
||||||
? match[1].split(",").map((s) => s.trim().replace(/^["']|["']$/g, ""))
|
const data = JSON.parse(content);
|
||||||
: [];
|
return res.status(200).json(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = {
|
if (mode === "jsmock") {
|
||||||
win_analogInputsValues: extractArray("win_analogInputsValues").map(
|
const filePath = path.join(
|
||||||
Number
|
process.cwd(),
|
||||||
),
|
"mocks/device-cgi-simulator/SERVICE/analogInputsMockData.js"
|
||||||
win_analogInputsNames: extractArray("win_analogInputsNames"),
|
);
|
||||||
win_analogInputsOffset: extractArray("win_analogInputsOffset").map(
|
const content = fs.readFileSync(filePath, "utf-8");
|
||||||
Number
|
|
||||||
),
|
|
||||||
win_analogInputsFactor: extractArray("win_analogInputsFactor").map(
|
|
||||||
Number
|
|
||||||
),
|
|
||||||
win_analogInputsloggerIntervall: extractArray(
|
|
||||||
"win_analogInputsloggerIntervall"
|
|
||||||
).map(Number),
|
|
||||||
win_analogInputsUnits: extractArray("win_analogInputsUnits"),
|
|
||||||
win_analogInputsWeighting: extractArray("win_analogInputsWeighting").map(
|
|
||||||
Number
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Begrenzung auf maximal 8 Elemente je Array
|
function extractArray(name: string): any[] {
|
||||||
Object.keys(result).forEach((key) => {
|
const match = content.match(
|
||||||
if (Array.isArray(result[key])) {
|
new RegExp(`var\s+${name}\s*=\s*\[([\s\S]*?)\];`)
|
||||||
result[key] = result[key].slice(0, 8);
|
);
|
||||||
|
if (!match) return [];
|
||||||
|
return match[1]
|
||||||
|
.split(",")
|
||||||
|
.map((s) => s.trim().replace(/^["']|["']$/g, ""))
|
||||||
|
.slice(0, 8);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
return res.status(200).json(result);
|
const responseData = {
|
||||||
|
win_analogInputsValues: extractArray("win_analogInputsValues").map(
|
||||||
|
Number
|
||||||
|
),
|
||||||
|
win_analogInputsNames: extractArray("win_analogInputsNames"),
|
||||||
|
win_analogInputsOffset: extractArray("win_analogInputsOffset").map(
|
||||||
|
Number
|
||||||
|
),
|
||||||
|
win_analogInputsFactor: extractArray("win_analogInputsFactor").map(
|
||||||
|
Number
|
||||||
|
),
|
||||||
|
win_analogInputsLoggerIntervall: extractArray(
|
||||||
|
"win_analogInputsLoggerIntervall"
|
||||||
|
).map(Number),
|
||||||
|
win_analogInputsUnits: extractArray("win_analogInputsUnits"),
|
||||||
|
win_analogInputsWeighting: extractArray(
|
||||||
|
"win_analogInputsWeighting"
|
||||||
|
).map(Number),
|
||||||
|
};
|
||||||
|
|
||||||
|
return res.status(200).json(responseData);
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status(400).json({ error: "Unsupported mode" });
|
||||||
|
} catch (error) {
|
||||||
|
console.error("❌ Fehler beim Lesen der analogen Eingänge:", error);
|
||||||
|
return res.status(500).json({ error: "Fehler beim Lesen der Datei" });
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(400).json({ error: "Unsupported mode" });
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,88 +0,0 @@
|
|||||||
// /pages/api/cpl/updateAnalogInputsSettingsAPIHandler.ts
|
|
||||||
import { NextApiRequest, NextApiResponse } from "next";
|
|
||||||
import path from "path";
|
|
||||||
import fs from "fs/promises";
|
|
||||||
|
|
||||||
export default async function handler(
|
|
||||||
req: NextApiRequest,
|
|
||||||
res: NextApiResponse
|
|
||||||
) {
|
|
||||||
if (req.method !== "POST") {
|
|
||||||
return res.status(405).json({ error: "Method not allowed" });
|
|
||||||
}
|
|
||||||
|
|
||||||
const filePath = path.join(
|
|
||||||
process.cwd(),
|
|
||||||
"apiMockData",
|
|
||||||
"SERVICE",
|
|
||||||
"analogInputsMockData.js"
|
|
||||||
);
|
|
||||||
|
|
||||||
try {
|
|
||||||
const { updates } = req.body;
|
|
||||||
|
|
||||||
if (!Array.isArray(updates)) {
|
|
||||||
return res.status(400).json({ error: "Ungültige Datenstruktur" });
|
|
||||||
}
|
|
||||||
|
|
||||||
const raw = await fs.readFile(filePath, "utf-8");
|
|
||||||
|
|
||||||
// Teile den Inhalt in:
|
|
||||||
// 1. Vor dem ersten var
|
|
||||||
// 2. Die var-Zuweisungen (Arrays)
|
|
||||||
// 3. Nach dem letzten var (z. B. Block-Kommentare)
|
|
||||||
|
|
||||||
const varRegex = /var\s+(\w+)\s*=\s*\[([\s\S]*?)\];/g;
|
|
||||||
let match;
|
|
||||||
|
|
||||||
const updateMap: Record<string, string[]> = {};
|
|
||||||
const variableLines: string[] = [];
|
|
||||||
let matchStartIndexes: number[] = [];
|
|
||||||
|
|
||||||
while ((match = varRegex.exec(raw)) !== null) {
|
|
||||||
const [fullMatch, key, valuesBlock] = match;
|
|
||||||
const values = valuesBlock
|
|
||||||
.split(",")
|
|
||||||
.map((v) => v.trim())
|
|
||||||
.filter((v) => v.length > 0);
|
|
||||||
|
|
||||||
updateMap[key] = values;
|
|
||||||
variableLines.push(fullMatch);
|
|
||||||
matchStartIndexes.push(match.index);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Kommentare vor und nach den Variablen extrahieren
|
|
||||||
const firstVarIndex = matchStartIndexes[0] ?? 0;
|
|
||||||
const lastVarMatch = variableLines[variableLines.length - 1] ?? "";
|
|
||||||
const lastVarIndex = raw.lastIndexOf(lastVarMatch);
|
|
||||||
const commentsBefore = raw.slice(0, firstVarIndex).trim();
|
|
||||||
const commentsAfter = raw.slice(lastVarIndex + lastVarMatch.length).trim();
|
|
||||||
|
|
||||||
// Updates anwenden
|
|
||||||
for (const { key, index, value } of updates) {
|
|
||||||
if (!updateMap[key]) {
|
|
||||||
console.warn(`⚠️ Schlüssel '${key}' fehlt – wird übersprungen`);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
updateMap[key][index] =
|
|
||||||
typeof value === "string" ? `"${value}"` : value.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Arrays immer einzeilig schreiben
|
|
||||||
const variablesBlock = Object.entries(updateMap)
|
|
||||||
.map(([key, values]) => `var ${key} = [${values.join(", ")}];`)
|
|
||||||
.join("\n");
|
|
||||||
|
|
||||||
const finalContent =
|
|
||||||
[commentsBefore, variablesBlock, commentsAfter]
|
|
||||||
.filter(Boolean)
|
|
||||||
.join("\n\n") + "\n";
|
|
||||||
|
|
||||||
await fs.writeFile(filePath, finalContent, "utf-8");
|
|
||||||
|
|
||||||
res.status(200).json({ message: "Mockdaten gespeichert." });
|
|
||||||
} catch (err) {
|
|
||||||
console.error("❌ Fehler beim Schreiben:", err);
|
|
||||||
res.status(500).json({ error: "Interner Serverfehler" });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
65
pages/api/cpl/updateAnalogInputsSettingsHandler.ts
Normal file
65
pages/api/cpl/updateAnalogInputsSettingsHandler.ts
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
// /pages/api/cpl/updateAnalogInputsSettingsHandler.ts
|
||||||
|
import { NextApiRequest, NextApiResponse } from "next";
|
||||||
|
import fs from "fs";
|
||||||
|
import path from "path";
|
||||||
|
|
||||||
|
export default function handler(req: NextApiRequest, res: NextApiResponse) {
|
||||||
|
if (req.method !== "POST") {
|
||||||
|
return res.status(405).json({ error: "Method not allowed" });
|
||||||
|
}
|
||||||
|
|
||||||
|
const mode = process.env.NEXT_PUBLIC_CPL_MODE;
|
||||||
|
const updates = req.body.updates;
|
||||||
|
|
||||||
|
if (!Array.isArray(updates)) {
|
||||||
|
return res.status(400).json({ error: "Missing or invalid updates array" });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode === "json") {
|
||||||
|
const filePath = path.join(
|
||||||
|
process.cwd(),
|
||||||
|
"mocks/api/SERVICE/analogInputsMockData.json"
|
||||||
|
);
|
||||||
|
const content = fs.readFileSync(filePath, "utf-8");
|
||||||
|
const data = JSON.parse(content);
|
||||||
|
|
||||||
|
for (const update of updates) {
|
||||||
|
const { key, index, value } = update;
|
||||||
|
if (Array.isArray(data[key]) && index < data[key].length) {
|
||||||
|
data[key][index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8");
|
||||||
|
return res.status(200).json({ success: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mode === "jsmock") {
|
||||||
|
const filePath = path.join(
|
||||||
|
process.cwd(),
|
||||||
|
"mocks/device-cgi-simulator/SERVICE/analogInputsMockData.js"
|
||||||
|
);
|
||||||
|
let content = fs.readFileSync(filePath, "utf-8");
|
||||||
|
|
||||||
|
for (const update of updates) {
|
||||||
|
const { key, index, value } = update;
|
||||||
|
const regex = new RegExp(`var\\s+${key}\\s*=\\s*\\[([\\s\\S]*?)\\];`);
|
||||||
|
const match = content.match(regex);
|
||||||
|
if (!match) continue;
|
||||||
|
|
||||||
|
const items = match[1].split(",").map((s) => s.trim());
|
||||||
|
if (index >= items.length) continue;
|
||||||
|
|
||||||
|
const isString = typeof value === "string";
|
||||||
|
items[index] = isString ? `"${value}"` : `${value}`;
|
||||||
|
|
||||||
|
const updatedLine = `var ${key} = [${items.join(", ")}];`;
|
||||||
|
content = content.replace(regex, updatedLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.writeFileSync(filePath, content, "utf-8");
|
||||||
|
return res.status(200).json({ success: true });
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status(400).json({ error: "Unsupported mode" });
|
||||||
|
}
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
// /public/CPL/SERVICE/analogInputs.js
|
// /public/CPL/SERVICE/analogInputs.js
|
||||||
//CGI-Variablen
|
//CGI-Variablen
|
||||||
var win_analogInputsValues = [<%=AAV01%>,<%=AAV02%>,<%=AAV03%>,<%=AAV04%>,<%=AAV05%>,<%=AAV06%>,<%=AAV07%>,<%=AAV08%>];
|
var win_analogInputsValues = [<%=AAV01%>,<%=AAV02%>,<%=AAV03%>,<%=AAV04%>,<%=AAV05%>,<%=AAV06%>,<%=AAV07%>,<%=AAV08%>];
|
||||||
var win_analogInputsNames=[<%=ACN01%>,<%=ACN02%>,<%=ACN03%>,<%=ACN04%>,<%=ACN05%>,<%=ACN06%>,<%=ACN07%>,<%=ACN08%>];
|
var win_analogInputsLabels=[<%=ACN01%>,<%=ACN02%>,<%=ACN03%>,<%=ACN04%>,<%=ACN05%>,<%=ACN06%>,<%=ACN07%>,<%=ACN08%>];
|
||||||
var win_analogInputsUnits=[<%=ACU01%>,<%=ACU02%>,<%=ACU03%>,<%=ACU04%>,<%=ACU05%>,<%=ACU06%>,<%=ACU07%>,<%=ACU08%>];
|
var win_analogInputsUnits=[<%=ACU01%>,<%=ACU02%>,<%=ACU03%>,<%=ACU04%>,<%=ACU05%>,<%=ACU06%>,<%=ACU07%>,<%=ACU08%>];
|
||||||
var win_analogInputsFactor=[<%=ACF01%>,<%=ACF02%>,<%=ACF03%>,<%=ACF04%>,<%=ACF05%>,<%=ACF06%>,<%=ACF07%>,<%=ACF08%>];
|
var win_analogInputsFactor=[<%=ACF01%>,<%=ACF02%>,<%=ACF03%>,<%=ACF04%>,<%=ACF05%>,<%=ACF06%>,<%=ACF07%>,<%=ACF08%>];
|
||||||
var win_analogInputsOffset=[<%=ACO01%>,<%=ACO02%>,<%=ACO03%>,<%=ACO04%>,<%=ACO05%>,<%=ACO06%>,<%=ACO07%>,<%=ACO08%>];
|
var win_analogInputsOffset=[<%=ACO01%>,<%=ACO02%>,<%=ACO03%>,<%=ACO04%>,<%=ACO05%>,<%=ACO06%>,<%=ACO07%>,<%=ACO08%>];
|
||||||
var win_analogInputsWeighting=[<%=ACS01%>,<%=ACS02%>,<%=ACS03%>,<%=ACS04%>,<%=ACS05%>,<%=ACS06%>,<%=ACS07%>,<%=ACS08%>];
|
var win_analogInputsWeighting=[<%=ACS01%>,<%=ACS02%>,<%=ACS03%>,<%=ACS04%>,<%=ACS05%>,<%=ACS06%>,<%=ACS07%>,<%=ACS08%>];
|
||||||
var win_analogInputsloggerIntervall =[<%=ACL01%>,<%=ACL02%>,<%=ACL03%>,<%=ACL04%>,<%=ACL05%>,<%=ACL06%>,<%=ACL07%>,<%=ACL08%>];
|
var win_analogInputsLoggerIntervall =[<%=ACL01%>,<%=ACL02%>,<%=ACL03%>,<%=ACL04%>,<%=ACL05%>,<%=ACL06%>,<%=ACL07%>,<%=ACL08%>];
|
||||||
|
|
||||||
// CGI responsive Variablen
|
// CGI responsive Variablen
|
||||||
/*
|
/*
|
||||||
var win_analogInputsValues = [4.771072,5.665244,0.005467,-0.007468,0.000002,0.000001,0.000001,0.000007];
|
var win_analogInputsValues = [4.771072,5.665244,0.005467,-0.007468,0.000002,0.000001,0.000001,0.000007];
|
||||||
var win_analogInputsNames=['AE 1','AE 2','AE 3','AE 4','AE 5','AE 6','AE 7','AE 8'];
|
var win_analogInputsLabels=['AE 1','AE 2','AE 3','AE 4','AE 5','AE 6','AE 7','AE 8'];
|
||||||
var win_analogInputsUnits=['V','V','V','V','mA','mA','mA','mA'];
|
var win_analogInputsUnits=['V','V','V','V','mA','mA','mA','mA'];
|
||||||
var win_analogInputsFactor=[1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000];
|
var win_analogInputsFactor=[1.000,1.000,1.000,1.000,1.000,1.000,1.000,1.000];
|
||||||
var win_analogInputsOffset=[0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000];
|
var win_analogInputsOffset=[0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000];
|
||||||
var win_analogInputsWeighting=[0,0,0,0,0,0,0,0];
|
var win_analogInputsWeighting=[0,0,0,0,0,0,0,0];
|
||||||
var win_analogInputsloggerIntervall =[10,10,10,10,10,10,10,10];
|
var win_analogInputsLoggerIntervall =[10,10,10,10,10,10,10,10];
|
||||||
/*
|
/*
|
||||||
Kontext:
|
Kontext:
|
||||||
Messwert
|
Messwert
|
||||||
|
|||||||
@@ -20,11 +20,11 @@ export const fetchAnalogInputsService = async () => {
|
|||||||
return Array.from({ length: 8 }, (_, i) => ({
|
return Array.from({ length: 8 }, (_, i) => ({
|
||||||
id: i + 1,
|
id: i + 1,
|
||||||
value: parseFloat(win.win_analogInputsValues[i]),
|
value: parseFloat(win.win_analogInputsValues[i]),
|
||||||
label: win.win_analogInputsNames[i],
|
label: win.win_analogInputsLabels[i],
|
||||||
unit: win.win_analogInputsUnits[i],
|
unit: win.win_analogInputsUnits[i],
|
||||||
offset: parseFloat(win.win_analogInputsOffset[i]),
|
offset: parseFloat(win.win_analogInputsOffset[i]),
|
||||||
factor: parseFloat(win.win_analogInputsFactor[i]),
|
factor: parseFloat(win.win_analogInputsFactor[i]),
|
||||||
interval: parseInt(win.win_analogInputsloggerIntervall[i]),
|
interval: parseInt(win.win_analogInputsLoggerIntervall[i]),
|
||||||
weighting: parseInt(win.win_analogInputsWeighting[i]),
|
weighting: parseInt(win.win_analogInputsWeighting[i]),
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
@@ -36,11 +36,11 @@ export const fetchAnalogInputsService = async () => {
|
|||||||
return data.win_analogInputsValues.map((value: number, i: number) => ({
|
return data.win_analogInputsValues.map((value: number, i: number) => ({
|
||||||
id: i + 1,
|
id: i + 1,
|
||||||
value,
|
value,
|
||||||
label: data.win_analogInputsNames[i],
|
label: data.win_analogInputsLabels[i],
|
||||||
unit: data.win_analogInputsUnits[i],
|
unit: data.win_analogInputsUnits[i],
|
||||||
offset: parseFloat(data.win_analogInputsOffset[i]),
|
offset: parseFloat(data.win_analogInputsOffset[i]),
|
||||||
factor: parseFloat(data.win_analogInputsFactor[i]),
|
factor: parseFloat(data.win_analogInputsFactor[i]),
|
||||||
interval: parseInt(data.win_analogInputsloggerIntervall[i]),
|
interval: parseInt(data.win_analogInputsLoggerIntervall[i]),
|
||||||
weighting: parseInt(data.win_analogInputsWeighting[i]),
|
weighting: parseInt(data.win_analogInputsWeighting[i]),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user