Airwell IoT Router
Capa de Abstracción para Dispositivos IoT
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
Backend
Proyectos
IoT Router
Sistema de Plugins Multi-Fabricante + Comandos Programados
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
Plugin Architecture
Sistema extensible donde cada fabricante es un plugin aislado implementando IPartnerPlugin
Discovery Handler
Descubrimiento automático de dispositivos por usuario y fabricante con extracción de metadatos
Data Handler
Lectura de status, mediciones (temperatura, humedad, CO2) con normalización de unidades
Command Handler
Ejecución de comandos (encender/apagar, ajustar temperatura) con retry automático
Scheduled Commands
AWS EventBridge + Lambda + Bull Queue para comandos programados con retry exponencial
OAuth 2.0 Flow
Flujo de autenticación completo con refresh automático de tokens cifrados
Rate Limiting
Algoritmo sliding window en Redis con reglas customizadas por fabricante
Adapter Pattern
Transformación de datos del formato fabricante hacia formato normalizado compatible con mobile
Configuration as Code
Configuración de socios y dispositivos vía YAML validado por JSON Schema
Entity Loaders
Repository pattern encapsulando acceso a datos con queries optimizadas
Interceptors & Guards
Logging estructurado y manejo de errores consistente en toda la aplicación
Design Patterns
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