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