/** * dataHub.js - Cache centralizzata dei dati del plugin. * * Tutti i moduli (realtime, telegram, ecc.) leggono da qui. * I dati vengono scritti da: * - realtime/core.js → updateSensorData() (ogni 500ms) * - index.cjs → updateWeatherData() (ogni 5min) * * Nessuna duplicazione: i dati vengono raccolti UNA volta e condivisi. */ let latestSensorData = null; let latestWeatherData = { forecast: null, sea: null }; let lastSensorUpdate = 0; let lastWeatherUpdate = 0; /** * Aggiorna lo snapshot dei dati sensore. * Chiamato da sendData() in core.js ogni 500ms. * @param {Object} data - Dati sensore flat (es. { wind_direction: 180, temperature: 22.5 }) */ function updateSensorData(data) { latestSensorData = data ? { ...data } : null; lastSensorUpdate = Date.now(); } /** * Aggiorna lo snapshot dei dati meteo. * Chiamato da fetchAndPublishWeather() in index.cjs. * @param {Object|null} forecast - Dati previsioni (temperatura, vento, ecc.) * @param {Object|null} sea - Dati condizioni marine (onde, ecc.) */ function updateWeatherData(forecast, sea) { latestWeatherData = { forecast: forecast || null, sea: sea || null }; lastWeatherUpdate = Date.now(); } /** * Legge l'ultimo snapshot dei dati sensore. * @returns {Object|null} Dati sensore o null se non ancora disponibili */ function getSensorData() { return latestSensorData; } /** * Legge l'ultimo snapshot dei dati meteo. * @returns {{ forecast: Object|null, sea: Object|null }} */ function getWeatherData() { return latestWeatherData; } /** * Legge tutti i dati disponibili (sensori + meteo) con timestamps. * @returns {{ sensors: Object|null, weather: Object, timestamps: Object }} */ function getAllData() { return { sensors: latestSensorData, weather: latestWeatherData, timestamps: { sensorUpdate: lastSensorUpdate, weatherUpdate: lastWeatherUpdate } }; } module.exports = { updateSensorData, updateWeatherData, getSensorData, getWeatherData, getAllData };