Este repositório contém o código-fonte e a documentação para a construção de uma plataforma IoT onde o processamento e acesso de dados ocorrem de forma centralizada. A plataforma utiliza EMQX como gateway MQTT, NATS como barramento de mensageria entre microsserviços e um PostgreSQL/TimescaleDB único separado por schemas.
- Integração de gateways MQTT utilizando EMQX para a comunicação eficiente entre dispositivos IoT e a plataforma.
- Utilização do NATS como barramento de mensageria para gerenciar e distribuir eventos de forma escalável.
- Arquitetura de microserviços para processamento modular e distribuído de dados.
- EMQX: Gateway MQTT para comunicação eficiente entre dispositivos.
- NATS: Broker de mensageria para contratos assíncronos entre microsserviços.
- Golang: versão alvo
go1.24.3 linux/amd64. - PostgreSQL/TimescaleDB: Banco único da plataforma, separado por schemas.
A arquitetura alvo usa microsserviços em Go, NATS como barramento canônico e um único PostgreSQL/TimescaleDB com schemas separados por domínio de serviço.
Schemas criados no banco único:
authgatewaydevice_managerdata_management
Serviços configurados no docker-compose.yaml:
postgres: banco único com TimescaleDB habilitado.redis: apoio aoauth-api.nats: broker com JetStream habilitado.nats-ui: interface web para observar subjects e mensagens no NATS.emqx: broker MQTT de entrada dos dispositivos.auth-api: serviço Go de autenticação.device-manager: serviço Go de templates e dispositivos.gateway-emqx: serviço Go que conecta EMQX ao NATS.data-management: serviço Go que consome telemetria NATS e persiste no TimescaleDB.
Contratos NATS versionáveis ficam em contracts/nats/.
Os diretórios Java foram removidos. A arquitetura ativa do repositório usa microserviços Go em diretórios de primeiro nível.
Fluxo de telemetria ativo:
MQTT gateway.data/<device_uuid>
-> gateway-emqx
-> NATS iot.telemetry.received
-> data-management
-> data_management.devices_data
Monitoramento local de mensageria:
- NATS monitoring endpoint:
http://localhost:${NATS_MONITOR_PORT:-8222} - NATS UI:
http://localhost:${NATS_UI_PORT:-3131} - Credenciais padrão da NATS UI:
admin/admin123(ajuste no.env)
O dispositivo publica apenas o payload dinâmico. O gateway-emqx adiciona o envelope com event_id, device_id, template_id, schema_version, topic, timestamp e metadata.
auth/ # autenticação e ACL inicial
gateway-emqx/ # gateway EMQX -> NATS
device-manager/ # templates, fields e devices
data-management/ # consumidor de telemetria e persistência
Portas padrão:
auth-api:3000device-manager:3001gateway-emqxHTTP:3002data-management:3003gateway-emqxgRPC exhook:5051natsclient:4222natsmonitor:8222nats-ui:3131
Para configurar portas e credenciais locais:
cp .env.example .envPara validar a configuração do compose:
docker compose configPara subir a infraestrutura:
docker compose up --buildEste projeto está em desenvolvimento ativo. Novas funcionalidades, melhorias e correções estão sendo implementadas regularmente. Fique atento para atualizações futuras.
Para sugestões, dúvidas ou problemas relacionados ao projeto, entre em contato através do email diogosgn@gmail.com e huakson@gmail.com.
Nota: Este projeto está em constante evolução. Fique à vontade para contribuir, reportar problemas ou sugerir melhorias. Obrigado por fazer parte do desenvolvimento desta plataforma IoT!