From 6bbb4c671dc58411fb6853ab1e11e782bc67f1f0 Mon Sep 17 00:00:00 2001 From: h4ckx0r Date: Wed, 23 Apr 2025 18:47:47 +0200 Subject: [PATCH] Recoge y genera nuevos datos --- libs/api.js | 9 +++++- libs/utils.js | 82 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 87 insertions(+), 4 deletions(-) diff --git a/libs/api.js b/libs/api.js index 1a7b0e8..7fec503 100644 --- a/libs/api.js +++ b/libs/api.js @@ -1,5 +1,5 @@ // Importamos las utilidades que necesitemos y la configuración del programa -import { sleep } from './utils.js'; +import { sleep, saveDataInFile } from './utils.js'; import config from '../config.js'; // Creamos una lista de elementos que contendrá las peticiones acumuladas para enviarlas de golpe @@ -20,13 +20,20 @@ async function subirDato(datos) { field2: datos.temperatura, field3: datos.presion, field4: datos.altitudSegunPresion, + field5: datos.altitudMetros, + field6: datos.velocidadKmph, + field7: datos.numSatelites, latitude: datos.latitud, longitude: datos.longitud }; + //console.log(datos); //console.log(datosParaEnviar); + // Guardar datos en archivo: https://nodejs.org/en/learn/manipulating-files/writing-files-with-nodejs + peticionesRetrasadas.push(datosParaEnviar); + saveDataInFile(datos); } diff --git a/libs/utils.js b/libs/utils.js index 9d24287..cb0a860 100644 --- a/libs/utils.js +++ b/libs/utils.js @@ -1,3 +1,5 @@ +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 @@ -6,6 +8,8 @@ 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 @@ -23,9 +27,10 @@ function dataLineToObject(line) { longitud: parseFloat(lineArray[6].trim()), altitudMetros: parseFloat(lineArray[7].trim()), velocidadKmph: parseFloat(lineArray[8].trim()), - direccionONose: parseFloat(lineArray[9].trim()), + direccionNorte: parseFloat(lineArray[9].trim()), numSatelites: parseInt(lineArray[10].trim()), - datetime: new Date(lineArray[11].trim().replace("Date/Time: ", "")) + 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); @@ -44,8 +49,79 @@ async function sleep(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 + sleep, + saveDataInFile } \ No newline at end of file