Desarrollar una api rest en
node.js contenerizada con Docker que reciba datos de sensores IoT desde la plataforma
https://iot.veto.cl/ mediante webhooks y los almacene en una base de datos SQL Server, aplicando normalización temporal y deduplicación de datos.
1. Duplicación de datos: Al momento de la inserción, se está generando un duplicado de la fila anterior en la base de datos, lo que resulta en información redundante e incorrecta.
2. Gestión de datos con desfase temporal: Los sensores están programados para enviar datos cada hora, pero no todos lo hacen simultáneamente. Existe un desfase de 10 a 15 minutos entre las transmisiones de los diferentes sensores. Es fundamental que los valores se guarden asociados a la 'hora pico más cercana' (por ejemplo, si un sensor envía a las 10:10, se asocie a las 10:00; si envía a las 10:50, se asocie a las 11:00, o se defina una lógica clara para agrupar estas lecturas horarias).
El objetivo es asegurar que la API funcione correctamente, insertando datos únicos y aplicando una lógica robusta para el manejo y normalización de los tiempos de las lecturas de los sensores. Se espera una solución que garantice la integridad y precisión de los datos almacenados.
Al momento de las pruebes, debes proporcionarme un enlace para enviar los webhooks (ngrok u otro)
Ejemplo de respuesta:
{
"id": "69...",
"EventId": "68f7...",
"Type": "action_event_web_hooks",
"message": "Http request sent to
https://10fedc9567a5.ngrok-free.app/data",
"context": {
"end_time": 1762528241758,
"variable": {
"id": "674...",
"Name": "Humedad Ambiental",
"value": 51.2,
"timestamp": 1762441239000
},
"start_time": 1762528241372,
"is_triggered": true,
"request_data": {
"url": "
https://10fedc9567a5.ngrok-free.app/data",
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"payload": "{ \"name\": \" B2T13F \", \"value\": \" 51.2 \", \"datetime\": \" 2025-11-06 12:00:39 -0300 \" ,\"Variable\":\"{'name': 'Humedad Ambiental', 'id': '674e0f1b4bee0906bf673b3f', 'label': 'hum_sht', 'description': '', 'properties': {'hidden': '0', 'isLocationVariable': '0'}, 'last_value': '46.7', 'timestamp': '1762527999000', 'last_value_context': {}}\",\"IdVariable\":\"674e0f1b4bee0906bf673b3f\",\"NombreVariable\":\"Humedad Ambiental\",\"TiempoUltimoValor\": \"2025-11-07 12:06:39 -0300\" }"
},
"response_data": {
"body": "{\"message\":\"Dato recibido\",\"sensor\":\"B2T13F\",\"type\":\"humedad\"}",
"headers": {
"Date": "Fri, 07 Nov 2025 15:10:41 GMT",
"Etag": "W/\"3e-K+5Mjf1CHL5Vkv4VJzU+rh+HelM\"",
"Content-Type": "application/json; charset=utf-8",
"X-Powered-By": "Express",
"Content-Length": "62",
"Ngrok-Agent-Ips": "190.54.97.122"
},
"status_code": 200
},
},
}
Delivery term: Not specified