Volver a proyectos
Airwell IoT Router

Airwell IoT Router

Capa de Abstracción para Dispositivos IoT

Rol: Backend Developer
Período: Noviembre 2024 - Actual
En Desarrollo
Visitar proyecto
Cliente: Airwell (via House of Coding / Amiltone)

Visión General

Contexto

Airwell es una empresa de climatización que ofrece dispositivos IoT (aire acondicionado, termostatos, sensores) controlados vía aplicación móvil. Para conectar dispositivos de múltiples fabricantes, la empresa utilizaba un servicio tercerizado como intermediario. El problema: costos recurrentes de licencia por dispositivo, vendor lock-in, latencia adicional, e imposibilidad de customizar sin depender del proveedor.

Solución

Actualmente la empresa utiliza una API externa tercerizada para conectar los dispositivos, generando altos costos mensuales. El IoT Router es una capa de abstracción que conecta directamente a las APIs de los fabricantes de dispositivos, normaliza los diferentes formatos en una API unificada, mantiene compatibilidad con el formato esperado por el mobile legacy, y escala para soportar nuevos fabricantes vía sistema de plugins. La solución eliminará estos costos y dará independencia tecnológica total a la empresa.

Mi Rol

Asumí un proyecto iniciado por un colega de Amiltone y realicé una refactorización masiva, definiendo buenas prácticas y adaptando la arquitectura para escalar. Diseñé la arquitectura de plugins para múltiples fabricantes, desarrollé sistema de rate limiting distribuido con Redis, e integré AWS Lambda para comandos programados. También hice intervenciones en la API server estándar de Airwell para integrar el IoT Router, y realicé debugging completo de la app mobile React Native que no funcionaba - identificando problemas y enviando informes al equipo.

Stack Técnico

Frontend

React Native (debugging + informes para equipo Airwell)

Backend

Node.js
NestJS
TypeScript
MySQL
TypeORM
Redis
Bull
BullMQ
AWS Lambda
AWS EventBridge
OAuth 2.0
JWT
AES-256-GCM
Docker
Jest
Swagger
class-validator

Proyectos

1

IoT Router

Sistema de Plugins Multi-Fabricante + Comandos Programados

~15.000+
Líneas de Código
181
Archivos
12
Módulos
14
Entities

Capa de abstracción con arquitectura de plugins para integración con múltiples fabricantes IoT. Cada fabricante es un módulo aislado que implementa una interfaz común. Incluye sistema de comandos programados vía AWS Lambda + Bull Queue con retry automático.

Funcionalidades

01
Plugin Architecture

Sistema extensible donde cada fabricante es un plugin aislado implementando IPartnerPlugin

02
Discovery Handler

Descubrimiento automático de dispositivos por usuario y fabricante con extracción de metadatos

03
Data Handler

Lectura de status, mediciones (temperatura, humedad, CO2) con normalización de unidades

04
Command Handler

Ejecución de comandos (encender/apagar, ajustar temperatura) con retry automático

05
Scheduled Commands

AWS EventBridge + Lambda + Bull Queue para comandos programados con retry exponencial

06
OAuth 2.0 Flow

Flujo de autenticación completo con refresh automático de tokens cifrados

07
Rate Limiting

Algoritmo sliding window en Redis con reglas customizadas por fabricante

08
Adapter Pattern

Transformación de datos del formato fabricante hacia formato normalizado compatible con mobile

09
Configuration as Code

Configuración de socios y dispositivos vía YAML validado por JSON Schema

10
Entity Loaders

Repository pattern encapsulando acceso a datos con queries optimizadas

11
Interceptors & Guards

Logging estructurado y manejo de errores consistente en toda la aplicación

Design Patterns

Plugin Architecture
Handler Pattern
Strategy Pattern
Adapter Pattern
Queue Pattern
Repository Pattern
Factory Pattern
Decorator Pattern

Decisiones Técnicas

Redis para Rate Limiting

Distribuido, persistente, sliding window preciso, reutilizado para colas Bull

Bull Queue vs AWS SQS

Ya tenemos Redis, UI de monitoreo (Bull Board), menos latencia que SQS

AES-256-GCM en Base

Simplicidad operacional vs Vault dedicado, suficiente para el caso de uso

Desafíos & Soluciones

APIs Heterogéneas

Plugin pattern aísla complejidad - cada plugin habla el 'idioma' del fabricante

Rate Limiting Complejo

Configuración por fabricante + sliding window Redis + métricas para ajuste fino

Compatibilidad Mobile Legacy

Adapter pattern normaliza respuestas al formato esperado por la app antigua

Comandos Programados

AWS EventBridge → Lambda → Bull Queue con retry exponencial y auditoría

Gregory Praxedes | Full Stack Developer & UI/UX Specialist