Skip to content

Da leitura ao gráfico ​

O sistema é formado por programas com responsabilidades distintas. Para entender a arquitetura, acompanhe o que acontece com uma medição desde o inversor até sua apresentação no Grafana.

O fluxo principal em seis etapas ​

Fluxo em seis etapas: inversores fornecem medições; coletor lê e padroniza; Mosquitto distribui mensagens MQTT; ingestão valida e prepara; PostgreSQL guarda catálogo e medições; Grafana consulta, mostra e alerta.

Leia de 1 a 6: a seta liga o fim da primeira linha ao início da segunda. São componentes lógicos, não seis computadores físicos. As pequenas curvas são símbolos ilustrativos, não dados da usina. Ampliar o diagrama.

EtapaO que aconteceOnde está no projeto
1 · InversoresRespondem às consultas de mediçãoEquipamentos Solis e SAJ
2 · ColetorEscolhe o adapter, interpreta e publica as leiturasapps/inverter-to-mqtt
3 · MosquittoEncaminha as mensagens aos assinantesBroker MQTT
4 · IngestãoConfere a mensagem, prepara os registros e solicita a gravaçãopackages/mqtt e apps/mqtt-to-db
5 · PostgreSQLArmazena catálogo, medições e mensagens recebidasSchema em packages/db
6 · GrafanaConsulta o histórico para gráficos e regras de alertaDashboards e provisioning em grafana/

Essa separação permite tratar as diferenças de comunicação na coleta. O consumidor trabalha com o contrato comum, em vez de precisar conhecer o mapa de registradores de cada inversor.

O que uma mensagem carrega? ​

O coletor converte os nomes internos para as chaves do contrato MQTT. Por exemplo, powerW vira power_w. A mensagem contém o instante atribuído à leitura e um conjunto de métricas.

Exemplo fictício para estudo, sem identificador de equipamento real:

json
{
  "ts": "2026-10-20T12:00:00Z",
  "metrics": {
    "power_w": 2000,
    "energy_today_kwh": 6.2
  }
}

No coletor, ts é gerado pelo relógio da aplicação depois da leitura. Na ingestão, measuredAt guarda esse instante e receivedAt registra a chegada. Se a mensagem omitir ts, a chegada é usada como aproximação.

Uma mensagem vira mais de um registro ​

Identificar

Encontrar ou cadastrar o dispositivo e as definições das métricas.

Registrar

Guardar uma medição numérica para cada chave: no exemplo, duas linhas.

Preservar

Guardar também a mensagem original para inspeção.

prepareTelemetry() organiza os dados sem acessar a rede ou o banco. persistTelemetry() executa a persistência. Para uma mensagem válida, catálogo, medições e registro bruto participam da mesma transação.

Uma mensagem inválida segue outro caminho: é registrada com o erro, sem criar medições a partir dela. A transação evita uma gravação parcial; ela não elimina por si só entregas repetidas do MQTT.

Onde entram o inventário e o Admin? ​

O fluxo principal não mostra todas as relações. Antes de coletar, o programa consulta o inventário no banco para saber quais fontes estão habilitadas e qual adapter usar. O Admin consulta e permite edições restritas no catálogo; o Grafana consulta o histórico.

Diagrama técnico com o fluxo de medições, a consulta do inventário pelo coletor e a relação entre Admin e banco.

O Admin também apresenta informações resumidas dos alertas. Ele não executa a coleta nem envia comandos elétricos aos inversores. Para a divisão entre processos, imagens e volumes, veja Docker e ambientes.

Aprofunde uma parte de cada vez ​

Comece por mensagens MQTT, acompanhe a organização do código e leia uma função de preparação explicada. A persistência detalha a gravação; fila e encerramento explica seus limites.

Revisão: 21/10/2026. Fontes: runtime e mapper do coletor; contrato e subscriber de packages/mqtt; message-processor.ts, persistence.ts e runtime do mqtt-to-db; schema Prisma. Artigo SNCT 2026, versão 1.1, como referência narrativa. Ilustração gerada com IA e conferida contra o fluxo principal.

IFSP Campus Boituva · Energia, automação e software em um mesmo projeto