73 lines
2.4 KiB
JavaScript
73 lines
2.4 KiB
JavaScript
/*
|
||
Das Script fetchAnalogInputsData.mjs lädt historische Messdaten für analoge Eingänge eines CPL-Geräts (über HTTP-API) für die
|
||
letzten 30 Tage herunter und speichert sie als JSON-Dateien in einem lokalen Verzeichnis.
|
||
Es verwendet die Zugangsdaten Littwin und ruft für jeden Eingang (100–107) und jeden DIA-Typ (DIA0, DIA1, DIA2)
|
||
die Daten ab. Die Ergebnisse werden in mocks/device-cgi-simulator/chartsData/analogInputs/<Eingang>/<DIA>.json gespeichert.
|
||
Das Script dient zur Aktualisierung von Mockdaten für Tests oder Simulationen.
|
||
*/
|
||
|
||
import fetch from "node-fetch";
|
||
import fs from "fs/promises";
|
||
import path from "path";
|
||
import { fileURLToPath } from "url";
|
||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||
|
||
const CPL_HOST = "http://10.10.0.118"; // ggf. anpassen
|
||
const USERNAME = "Littwin";
|
||
const PASSWORD = "Littwin";
|
||
const DIA_TYPES = ["DIA0", "DIA1", "DIA2"];
|
||
const INPUTS = Array.from({ length: 8 }, (_, i) => 100 + i); // 100-107
|
||
|
||
function formatDate(date) {
|
||
return date.toISOString().slice(0, 10);
|
||
}
|
||
const today = new Date();
|
||
const TO_DATE = formatDate(today);
|
||
const fromDateObj = new Date(today);
|
||
fromDateObj.setDate(today.getDate() - 30);
|
||
const FROM_DATE = formatDate(fromDateObj);
|
||
|
||
function getUrl(dia, eingang) {
|
||
const [vonJahr, vonMonat, vonTag] = FROM_DATE.split("-");
|
||
const [bisJahr, bisMonat, bisTag] = TO_DATE.split("-");
|
||
// immer Typ 1 (analoger Messwert)
|
||
return `${CPL_HOST}/CPL?seite.ACP&${dia}=${vonJahr};${vonMonat};${vonTag};${bisJahr};${bisMonat};${bisTag};${eingang};1`;
|
||
}
|
||
|
||
async function fetchAndSave(dia, eingang) {
|
||
const url = getUrl(dia, eingang);
|
||
console.log("Fetch:", url);
|
||
const res = await fetch(url, {
|
||
headers: {
|
||
Authorization:
|
||
"Basic " + Buffer.from(`${USERNAME}:${PASSWORD}`).toString("base64"),
|
||
},
|
||
});
|
||
if (!res.ok)
|
||
throw new Error(`Fehler bei Eingang ${eingang} ${dia}: ${res.status}`);
|
||
const data = await res.json();
|
||
const dir = path.join(
|
||
__dirname,
|
||
"../device-cgi-simulator/chartsData/analogInputs",
|
||
String(eingang - 99)
|
||
);
|
||
await fs.mkdir(dir, { recursive: true });
|
||
await fs.writeFile(
|
||
path.join(dir, `${dia}.json`),
|
||
JSON.stringify(data, null, 2)
|
||
);
|
||
}
|
||
|
||
(async () => {
|
||
for (const eingang of INPUTS) {
|
||
for (const dia of DIA_TYPES) {
|
||
try {
|
||
await fetchAndSave(dia, eingang);
|
||
} catch (e) {
|
||
console.error(e);
|
||
}
|
||
}
|
||
}
|
||
console.log("Mockdaten aktualisiert.");
|
||
})();
|