Airwell IoT Router
Camada de Abstração para Dispositivos IoT
Visão Geral
Contexto
A Airwell é uma empresa de climatização que oferece dispositivos IoT (ar-condicionado, termostatos, sensores) controlados via aplicativo mobile. Para conectar esses dispositivos de múltiplos fabricantes, a empresa utilizava um serviço terceirizado que atuava como intermediário. O problema: custos recorrentes de licenciamento por dispositivo, vendor lock-in, latência adicional, e impossibilidade de customizar sem depender do fornecedor.
Solução
Atualmente a empresa utiliza uma API externa terceirizada para conectar os dispositivos, gerando altos custos mensais. O IoT Router é uma camada de abstração que conecta diretamente às APIs dos fabricantes de dispositivos, normaliza os diferentes formatos para uma API unificada, mantém compatibilidade com o formato esperado pelo mobile legado, e escala para suportar novos fabricantes via sistema de plugins. A solução vai eliminar esses custos e dar independência tecnológica total à empresa.
Meu Papel
Assumi o projeto iniciado por um colega da Amiltone e realizei uma refatoração massiva, definindo boas práticas e adaptando a arquitetura para escalar. Projetei a arquitetura de plugins para múltiplos fabricantes, desenvolvi sistema de rate limiting distribuído com Redis, e integrei AWS Lambda para comandos agendados. Também fiz intervenções na API server padrão da Airwell para integrar o IoT Router, e realizei debugging completo do app mobile React Native que não estava funcionando - identificando problemas e enviando relatórios para a equipe.
Stack Técnica
Frontend
Backend
Projetos
IoT Router
Sistema de Plugins Multi-Fabricante + Comandos Agendados
Camada de abstração com arquitetura de plugins para integração com múltiplos fabricantes de IoT. Cada fabricante é um módulo isolado que implementa uma interface comum. Inclui sistema de comandos agendados via AWS Lambda + Bull Queue com retry automático.
Features
Plugin Architecture
Sistema extensível onde cada fabricante é um plugin isolado implementando IPartnerPlugin
Discovery Handler
Descoberta automática de dispositivos do usuário em cada fabricante com extração de metadados
Data Handler
Leitura de status, medições (temperatura, humidade, CO2) com normalização de unidades
Command Handler
Execução de comandos (ligar/desligar, ajustar temperatura) com retry automático
Scheduled Commands
AWS EventBridge + Lambda + Bull Queue para comandos agendados com retry exponencial
OAuth 2.0 Flow
Fluxo completo de autenticação com refresh automático de tokens criptografados
Rate Limiting
Sliding window algorithm no Redis com regras customizadas por fabricante
Adapter Pattern
Transformação de dados do formato do fabricante para formato normalizado compatível com mobile
Configuration as Code
Configuração de parceiros e dispositivos via YAML validado por JSON Schema
Entity Loaders
Repository pattern encapsulando acesso a dados com queries otimizadas
Interceptors & Guards
Logging estruturado e tratamento de erros consistente em toda aplicação
Design Patterns
Decisões Técnicas
Redis para Rate Limiting
Distribuído, persistente, sliding window preciso, reutilizado para filas Bull
Bull Queue vs AWS SQS
Já temos Redis, UI de monitoramento (Bull Board), menos latência que SQS
AES-256-GCM no Banco
Simplicidade operacional vs Vault dedicado, suficiente para o caso de uso
Desafios & Soluções
APIs Heterogêneas
Plugin pattern isola complexidade - cada plugin fala a 'língua' do fabricante
Rate Limiting Complexo
Configuração por fabricante + sliding window no Redis + métricas para ajuste fino
Compatibilidade Mobile Legado
Adapter pattern normaliza respostas no formato esperado pelo app antigo
Comandos Agendados
AWS EventBridge → Lambda → Bull Queue com retry exponencial e auditoria