127 lines
3.9 KiB
JavaScript
127 lines
3.9 KiB
JavaScript
import fs from 'node:fs';
|
|
|
|
/**
|
|
* Convierte una línea de datos en un objeto
|
|
* @param {string} line Línea de datos para convertir a objeto
|
|
* @returns {object} Objeto con los datos convertidos
|
|
*/
|
|
function dataLineToObject(line) {
|
|
//Separamos nuestra línea en diferentes trozos usando como separador el ';'
|
|
const lineArray = line.split(";");
|
|
console.log(line);
|
|
saveDataInCSVFile(line);
|
|
|
|
//Devolvemos un objeto con sus propiedades convertidas
|
|
|
|
//Usamos el trim() para eliminar los espacios delante y detrás de los valores
|
|
//Usamos el parseFloat para convertir esos valores a decimales, ya que son cadenas de texto
|
|
//Usamos el parseInt para convertir esos valores a enteros, ya que son cadenas de texto
|
|
try {
|
|
return {
|
|
paquetes: parseInt(lineArray[0].trim()),
|
|
temperatura: parseFloat(lineArray[1].trim()),
|
|
presion: parseFloat(lineArray[2].trim()),
|
|
altitudSegunPresion: parseFloat(lineArray[3].trim()),
|
|
nombreEstacion: lineArray[4].trim(),
|
|
latitud: parseFloat(lineArray[5].trim()),
|
|
longitud: parseFloat(lineArray[6].trim()),
|
|
altitudMetros: parseFloat(lineArray[7].trim()),
|
|
velocidadKmph: parseFloat(lineArray[8].trim()),
|
|
direccionNorte: parseFloat(lineArray[9].trim()),
|
|
numSatelites: parseInt(lineArray[10].trim()),
|
|
datetimeGPS: new Date(lineArray[11].trim().replace("Date/Time: ", "")),
|
|
datetime: new Date().toISOString() // Obtenemos la fecha/hora actual
|
|
};
|
|
} catch (error) {
|
|
console.error('Error al convertir los datos:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Espera un cierto tiempo, esto sirve para crear temporizadores
|
|
* @param {number} ms Milisegundos que hay que esperar
|
|
* @returns {Promise<void>}
|
|
*/
|
|
async function sleep(ms) {
|
|
return new Promise((resolve) => {
|
|
setTimeout(resolve, ms);
|
|
});
|
|
}
|
|
|
|
|
|
const fechaHoraActual = new Date();
|
|
async function saveDataInFile(data) {
|
|
fs.appendFile(`logs/${fechaHoraActual.toISOString()}.json`, JSON.stringify(data) + ',\n', err => {
|
|
if (err) {
|
|
console.error(err);
|
|
} else {
|
|
//console.log('Datos guardados correctamente');
|
|
}
|
|
});
|
|
|
|
saveDataInGeoJSONFile(data);
|
|
}
|
|
|
|
var geoJSONData = {
|
|
type: "FeatureCollection",
|
|
features: [
|
|
{
|
|
"type": "Feature",
|
|
"properties": {},
|
|
"geometry": {
|
|
"coordinates": [],
|
|
"type": "LineString"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
|
|
async function saveDataInGeoJSONFile(data) {
|
|
|
|
if (data.latitud === null || data.longitud === null) {
|
|
return;
|
|
}
|
|
|
|
geoJSONData.features.push({
|
|
type: "Feature",
|
|
properties: {
|
|
numPaquete: data.paquetes,
|
|
temperatura: data.temperatura
|
|
},
|
|
geometry: {
|
|
type: "Point",
|
|
coordinates: [data.longitud, data.latitud]
|
|
}
|
|
});
|
|
|
|
geoJSONData.features[0].geometry.coordinates.push([data.longitud, data.latitud]);
|
|
|
|
|
|
fs.writeFile('logs/' + fechaHoraActual.toISOString() + '.geojson', JSON.stringify(geoJSONData), err => {
|
|
if (err) {
|
|
console.error(err);
|
|
} else {
|
|
// file written successfully
|
|
}
|
|
});
|
|
}
|
|
|
|
saveDataInCSVFile("Nº Paquete; Temperatura; Presión; Altitud Según Presión; Latitud; Longitud; Altitud (m); Velocidad (Km/h); Dirección/Norte; Número de Satelites; Fecha/Hora GPS; Fecha/Hora del Sistema");
|
|
async function saveDataInCSVFile(data) {
|
|
fs.appendFile(`logs/${fechaHoraActual.toISOString()}.csv`, data + '\n', err => {
|
|
if (err) {
|
|
console.error(err);
|
|
} else {
|
|
//console.log('Datos guardados correctamente');
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
// Exportamos las funciones para poder usarlas en otras partes del programa
|
|
export {
|
|
dataLineToObject,
|
|
sleep,
|
|
saveDataInFile
|
|
} |