Voltar aos projetos
Airwell IoT Router

Airwell IoT Router

Camada de Abstração para Dispositivos IoT

Função: Backend Developer
Período: Novembro 2024 - Atual
Em Desenvolvimento
Visitar projeto
Cliente: Airwell (via House of Coding / Amiltone)

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

React Native (debugging + relatórios para equipe 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

Projetos

1

IoT Router

Sistema de Plugins Multi-Fabricante + Comandos Agendados

~15.000+
Linhas de Código
181
Arquivos
12
Módulos
14
Entities

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

01
Plugin Architecture

Sistema extensível onde cada fabricante é um plugin isolado implementando IPartnerPlugin

02
Discovery Handler

Descoberta automática de dispositivos do usuário em cada fabricante com extração de metadados

03
Data Handler

Leitura de status, medições (temperatura, humidade, CO2) com normalização de unidades

04
Command Handler

Execução de comandos (ligar/desligar, ajustar temperatura) com retry automático

05
Scheduled Commands

AWS EventBridge + Lambda + Bull Queue para comandos agendados com retry exponencial

06
OAuth 2.0 Flow

Fluxo completo de autenticação com refresh automático de tokens criptografados

07
Rate Limiting

Sliding window algorithm no Redis com regras customizadas por fabricante

08
Adapter Pattern

Transformação de dados do formato do fabricante para formato normalizado compatível com mobile

09
Configuration as Code

Configuração de parceiros e dispositivos via YAML validado por JSON Schema

10
Entity Loaders

Repository pattern encapsulando acesso a dados com queries otimizadas

11
Interceptors & Guards

Logging estruturado e tratamento de erros consistente em toda aplicação

Design Patterns

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

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

Gregory Praxedes | Full Stack Developer & UI/UX Specialist