Hardware Aera+ ✅
Dispositivo IoT (ESP32) para automação de aeradores, telemetria e controle remoto. Produto manufaturado.
O Ecossistema AeraPlus é uma solução completa que integra software de gestão com hardware IoT para revolucionar a aquicultura. Esta seção apresenta o roadmap de desenvolvimento e a visão técnica do produto.
Principais Recursos:
Recursos:
Recursos:
Lançamento Inicial:
┌─────────────────────────────────────────────────────────────────┐│ ECOSSISTEMA AERAPLUS │├─────────────────────────────────────────────────────────────────┤│ ││ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ││ │ App Web │ │ App Mobile │ │ Aera+ HW │ ││ │ (Gestão) │◄──►│ (Operação) │◄──►│ (IoT) │ ││ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ ││ │ │ │ ││ └───────────────────┼───────────────────┘ ││ ▼ ││ ┌──────────────┐ ││ │ API REST │ ││ │ (FastAPI) │ ││ └──────────────┘ ││ │└─────────────────────────────────────────────────────────────────┘Hardware Aera+ ✅
Dispositivo IoT (ESP32) para automação de aeradores, telemetria e controle remoto. Produto manufaturado.
API Backend ✅
API REST completa com FastAPI, PostgreSQL, autenticação JWT e sistema Shadow State para IoT.
App Mobile
Aplicativo offline-first para operação diária no campo, sincronizando quando há conexão.
| Termo | Definição |
|---|---|
| Biomassa | Peso total vivo dentro de um viveiro (Kg) |
| FCA | Fator de Conversão Alimentar - relação entre alimento ofertado e ganho de peso |
| GPD | Ganho de Peso Diário |
| Arraçoamento | Ato de alimentar os animais |
| OD | Oxigênio Dissolvido (mg/L) |
| Despesca | Retirada dos animais para comercialização |
| Termo | Definição |
|---|---|
| Multitenancy | Capacidade do software servir múltiplos clientes isoladamente |
| Shadow State | Padrão onde target_status (desejado) e current_status (real) sincronizam via heartbeat |
| Offline-First | Arquitetura onde funcionar sem internet é a regra |
| OTA | Over-The-Air - atualização remota de firmware |
| Watchdog | Mecanismo que reinicia o sistema se travar |
| Control Point | Dispositivo ESP32 que gerencia aeração de múltiplos viveiros |
O Aera+ é o dispositivo IoT que forma a base do ecossistema, permitindo automação e telemetria de aeradores em fazendas aquícolas.
| ID | Especificação | Status |
|---|---|---|
| HWR.MCU.001 | Core: ESP32-WROOM-32U com conector IPEX para antena externa | ✅ |
| HWR.MCU.002 | Memória: Mínimo 4MB Flash para OTA e File System | ✅ |
| HWR.COM.001 | LoRa (Opcional): Slot para módulo SX1276 via SPI | ✅ |
| HWR.COM.002 | Antena: Conector SMA para antena 5dBi+ | ✅ |
| ID | Especificação | Status |
|---|---|---|
| HWR.PWR.001 | Relés: 30A (SLA-12VDC-SL-C) para aeradores até 2CV | ✅ |
| HWR.PWR.002 | Snubber: Circuito RC/Varistor para proteção de contatos | ✅ |
| HWR.PWR.003 | Fonte: AC/DC Full Range (90-240V) com proteção contra surtos | ✅ |
| HWR.PWR.004 | Terminais: Bornes Kre/Sindal para cabos 4-6mm | ✅ |
| ID | Especificação | Status |
|---|---|---|
| HWR.SENS.001 | Corrente: TC não-invasivo com precisão ±2% | ✅ |
| HWR.SENS.002 | Analógico: Entrada 4-20mA para sondas de OD | ✅ |
| HWR.SENS.003 | Digital: RS-485 (Modbus RTU) para inversores/sondas | ✅ |
| HWR.SENS.004 | RTC: DS3231 com bateria CR2032 backup | ✅ |
| ID | Especificação | Status |
|---|---|---|
| HWR.MECH.001 | Case: ABS/Policarbonato IP65 | ✅ |
| HWR.MECH.002 | Térmica: Dissipação para ambiente >35°C | ✅ |
| HWR.ELEC.001 | Entrada: Fusível + Varistor (MOV) | ✅ |
graph LR A[ESP32 Boot] --> B{Modo AP/BLE} B --> C[Recebe SSID/Senha] C --> D[Conecta Wi-Fi] D --> E[Heartbeat Loop] E --> F{Envia current_status} F --> G[Recebe target_status] G --> H{target ≠ current?} H -->|Sim| I[Executa Comando] H -->|Não| E I --> E| ID | Requisito | Status |
|---|---|---|
| FWR.CONN.001 | Provisioning: Modo AP ou BLE para configuração inicial | ✅ |
| FWR.CONN.002 | Reconexão: Backoff exponencial (5s, 10s, 30s, 1min…) | ✅ |
| FWR.CONN.003 | Heartbeat: POST /devices/heartbeat com device_id e current_status | ✅ |
// Request (ESP32 → Backend)POST /api/v1/devices/heartbeat{ "device_id": "AERA_ESP32_001", "current_status": "OFF"}
// Response (Backend → ESP32){ "target_status": "ON"}| ID | Requisito | Descrição | Status |
|---|---|---|---|
| FWR.CTRL.001 | Shadow State | ESP32 compara target_status com estado atual e executa | ✅ |
| FWR.CTRL.002 | Fail-Safe | Estado seguro configurável ao reiniciar | ✅ |
| FWR.CTRL.003 | Proteção Sobrecarga | Desliga se corrente > 150% por 5s | ✅ |
| FWR.CTRL.004 | Proteção Ocioso | Alerta se relé ligado mas corrente < 0.5A | ✅ |
| ID | Requisito | Status |
|---|---|---|
| COMP.001 | Isolamento Galvânico: ESP32 isolado da potência via optoacopladores | ✅ |
| COMP.002 | LEDs Indicadores: Power (Vermelho), Wi-Fi (Azul), Relé (Verde) | ✅ |
| RNF.HW.001 | MTBF: Hardware com 20.000h de operação contínua | ✅ |
| RNF.FW.001 | Watchdog: Reinício em < 2s se travar | ✅ |
| Tecnologia | Descrição |
|---|---|
| Framework | FastAPI (Python 3.12+) |
| Banco de Dados | PostgreSQL |
| ORM | SQLAlchemy 2.0 |
| Autenticação | JWT (JSON Web Tokens) |
| Validação | Pydantic v2 |
| IoT Protocol | HTTP/REST (Shadow State) |
User (Owner/Operator) └── Farm └── Control Point (ESP32 Device) └── Pond(s) └── Aerator(s)| ID | Requisito | Status |
|---|---|---|
| RF.CORE.001 | Autenticação JWT - Login via e-mail/senha com hash BCrypt | ✅ |
| RF.CORE.002 | Controle de Sessão - Token expira em 60min (ou 30 dias com “Remember Me”) | ✅ |
| RF.CORE.003 | Token Blacklist - Logout invalida token imediatamente | ✅ |
| RF.CORE.004 | Perfis RBAC - Admin (total), Owner (fazendas próprias), Operator (acesso limitado) | ✅ |
| RF.CORE.005 | Múltiplas Fazendas - Um usuário pode ter N fazendas com troca de contexto | ✅ |
| ID | Requisito | Status |
|---|---|---|
| RF.FARM.001 | CRUD Fazendas - Criar, listar, atualizar, deletar | ✅ |
| RF.FARM.002 | Endereço Georreferenciado - Latitude/longitude opcionais | ✅ |
| RF.FARM.003 | Validação Brasileira - CEP (8 dígitos), Estados (2 letras) | ✅ |
| RF.FARM.004 | Cascade Delete - Deletar fazenda remove viveiros e control points | ✅ |
| ID | Requisito | Status |
|---|---|---|
| RF.POND.001 | CRUD Viveiros - Código único, tipo (NURSERY/FATTENING) | ✅ |
| RF.POND.002 | Dimensões - Área (m²), profundidade (m), coordenadas | ✅ |
| RF.POND.003 | Vinculação - Viveiro pode ser vinculado a Control Point | ✅ |
| RF.POND.004 | Contagem Aeradores - Número de aeradores no viveiro | ✅ |
| ID | Requisito | Status |
|---|---|---|
| RF.CP.001 | Shadow State - target_status (desejado) vs current_status (real) | ✅ |
| RF.CP.002 | Comandos - turn-on e turn-off atualizam target_status | ✅ |
| RF.CP.003 | Heartbeat - ESP32 envia estado atual e recebe estado desejado | ✅ |
| RF.CP.004 | Device ID - Identificador único do dispositivo ESP32 | ✅ |
| RF.CP.005 | Last Heartbeat - Timestamp da última comunicação do device | ✅ |
| ID | Requisito | Status |
|---|---|---|
| RF.SCHED.001 | 1 Schedule por Control Point - Upsert behavior | ✅ |
| RF.SCHED.002 | Ações - ON ou OFF no horário especificado | ✅ |
| RF.SCHED.003 | Padrões de Repetição - ONCE, DAILY, WEEKLY, MONTHLY, YEARLY | ✅ |
| RF.SCHED.004 | Dias da Semana - Para padrão WEEKLY (1=Seg a 7=Dom) | ✅ |
| RF.SCHED.005 | Toggle Ativo - Schedules podem ser desativados sem deletar | ✅ |
| ID | Requisito | Status |
|---|---|---|
| RF.ALERT.001 | Tipos - POWER_FAILURE, LOW_OXYGEN, HIGH_TEMPERATURE, DEVICE_OFFLINE | ✅ |
| RF.ALERT.002 | Status - ACTIVE ou RESOLVED | ✅ |
| RF.ALERT.003 | Timestamps - triggered_at e resolved_at | ✅ |
| RF.ALERT.004 | Log Automático - Criação e resolução de alertas são logados | ✅ |
| ID | Requisito | Status |
|---|---|---|
| RF.LOG.001 | Log Automático - Comandos ON/OFF, alertas criados/resolvidos | ✅ |
| RF.LOG.002 | Estrutura - entity_type, entity_id, entity_name, action, user_id, timestamp | ✅ |
| RF.LOG.003 | Imutabilidade - Logs são read-only | ✅ |
| ID | Requisito | Prioridade |
|---|---|---|
| RF.EST.001 | Cadastro de Produtos - Hierarquia: Categoria > Item > Unidade de Medida | Alta |
| RF.EST.002 | Múltiplos Almoxarifados - Locais de estoque virtuais | Média |
| RF.EST.003 | Importação NFe - Entrada via XML para estoque e contas a pagar | Média |
| RF.EST.004 | Movimentação Interna - Transferência entre almoxarifados | Média |
| RF.EST.005 | Custo Médio Ponderado - Recálculo do custo unitário a cada compra | Alta |
| ID | Requisito | Prioridade |
|---|---|---|
| RF.PROD.001 | Abertura de Lote - Data, quantidade, biomassa, peso médio, origem | Alta |
| RF.PROD.002 | Custo de Aquisição - Vinculação ao centro de custo do viveiro | Alta |
| RF.PROD.003 | Rastreabilidade - ID único (ex: LOTE-2025-VIV01-01) | Alta |
| ID | Requisito | Descrição |
|---|---|---|
| RF.OPER.001 | Recomendação Inteligente | Sistema exibe quanto arraçoar baseado em: (Biomassa × % Tabela) ajustado por temperatura/OD |
| RF.OPER.002 | Registro de Arraçoamento | Input da quantidade efetivamente fornecida |
| RF.OPER.003 | Baixa Automática | Arraçoamento dispara redução no estoque vinculado |
| RF.OPER.004 | Biometria | Pesagem amostral com cálculo de média, desvio padrão e CV |
| RF.OPER.005 | Projeção de Crescimento | Estimativa de peso baseada no GPD histórico/teórico |
| RF.OPER.006 | Qualidade de Água | Input manual ou via dados do Control Point (OD, etc.) |
| RF.OPER.007 | Mortalidade | Registro que abate do “Saldo Vivo” |
| RF.OPER.008 | Diário de Ocorrências | Campo texto/foto para anomalias |
| ID | Requisito | Descrição |
|---|---|---|
| RF.MOV.001 | Transferência (Repique) | Mover biomassa entre viveiros carregando custos proporcionais |
| RF.MOV.002 | Classificação | Divisão em categorias (Grandes, Médios, Pequenos) |
| RF.MOV.003 | Tratamentos Sanitários | Registro com alerta de período de carência |
| ID | Requisito | Prioridade |
|---|---|---|
| RF.COM.001 | Programação de Despesca | Agenda de retirada |
| RF.COM.002 | Registro Real | Pesagem do frigorífico/comprador |
| RF.COM.003 | Confronto de Dados | Estimado vs Real (precisão da biometria) |
| RF.COM.004 | Fechamento de Ciclo | Encerramento com DRE final |
| ID | Requisito | Descrição |
|---|---|---|
| RF.FIN.001 | Contas a Pagar/Receber | Gestão financeira clássica |
| RF.FIN.002 | Plano de Contas | Estrutura personalizável de categorias |
| RF.FIN.003 | Rateio Automático | Custos diretos (ração) e indiretos (energia, folha) |
| RF.FIN.004 | Depreciação | Cadastro de ativos fixos no custo do kg produzido |
┌─────────────┐ Heartbeat ┌─────────────┐ REST API ┌─────────────┐│ ESP32 │────────────►│ Backend │────────────►│ App/Web ││ (Campo) │◄────────────│ (FastAPI) │◄────────────│ (Usuário) │└─────────────┘ target_ └──────┬──────┘ Commands └─────────────┘ status │ ▼ ┌─────────────┐ │ PostgreSQL │ └─────────────┘| ID | Integração | Descrição |
|---|---|---|
| INT.001 | Dados Ambientais | Control Point escreve em historico_qualidade_agua automaticamente |
| INT.002 | Custo Energético | Consumo (kWh) × Tarifa (R$) = Custo automático no ciclo |
| INT.003 | Motor de Regras | ”SE OD < 3.0 ENTÃO target_status = ON para Control Points 1 e 2” |
| ID | Requisito | Descrição |
|---|---|---|
| SWR.INT.001 | Pareamento QR | QR Code vincula device_id à fazenda |
| SWR.INT.002 | Calibração Remota | Interface para calibrar sensores |
| SWR.AUTO.001 | Motor de Regras | Automação baseada em condições ambientais |
| SWR.AUTO.002 | Modo Manutenção | Bloqueia acionamento remoto temporariamente |
| SWR.VIEW.001 | Real-Time | WebSocket para status em < 500ms |
| SWR.VIEW.002 | Gráficos | Consumo kWh vs Oxigênio Dissolvido |
| ID | Requisito | Descrição |
|---|---|---|
| RF.BI.001 | Dashboard Operacional | Biomassa total, arraçoamento do dia, alertas críticos |
| RF.BI.002 | Análise de Coortes | Comparação entre ciclos históricos |
| RF.BI.003 | Previsão de Faturamento | Valor do estoque vivo baseado em preço de mercado |
| ID | Requisito | Status |
|---|---|---|
| RNF.001 | Heartbeat < 100ms | Endpoint otimizado para IoT |
| RNF.002 | SLA 99.5% | Backend com alta disponibilidade |
| RNF.003 | Offline-First Mobile | App com SQLite/Realm e fila de sync |
| RNF.004 | TLS 1.2+ | Dados em trânsito criptografados |
| RNF.005 | Connection Pooling | Conexões recicladas por ambiente |
| ID | Requisito | Status |
|---|---|---|
| SR.001 | JWT Authentication | Todas as rotas protegidas (exceto login/register/heartbeat) |
| SR.002 | BCrypt Password Hashing | Senhas nunca em plain text |
| SR.003 | Token Blacklisting | Logout invalida token imediatamente |
| SR.004 | CORS Configurável | Dev: *, Prod: domínios específicos |
| SR.005 | Input Validation | Pydantic v2 em todas as entradas |
| ID | Regra | Status |
|---|---|---|
| BR.001 | 1 Schedule por Control Point - Upsert substitui schedule existente | ✅ |
| BR.002 | Shadow State Sync - target_status ≠ current_status = out of sync | ✅ |
| BR.003 | Cascade Delete - Deletar fazenda remove todos os recursos filhos | ✅ |
| BR.004 | Device Registration - Heartbeat de device_id desconhecido retorna 404 | ✅ |
| BR.005 | Log Automático - Comandos ON/OFF e alertas são registrados automaticamente | ✅ |
| BR.006 | Validação Telefone BR - Formato +55 seguido de 10-11 dígitos | ✅ |
| BR.007 | Days of Week - Para WEEKLY: valores 1-7 sem duplicatas | ✅ |
Dez 2025 ████████████████████████████████ Hardware Aera+ v1 ✅Dez 2025 ████████████████████████████████ API Core v1.0 ✅Q1 2026 ████████████████░░░░░░░░░░░░░░░░ App Web + Melhorias APIQ2 2026 ░░░░░░░░████████████████░░░░░░░░ Gestão + EstoqueQ3 2026 ░░░░░░░░░░░░░░░░████████████████ Mobile Offline-FirstQ4 2026 ░░░░░░░░░░░░████████████████████ Integração AvançadaQ1 2027 ░░░░░░░░░░░░░░░░░░░░████████████ BI + Analytics| Versão | Data | Escopo | Status |
|---|---|---|---|
| v1.0 | Dez 2025 | Hardware Aera+ - Produção | ✅ Concluído |
| v1.0 | Dez 2025 | API Core - Users, Farms, Ponds, Control Points, Schedules, Alerts, Logs | ✅ Concluído |
| v1.5 | Q1 2026 | App Web, Push Notifications, WebSocket Real-Time | 🔄 Próximo |
| v2.0 | Q2 2026 | Estoque, Ciclos, Arraçoamento, Biometria | ⏳ Planejado |
| v2.5 | Q3 2026 | App Mobile Offline-First | ⏳ Planejado |
| v3.0 | Q4 2026 | Motor de Regras, Automação Avançada | ⏳ Planejado |
| v3.5 | Q1 2027 | BI, Dashboards, Análise Preditiva | ⏳ Planejado |
| Feature | Descrição |
|---|---|
| Push Notifications | Alertas em tempo real para mobile |
| Email Notifications | Notificações por e-mail para alertas críticos |
| WebSocket Updates | Status em tempo real sem polling |
| Múltiplos Schedules | Mais de 1 schedule por Control Point |
| Operator Assignment | Operadores vinculados a fazendas específicas |
| Consumption Reports | Relatórios de consumo energético |
| OTA Firmware Updates | Atualização remota do ESP32 |
| Rate Limiting | Proteção contra abuso da API |
| API Versioning | Suporte a múltiplas versões da API |
| Item | Descrição |
|---|---|
| Pagination | Implementar paginação em endpoints de listagem |
| Request Logging | Middleware de logging de requests/responses |
| Retry Logic | Lógica de retry para comandos de dispositivos |
| Health Checks | Health check do banco de dados |
| Error Codes | Códigos de erro padronizados (não apenas HTTP status) |
Monere Integration
Banco de dados flexível para aceitar tabelas do Monere, permitindo visão unificada de “Bois” e “Peixes” no mesmo DRE.
AI/ML
Modelos preditivos para otimização de arraçoamento e previsão de doenças.
Marketplace
Integração com fornecedores de insumos e compradores de pescado.