Migra dal codice salvato in locale al codice condiviso

This commit is contained in:
Giuseppe Raffa
2026-01-06 17:36:58 +01:00
parent 8a88c31c75
commit ff1566d36b
30 changed files with 8985 additions and 0 deletions

74
plugin/tools/publisher.js Normal file
View File

@@ -0,0 +1,74 @@
/**
* publisher.js - Pubblica dati su SignalK
*/
/**
* Genera valori SignalK da un oggetto dati
* @param {Object} data - Dati da convertire
* @param {string} prefix - Prefisso per i path SignalK
* @returns {Array} Array di valori SignalK
*/
function generateValues(data, prefix = "meb") {
if (!data || typeof data !== 'object') {
return [];
}
const values = [];
function traverse(obj, pathParts) {
for (const key in obj) {
if (!Object.prototype.hasOwnProperty.call(obj, key)) continue;
const val = obj[key];
if (val === undefined || val === null) continue;
const newPath = [...pathParts, key];
if (typeof val === "object" && !Array.isArray(val)) {
traverse(val, newPath);
} else if (!Array.isArray(val)) {
// Ignora array, pubblica solo valori primitivi
values.push({
path: newPath.join("."),
value: val,
meta: { displayName: key },
});
}
}
}
traverse(data, [prefix]);
return values;
}
/**
* Pubblica dati meteo su SignalK
* @param {Object} app - Istanza app SignalK
* @param {Object} weatherData - Dati meteo da pubblicare
* @param {Object} settings - Impostazioni plugin
*/
function publishWeatherData(app, weatherData, settings) {
if (!app || !weatherData) {
console.warn('[Publisher] App o dati non disponibili');
return;
}
const values = generateValues(weatherData);
if (values.length === 0) {
console.debug('[Publisher] Nessun valore da pubblicare');
return;
}
console.debug(`📤 Pubblicazione ${values.length} valori SignalK`);
try {
app.handleMessage("meb", {
updates: [{ values }],
});
} catch (error) {
console.error('[Publisher] Errore pubblicazione:', error.message);
}
}
module.exports = { publish: publishWeatherData };