Telemetria de armazenagem de grãos
Leitura contínua de temperatura em câmaras frias, com alerta automático quando a carga sai da faixa segura.
Em trinta segundos
- Contexto
- Grão guardado fora da faixa de temperatura perde qualidade e pode levar a carga inteira. O acompanhamento por ronda manual só revela um desvio noturno na manhã seguinte.
- O que foi feito
- Um coletor lê a temperatura direto do controlador de cada câmara a cada poucos minutos, grava a série no Postgres, e o painel dispara alerta sozinho quando a leitura sai da faixa combinada.
- O que mudou
- A janela entre o desvio acontecer e alguém saber cai de horas para minutos, porque o intervalo entre leituras passou a ser de minutos e o limiar é avaliado a cada uma delas.
- Até onde vale
- O ganho de tempo vem da arquitetura, não de medição em campo: não há aqui contagem de desvios pegos nem tempo de resposta medido antes e depois. A demonstração roda com série sintética, que reproduz o comportamento do sistema sem publicar temperatura real de cliente.
- Câmaras monitoradas
- 5
- Intervalo entre leituras
- 1–5 min
- Da leitura ao alerta
- minutos
O problema
Grão guardado fora da faixa de temperatura perde qualidade e, no limite, leva a carga inteira junto. O acompanhamento tradicional depende de alguém passar de ronda e anotar o número, o que significa que um desvio que começa às duas da manhã só vai ser visto no café da manhã seguinte, quando o estrago já está feito.
Ronda também é amostragem esparsa: entre duas passagens não existe dado nenhum. Quando o desvio aparece na planilha, não há como saber se ele começou dez minutos antes ou seis horas antes, e essa diferença é justamente o que decide se a carga foi perdida.
A solução
O controlador de cada câmara já sabe a temperatura, só não contava para ninguém. Um coletor em Python consulta esses controladores por Modbus TCP a cada poucos minutos, lendo o registrador de temperatura direto do equipamento, sem intermediário nem software de fabricante no caminho.
Cada leitura vira uma linha no PostgreSQL, em tabela de série temporal a que só se acrescenta: câmara, instante e valor. Nada é sobrescrito, então o histórico serve tanto para o painel de agora quanto para olhar um mês atrás e entender o comportamento de uma câmara ao longo da safra.
O coletor roda numa VM interna, disparado por agendador. É deliberadamente a peça mais boba do sistema: ele lê, grava e morre. Não transforma, não decide e não guarda estado, então uma falha de rede na câmara custa uma leitura faltando, e não um pipeline entupido.
O painel é Grafana consultando o Postgres direto, sem etapa de carga no meio. Isso importa mais do que parece: como não existe refresh agendado entre o banco e a tela, o que o operador vê é o que o banco tem, e o atraso do painel é o tempo da consulta. O alerta é do próprio Grafana, avaliando o limiar a cada nova leitura e notificando quando a temperatura sai da faixa combinada com a operação.
O ganho não é o painel. É a diferença entre descobrir um desvio em minutos e descobrir na manhã seguinte.
Nota sobre os dados
Projeto conduzido em contexto profissional. Nome da empresa, localização das unidades, capacidade das câmaras e séries de temperatura reais não são publicados.
O que a demonstração mostra
O painel abaixo tem cinco câmaras ao longo de um dia. Quatro seguem o ciclo normal, que oscila de leve com a temperatura externa e com o próprio ciclo do compressor. Uma delas perde refrigeração no meio da madrugada: a curva descola, sobe em rampa e cruza o limite configurado. É esse cruzamento que o alerta pega, no intervalo de uma leitura, e não na ronda da manhã.
A série é sintética, gerada por fórmula: o comportamento é o do sistema, os números não são de nenhuma carga real.
Temperatura por câmara, ao longo de um dia
série sintética · leitura a cada 5 minVer os números da série
| hora | Câmara 1 | Câmara 2 | Câmara 3 | Câmara 4 | Câmara 5 |
|---|---|---|---|---|---|
| 00:00 | 13,5 | 13,8 | 14,0 | 14,0 | 14,2 |
| 02:00 | 13,7 | 14,0 | 14,0 | 14,2 | 14,4 |
| 04:00 | 13,8 | 14,2 | 15,6 | 14,3 | 14,6 |
| 06:00 | 14,1 | 14,5 | 18,6 ▲ | 14,6 | 14,8 |
| 08:00 | 14,3 | 14,7 | 21,7 ▲ | 14,9 | 15,1 |
| 10:00 | 14,5 | 15,0 | 17,6 | 15,0 | 15,3 |
| 12:00 | 14,6 | 15,1 | 15,2 | 15,1 | 15,4 |
| 14:00 | 14,5 | 14,9 | 15,0 | 15,1 | 15,3 |
| 16:00 | 14,4 | 14,7 | 14,8 | 14,9 | 15,1 |
| 18:00 | 14,1 | 14,4 | 14,5 | 14,5 | 14,9 |
| 20:00 | 13,9 | 14,3 | 14,2 | 14,4 | 14,6 |
| 22:00 | 13,6 | 13,9 | 14,0 | 14,1 | 14,4 |
| 24:00 | 13,5 | 14,0 | 14,0 | 13,9 | 14,2 |
Tecnologias
- Python
- Modbus TCP
- PostgreSQL
- Grafana