Como disse nesta tergiversação, estava à procura de módulos IoT para medição de energia elétrica. O problema é que ligar coisas diretamente na rede elétrica é coisa séria. Se algo der errado, pode causar eletrocução ou mesmo um incêndio. Um monitor de energia vai ficar ligado 24x7, não é algo que você coloca na tomada só durante o uso e vai estar por perto se soltar fumaça.
A maioria dos módulos IoT à venda e/ou sua forma de conexão ao microcontrolador não inspiram confiança nenhuma. O módulo mais "civilizado" que encontrei foi o PZEM-004t versão 3, construído em torno do chip SD3004, que é base de muitos outros produtos nesse nicho. É um microcontrolador programável, mas no PZEM-004t ele já vem com um firmware pronto para uso e que não pode ser modificado.
Vantagens do PZEM:
E como tudo na vida, ele tem suas desvantagens:
Seria realmente divertido se ele tivesse um "modo cru", para usá-lo como osciloscópio, observar harmônicas, calcular o fator de potência em software, etc. Mas não se pode ter tudo, né?
O código do meu módulo IoT pode ser encontrado aqui, e o gráfico a seguir é o produto final:
Tomei algumas decisões de design que ainda estou ruminando, mas parecem estar funcionando.
O PZEM reporta valores instantâneos de tensão, corrente, etc. que não significam muito isoladamente. Preferi reportar agregados: média, mínimo e máximo, uma vez por minuto. A meu ver isto melhora a qualidade da informação e de quebra economiza tráfego MQTT.
(Teria sido legal que o próprio PZEM fizesse essa agregação, uma vez que mesmo amostrando a cada segundo pode acontecer de perder uma máxima ou uma mínima.)
Não tenho absoluta certeza que fazer média aritmética de tensão e corrente é correto, mas parece ok para mim; os gráficos refletem o consumo conhecido dos aparelhos elétricos que temos por aqui.
Não faço uso do fator de potência medido pelo PZEM, pois não faz sentido agregá-lo por média aritmética — teria de ponderar pela corrente. Preferi então calcular e reportar a potência aparente (VA), que pode ser agregada (ou creio eu que pode). Até onde verifiquei, meu VA calculado fecha com a potência real e o fator de potência reportados pelo PZEM.
Também não faço uso do medidor cumulativo de energia do PZEM. Apenas reporto a potência religiosamente a cada minuto. Para obter os kilowatt-hora de um lapso de tempo, basta integrar. Fiz isso direto no Grafana, inclusive.
Pode ser interessante ficar observando o valor instantâneo em alguns casos de uso. Para estes, o módulo possui um "modo ticker", habilitado via MQTT, que reporta as amostras instantâneos por alguns minutos.
Tinha uma suspeita de oscilação de tensão, que não se confirmou. De fato a tensão oscila entre 215 e 230V, mas está na faixa considerada aceitável (200 a 240V, se não me engano). Tem uns vizinhos com energia solar, pode ser um fator, mas não me parece que o pico de tensão coincida com meio-dia ou dia claro.
O fator de potência de algumas cargas eletrônicas é realmente horrível, abaixo de 0.5. Felizmente são de pequeno consumo (porém imagine o impacto de um bilhão de carregadores de celular ruins no sistema elétrico brasileiro). Curiosamente o fator de potência melhora quando se liga um motor de indução, que isoladamente é outra carga considerada ruim.
O CT incluso com o kit é do tipo "não-intrusivo", pode ser clampeado a um fio existente, sem desconectar nem cortar nada. Conectei à fase antes do disjuntor DR, por ser o cabo mais folgado dentro do quadro de disjuntores. Desde então o disjuntor DR começou a desarmar esporadicamente.
Podia ser culpa do CT, podia não ser, havia outros equipamentos "suspeitos", entre eles um no-break. Mas realoquei o CT para o neutro pós-DR (e também substituí o no-break, por outros motivos) e o problema desapareceu.
Uma das caixinhas estava com uma tendência de apresentar erro de comunicação entre o microcontrolador e o PZEM e não conseguir se recuperar, apesar de haver previsão de software para isso. De novo, os possíveis culpados são muitos, mas reparei que o driver não tratava a comunicação serial de forma 100% robusta.
Fiz uma pequena modificação (PR) e o problema foi mitigado. Os erros continuaram acontecendo (TTL serial é muito suscetível a interferência, teria de melhorar a fiação nesta caixinha, visto que a outra nunca apresenta erros) mas agora a recuperação acontece.
Isso é muito particular. Para mim, uma vez que verifiquei o que desejava verificar (queda de tensão, desbalanceamento entre fases, consumo alegado pela conta de luz), a utilidade reduziu bastante. Mantenho apenas um monitor ativo para ficar de olho no consumo do meu próprio "rack de equipamentos". Mas posso mudar de ideia no futuro, assim como mudei em relação à automação de iluminação, que achava uma bobagem e hoje aprecio bastante.