feat: jsSimulatedProd-Modus für analoge & digitale Eingänge implementiert

- neuen Modus `jsSimulatedProd` eingeführt für realitätsnahe Simulation auf Basis echter Produktionsdaten
- analoge Eingänge: analogInputsMockData.js eingebunden und dynamisch per Script geladen
- digitale Eingänge: digitalInputsMockData.js eingebunden mit window-Variablen (z. B. win_de_state, win_de_label etc.)
- fetchAnalogInputsService.ts und fetchDigitalInputsService.ts angepasst zur Modusprüfung und Script-Auswertung
- getAnalogInputsHandler.ts und getDigitalInputsHandler.ts geben im jsSimulatedProd-Modus JavaScript-Dateien aus
- .env.development setzt `NEXT_PUBLIC_CPL_MODE=jsSimulatedProd`
This commit is contained in:
Ismail Ali
2025-06-22 08:42:49 +02:00
parent 7d1e7ef88a
commit 041bc3e23e
20 changed files with 151 additions and 354 deletions

View File

@@ -18,51 +18,17 @@ export default function handler(req: NextApiRequest, res: NextApiResponse) {
return res.status(200).json(data);
}
if (mode === "jsmock") {
const filePath = path.join(
process.cwd(),
"mocks/device-cgi-simulator/SERVICE/analogInputsMockData.js"
if (mode === "jsSimulatedProd") {
const analogInputsScript = fs.readFileSync(
"mocks/device-cgi-simulator/SERVICE/analogInputsMockData.js",
"utf-8"
);
const content = fs.readFileSync(filePath, "utf-8");
function extractArray(name: string): any[] {
const match = content.match(
new RegExp(`var\\s+${name}\\s*=\\s*\\[([\\s\\S]*?)\\];`)
);
if (!match) return [];
return match[1]
.split(",")
.map((s) => s.trim().replace(/^["']|["']$/g, ""))
.slice(0, 8);
}
const responseData = {
win_analogInputsValues: extractArray("win_analogInputsValues").map(
Number
),
win_analogInputsLabels: extractArray("win_analogInputsLabels"),
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),
};
//console.log("Analog Inputs Mock Data:", responseData);
return res.status(200).json(responseData);
res.setHeader("Content-Type", "application/javascript");
res.status(200).send(analogInputsScript);
return;
}
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" });
console.error(error);
res.status(500).json({ error: "Internal Server Error" });
}
}