Sistema inteligente de monitoramento e gestão de rede hídrica com foco em:
- Redução de dados através de compressão inteligente (delta logging + deadband filtering)
- Detecção automática de eventos (abastecimento, consumo, vazamento)
- Rastreabilidade completa (sensor/usuário/sistema + timestamp)
- Visualização espacial com mapas interativos
- Relatórios diários automáticos às 06:00
- 6 reservatórios (consumo, incêndio, elevados)
- 5-10 bombas de recalque
- ~20 válvulas de controle
- Sensores ultrassônicos (ESP32) lendo a cada 30s
- Leituras manuais de hidrômetros
- ESP32-C3 Super Mini: baixo custo, WiFi integrado, ideal para sensores distribuídos
- Arduino Nano: controle de atuadores e sensores secundários
- Sensores: HC-SR04 (ultrassom), sensores de pressão, vazão
- ESP-NOW: comunicação mesh entre dispositivos, baixa latência
- WiFi: envio de dados ao servidor central
- Ethernet: conexão redundante para sistemas críticos
- I²C/1-Wire: comunicação com sensores locais
- PostgreSQL 13+ com extensões:
- TimescaleDB: otimização para séries temporais
- PostGIS: suporte geoespacial (opcional)
- PL/pgSQL: lógica de compressão e processamento
- Node.js/Python: API REST e processamento assíncrono
- Leaflet.js: mapas interativos com posicionamento de elementos
- Chart.js/D3.js: gráficos em tempo real
- WebSocket: atualização live de estados
- Armazena TODAS as leituras brutas
- Campos: sensor_id, timestamp, valor_bruto, origem
- Preserva histórico completo para auditoria
- Média: 2880 registros/dia por sensor (30s)- Armazena apenas MUDANÇAS SIGNIFICATIVAS
- Algoritmo:
* Calcula mediana de N leituras (padrão: 11)
* Aplica deadband (tolerância: ±2cm ou configurável)
* Se estável: atualiza timestamp, não cria novo registro
* Se mudança: insere novo evento
- Redução: ~90% de dados
- Resultado: 5-10 eventos relevantes/dia┌─────────────┐
│ ELEMENTO │ ← Reservatórios, Bombas, Válvulas
├─────────────┤
│ id │
│ nome │
│ tipo │
│ coord_x/y/z │ ← Posicionamento espacial
│ lat/lon │ ← Geolocalização
└─────────────┘
│
├──→ CONEXAO (grafo hidráulico)
├──→ SENSOR (leituras)
├──→ ATUADOR (controle)
├──→ ESTADO_ELEMENTO (histórico)
└──→ COORDENADA (visualização)
Condições:
- ΔVolume > +50L
- Bomba = ON
- Válvula entrada = ABERTA
Ação: Registra início, fim, volume total, duração
Condições:
- Queda lenta contínua (> 1h)
- Bombas = OFF
- Válvulas consumo = FECHADAS
- Taxa > limiar (ex: -15 L/h)
Ação: Alerta, cálculo de perda estimada
Condições:
- Queda correlacionada com demanda
- Bombas consumo = ON ou padrão horário
Ação: Registra volume consumido
Condições:
- Oscilação > 3× desvio padrão normal
- Valores fora do range físico
Ação: Marca para calibração
[ESP32] --30s--> [leituras_raw] --trigger--> [proc_process_sensor_window()]
│
├─ calcula mediana
├─ verifica deadband
├─ detecta eventos
└─ atualiza [leituras_processadas]
│
└─> [Dashboard em Tempo Real]
└─> [Relatório Diário 06:00]
- Níveis de todos os reservatórios
- Estados de bombas e válvulas
- Alertas instantâneos
- Histórico de eventos
- Visualização espacial de todos os elementos
- Cores por estado (verde=OK, amarelo=alerta, vermelho=crítico)
- Conexões hidráulicas desenhadas
- Clique para detalhes e histórico
Cada registro contém:
- fonte: 'sensor' | 'usuario' | 'sistema'
- autor: identificação (node_id, username, processo)
- datetime: timestamp preciso
- modo: 'automatica' | 'manual'- Interface para leitura manual
- Comparação sensor vs. régua física
- Ajuste de offset e fator
- Log de calibrações
Conteúdo:
- Volume total consumido
- Volume total abastecido
- Eventos detectados
- Anomalias e alertas
- Níveis mín/máx de cada reservatório
- Tempo de operação de bombas
- Perda estimada (vazamentos)
Formato: PDF + email + inserção em BD
O sistema está pronto para deploy via Docker! Veja o DOCKER_GUIDE.md para instruções completas.
# No PC atual (desenvolvimento)
./backup.sh /media/pendrive
# Copie para o PC de destino e execute
./restore.sh aguada_backup_YYYYMMDD_HHMMSS.tar.gz
# Pronto! Sistema rodando em:
# - Dashboard: http://localhost
# - API: http://localhost:3000
# - PostgreSQL: localhost:5432./deploy.sh start # Iniciar
./deploy.sh stop # Parar
./deploy.sh restart # Reiniciar
./deploy.sh logs # Ver logs
./deploy.sh status # Status dos containersHardware já disponível (sem necessidade de compra):
- ✅ 2× ESP32 + HC-SR04 ultrassom
- ✅ 1× Arduino Nano + Ethernet + HC-SR04
- ✅ 1× ESP32-C3 Super Mini (gateway WiFi)
- ✅ 1× ESP8266 + ENC28J60 (gateway backup)
Firmwares prontos em /opt/lampp/htdocs/aguada/firmware/ (somente leitura):
- NODE-01-CON: ESP32 com ESP-NOW (nós remotos)
- NODE-02-CAV: Arduino Nano + Ethernet (crítico)
- GATEWAY_WIFI: ESP32 gateway (WiFi + ESP-NOW)
📖 Veja FIRMWARES_DISPONIVEIS.md para detalhes completos.
- Instalar Docker no PC de destino (se não tiver)
- Executar
./deploy.sh start(inicia PostgreSQL + Backend + Frontend) - Copiar e adaptar firmwares de
/aguada/firmware/(apenas URLs/IPs) - Configurar ESP32 com IP do servidor Docker
- Testar conectividade sensor → API
| Dispositivo | Uso | Protocolo | Custo Aprox |
|---|---|---|---|
| ESP32-C3 Super Mini | Sensores nivel | WiFi/ESP-NOW | R$ 15 |
| Arduino Nano | Controle local | I²C/1-Wire | R$ 25 |
| HC-SR04 | Ultrassom | Digital | R$ 8 |
| Sensor Pressão | Rede | Analógico | R$ 35 |
[Servidor Central]
│ WiFi
┌──────────┼──────────┐
│ │ │
[ESP32_RES1] [ESP32_RES2] [ESP32_RES3]
│ESP-NOW │ESP-NOW │
[ESP32_RES4] [ESP32_RES5] [ESP32_RES6]
// Mediana de 11 leituras para filtrar ruído
float mediana = calcularMediana(leituras, 11);
// Enviar apenas se mudança > deadband
if (abs(mediana - ultimaLeitura) > DEADBAND) {
enviarDados(mediana);
}- Deep sleep entre leituras (30s)
- Wake on timer
- Consumo: ~5mA em sleep, ~80mA ativo
- Fallback WiFi → ESP-NOW
- Buffer local (últimas 100 leituras)
- Ressincronização automática
- Função de mediana
- Algoritmo de deadband
- Detecção de eventos
- Triggers SQL
- ESP32 → API → BD
- Compressão automática
- Geração de relatório
- Calibração manual
- 7 dias de monitoramento contínuo
- Validação de vazamentos detectados
- Comparação hidrômetro vs. sensor
- Stress test (1000 leituras simultâneas)
| Semana | Atividade |
|---|---|
| 1-2 | Setup banco de dados + API básica |
| 3 | Firmware ESP32 + testes bancada |
| 4 | Instalação de 2 sensores piloto |
| 5-6 | Dashboard e visualização |
| 7 | Sistema de eventos e relatórios |
| 8 | Implantação completa (6 reservatórios) |
| 9+ | Monitoramento e ajustes finos |
- Mensal: Verificação física de sensores
- Trimestral: Calibração com régua
- Semestral: Limpeza de sensores ultrassônicos
- Alertas automáticos por email/Telegram
- Dashboard de saúde dos sensores
- Log de erros centralizado
- Banco: PostgreSQL 13 em servidor local
- Storage: ~500 MB/ano (com compressão)
- CPU: mínimo (triggers leves)
- Migrar para TimescaleDB
- Particionamento por mês
- Compressão nativa TimescaleDB
- Cluster multi-node (se necessário)
6× ESP32-C3 Super Mini = R$ 90
6× Sensor HC-SR04 = R$ 48
6× Fonte 5V + case = R$ 120
Cabeamento e conectores = R$ 80
TOTAL = R$ 338
- PostgreSQL: gratuito (open source)
- Backend Node.js: gratuito
- Frontend: gratuito
- Servidor: existente
- Redução de 90% em armazenamento
- Detecção precoce de vazamentos → economia de água
- Automatização de relatórios → redução de horas/homem
| Desafio | Solução |
|---|---|
| Ruído em leituras ultrassônicas | Mediana de 11 amostras + deadband |
| Leituras falsas de vazamento | Correlação com estado de bombas/válvulas |
| Falta de energia em sensores | Deep sleep + buffer local |
| Perda de conectividade WiFi | Fallback ESP-NOW mesh |
| Calibração deriva ao longo do tempo | Interface de calibração manual + log |
- Modelo de dados completo
- Firmware ESP32 funcional
- API REST básica
- Dashboard inicial
- Machine Learning para predição de falhas
- App mobile (React Native)
- Integração com sistema de manutenção
- Alertas inteligentes (Telegram/WhatsApp)
- Gêmeo digital completo (simulação)
- Otimização automática de bombas (economia energia)
- Integração com sistema financeiro (faturamento)
- Expansão para gestão de energia elétrica
aguadaPy/
├── database/
│ ├── schema.sql # Estrutura completa do BD
│ ├── functions.sql # PL/pgSQL (compressão, eventos)
│ ├── triggers.sql # Triggers automáticos
│ ├── seeds.sql # Dados de exemplo
│ └── migrations/
├── firmware/
│ ├── esp32_nivel/ # Sensor de nível
│ ├── esp32_gateway/ # Gateway central
│ └── arduino_atuador/ # Controle de bombas/válvulas
├── backend/
│ ├── src/
│ │ ├── api/ # Endpoints REST
│ │ ├── services/ # Lógica de negócio
│ │ ├── models/ # Models do BD
│ │ └── jobs/ # Relatório diário, processamento
│ ├── config/
│ └── tests/
├── frontend/
│ ├── src/
│ │ ├── components/ # Componentes React/Vue
│ │ ├── pages/ # Páginas principais
│ │ ├── services/ # API client
│ │ └── utils/ # Helpers
│ └── public/
├── docs/
│ ├── api.md # Documentação da API
│ ├── manual_operacao.md # Manual do operador
│ └── manual_tecnico.md # Manual técnico
├── scripts/
│ ├── backup.sh # Backup automático BD
│ ├── deploy.sh # Deploy production
│ └── relatorio_diario.py # Geração de relatório
└── README.md
Este é um sistema em desenvolvimento contínuo. Sugestões de melhorias:
- Abrir issue descrevendo o problema/melhoria
- Fork do projeto
- Criar branch com feature
- Pull request com descrição detalhada
MIT License - uso livre para fins educacionais e comerciais
Sistema desenvolvido para gestão hídrica inteligente
Documentação completa: /docs
Issues: GitHub Issues
Email: [email protected]
Versão: 1.0.0
Última atualização: 2025-10-30
Status: Em desenvolvimento ativo