# ENERGIA EM ALERTA PRO — Instalação e arquitetura

## Estado da entrega
Simulador local funcional, dados a cada 500 ms, painel, alertas e histórico da sessão. Login, perfis, armazenamento online, Realtime e ingestão NÃO estão ativos: a ativação do Lovable Cloud foi recusada. Os históricos locais se encerram ao recarregar a página; só os limites e a opção sonora ficam no navegador.

## Aplicação
Requer Bun e ambiente compatível com o projeto TanStack Start.
1. Instale dependências com `bun install`.
2. Execute `bun run dev`.
3. Abra o endereço mostrado no terminal.
4. Execute os testes com `bun run test`.

## Wokwi
1. Crie um novo projeto ESP32 DevKit v1 em https://wokwi.com.
2. Substitua `sketch.ino` e `diagram.json` pelos arquivos deste pacote.
3. Crie `config.h` copiando o arquivo disponibilizado no painel em `/hardware/config.h`.
4. Execute a simulação. O monitor serial recebe JSON a cada 500 ms.
5. O primeiro potenciômetro (GPIO34) simula 0–3000 W; o segundo (GPIO35), 90–140 V.
6. Acima de 1500 W ou abaixo de 110 V, a saída virtual GPIO26 é desligada e permanece travada.
7. Volte os potenciômetros aos limites e pressione o botão GPIO25 para rearmar.
8. Nenhum fio dos contatos do relé deve ser ligado à rede elétrica; este circuito só demonstra lógica virtual.

O painel local e o Wokwi executam motores independentes. Não existe sincronização entre eles nesta versão. O firmware foi fornecido como fonte; compilação e execução no Wokwi ainda exigem importação e validação lá. Recursos de rede do Wokwi dependem da disponibilidade do gateway do serviço.

## Arquitetura atual
Simulador independente → getEnergyReading() → proteção lógica → monitor → dashboard.
`source.ts` é o único ponto de entrada das leituras. `simulator.ts` não toma decisões de proteção; `protection.ts` mantém a lógica de travamento. O comando Reiniciar começa uma nova sessão virtual. Pausar congela as leituras periódicas; alterar os controles manualmente gera uma nova amostra. A energia usa o intervalo efetivo das amostras, sem contar o período pausado.

## Próxima etapa online (depende de aprovação do Cloud)
- Auth com confirmação de email; perfis por usuário criados no cadastro, acessíveis somente ao próprio usuário.
- Dispositivos pertencentes ao usuário, configurações de limites, último contato e origem validada.
- Leituras e eventos com permissões de acesso por proprietário.
- Tokens próprios por dispositivo: guardar apenas hash, mostrar uma única vez na emissão autenticada, permitir revogação e rotação. Nunca usar chave de serviço ou senha de usuário no firmware.
- Endpoint HTTPS `/api/public/energy/ingest`: validar token, dispositivo, tamanho, esquema, sequência e frequência de envio antes de gravar; não retornar dados pessoais.
- Realtime para o último estado do dispositivo; consolidar leituras históricas a cada 10 s e gravar eventos imediatamente, com limite de envio imposto no servidor.
- Contato ausente por 30 s significa offline; dados antigos ficam identificados como desatualizados, nunca como leitura ao vivo.
- Histórico por dispositivo e período, retenção e agregação a configurar na ativação.

## Contrato HTTP proposto (ainda não existe endpoint)
JSON: `device_id` UUID, `source` WOKWI ou ESP32_REAL, `sequence` inteiro crescente, `power` 0–3000 W, `voltage` 50–240 V, `current` 0–100 A, `frequency` 40–70 Hz, `energy_wh` >=0, `relay_on` boolean, `event` vazio/overload/undervoltage/rearm.
O horário deve ser atribuído no servidor; sequência monotônica protege contra repetição. A origem declarada deve corresponder à origem cadastrada do dispositivo, não ao texto enviado pelo cliente.

## HTTPS no firmware
Mantenha INGEST_URL, DEVICE_ID, DEVICE_TOKEN e ROOT_CA vazios até que o receptor seja implementado. Depois, configure localmente a URL HTTPS, o identificador, o token exclusivo do dispositivo e o certificado da autoridade raiz do destino (PEM). O firmware verifica TLS; não usa `setInsecure()`. Transmite a cada 10 s, ou imediatamente se existe evento pendente, com repetição das falhas. O receptor precisará deduplicar eventos pelo identificador/seq antes de liberar uso online.
Nunca publique `config.h` preenchido com credenciais em um projeto Wokwi público.

## Segurança elétrica
Nenhuma medida da simulação corresponde a sensores reais. Corrente deriva de P/V, com fator de potência unitário. Potência mostra a demanda virtual; corrente fica zero quando o relé virtual está desligado. Frequência é nominal de 60 Hz com variações sintéticas. Este sistema não é certificado nem substitui disjuntores, contatores ou proteções elétricas. Integração física exige sensores isolados, projeto e validação por profissional habilitado. GPIO nunca protege a rede diretamente. O painel não envia comandos de atuação física.

## Envio online (opcional)
1. Entre no site → **MONITOR ONLINE** → **MEUS ESP32** → adicione um aparelho.
2. Copie `INGEST_URL` e `DEVICE_TOKEN` exibidos (o token aparece só uma vez) para `config.h`, junto com o certificado raiz (`ROOT_CA`) do site.
3. O ESP32 envia JSON com `power`, `voltage`, `current` e `relay_on`; o gasto é calculado no servidor com a tarifa da sua conta.
