Files
CPLv4.0/mocks/scripts/fetchAnalogInputsData.mjs

73 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
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 (100107) 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.");
})();