// weather-poller.js — Zentraler Wetterdaten-Poller
import { getLast } from 'bootstrap-api';
let lastSeenStationMs = 0;
//let pollInterval = 30_000; // 30 Sekunden
let pollInterval = 5_000; // 5 Sekunden
let intervalId = null;
async function checkForNewData() {
try {
const last = await getLast();
const ms =
typeof last?.current?.datatimestamp === 'number' ? last.current.datatimestamp * 1000 : null;
if (ms && ms !== lastSeenStationMs) {
lastSeenStationMs = ms;
// Event feuern mit Timestamp
window.dispatchEvent(
new CustomEvent('weather:new-data', {
detail: { ms, timestamp: ms },
})
);
}
} catch (err) {
console.warn('[weather-poller] Polling error:', err);
}
}
/**
* Startet den zentralen Weather-Poller
* @param {number} interval - Polling-Intervall in ms (default: 30000)
*/
export function startWeatherPoller(interval = 30_000) {
if (intervalId) {
console.warn('[weather-poller] Already running, stopping old interval');
stopWeatherPoller();
}
pollInterval = interval;
// Erstes Check sofort (nach kurzem Delay, damit Charts initialisiert sind)
setTimeout(() => checkForNewData(), 1000);
// Dann regelmäßig
intervalId = setInterval(() => {
checkForNewData();
}, pollInterval);
}
/**
* Stoppt den Weather-Poller
*/
export function stopWeatherPoller() {
if (intervalId) {
clearInterval(intervalId);
intervalId = null;
}
}
/**
* Liefert den letzten gesehenen Timestamp
* @deprecated Ungenutzt – Kandidat für Entfernung
*/
export function getLastSeenTimestamp() {
return lastSeenStationMs;
}