IoT Sentinel
● AtivoPlataforma self-hosted para catalogar, organizar e monitorar dispositivos IoT e infraestrutura de rede.
IoT Sentinel
Plataforma open-source e self-hosted para catalogar, organizar e monitorar dispositivos IoT e infraestrutura de rede doméstica e corporativa.
O problema
Quem tem um homelab ou gerencia infraestrutura de IoT conhece o caos: câmeras IP, PLCs, switches gerenciáveis, Raspberry Pis espalhados por locais diferentes. Com o tempo, você perde o controle de tudo:
- Qual dispositivo tem qual IP agora (DHCP muda tudo sem avisar)
- Onde você anotou as credenciais de acesso (planilha? post-it? memória?)
- Se aquela câmera no galpão B está realmente online
- O que exatamente existe na VLAN
192.168.20.0/24
Sem um inventário centralizado, cada troubleshooting vira uma investigação arqueológica.
A solução
Uma plataforma web self-hosted que resolve isso com scanning automático via nmap, inventário organizado por locais/redes/VLANs, monitoramento de status em tempo real e credenciais criptografadas. Tudo rodando em containers Docker — um docker compose up -d e pronto.
Funcionalidades
- Scan de rede automático via nmap (com mock mode automático no Docker Desktop)
- Hierarquia Local → Rede/VLAN (CIDR) → Dispositivo
- Identidade estável via MAC address (sobrevive a mudanças de DHCP)
- 19 tipos de device pré-definidos (router, câmera, PLC, switch, etc.) com ícones e cores
- Credenciais criptografadas com AES-256-GCM, acessíveis apenas sob demanda
- Monitoramento real-time via WebSocket com health checks periódicos
- Histórico de status e cálculo de uptime (24h/7d/30d)
- Regras de notificação (status change, offline duration, new discovery)
- Grupos transversais com ícones customizados
- Channels para modelar dispositivos multi-output (PLCs com 26+ saídas)
- Network map com visualização em topologia estrela (React Flow)
- Backup/restore com senha e re-encriptação de credenciais
- Setup wizard no primeiro boot (criação de admin + idioma)
- i18n completo pt-BR e English (via next-intl)
- Dark theme inspirado em Grafana/Datadog
Arquitetura
┌─────────────────────────────────────────────────────┐
│ Browser │
└───────────────────────┬─────────────────────────────┘
│ HTTP / WebSocket
▼
┌─────────────────────────────────────────────────────┐
│ Frontend (Next.js 14, App Router, Tailwind v4) │
│ :9000 → next-intl i18n (pt-BR / en) │
└───────────────────────┬─────────────────────────────┘
│ REST API / WS
▼
┌─────────────────────────────────────────────────────┐
│ API (NestJS 10, TypeScript) │
│ :9001 → /api/v1/* Swagger: /api/docs │
└────────┬────────────────────────┬───────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────────────────┐
│ MongoDB :9017 │ │ Redis :9079 │
│ (persistência) │ │ (filas Bull + pub/sub) │
└─────────────────┘ └──────────────┬──────────────┘
│ Bull jobs
▼
┌─────────────────────────────┐
│ Worker (Python 3.11, nmap) │
│ network_mode: host │
│ scan + health check │
└─────────────────────────────┘
Quick Start
# 1. Baixar o compose file
curl -O https://raw.githubusercontent.com/mauricioj/iot-sentinel/main/docker-compose.prod.yml
# 2. Subir tudo
docker compose -f docker-compose.prod.yml up -d
# 3. Acessar
# http://localhost:9000 → Setup wizard → Criar admin → Pronto
MongoDB e Redis já estão inclusos. Zero dependências externas.
Série de posts
Documentei todo o projeto em uma série de 8 posts: