79 lines
2.0 KiB
JavaScript
79 lines
2.0 KiB
JavaScript
/**
|
|
* 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
|
|
};
|