Files
signalk-plugin/plugin/tools/dataHub.js
2026-03-11 15:25:03 +01:00

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
};