Medição de Energia com PZEM + ESP com ESPHome - Monofásico, Bifásico ou Trifásico

image image

Código para implementar com ESPHome um medidor de energia para redes monofásica, bifásica ou trifásica e ter essas informações no Home Assistant.

  • Se você busca uma implementação onde é possível ligar todos os módulos PZEM no mesmo par de pino do ESP e deve-se alterar o endereço de cada módulo PZEM veja este post:
  • Se você busca uma implementação onde não é necessária a alteração do endereço dos módulos PZEM, onde cada módulo PZEM será ligado em um par de pinos diferentes do ESP, veja este post:
13 Likes

Muito Bom @douglasit ! Parabéns pelo excelente trabalho!

2 Likes

Muito bom! Parabéns!

Sabe se conseguimos medir energia / potencia negativa assim ?
Estou tentando medir o consumo da casa e a energia injetada na rede.

Cheguei a comentar agora em um outro post mas esse seu trabalho está mais completo para a medição trifásica…

1 Like

Acredito que não vai conseguir efetuar a medição negativa com o PZEM, mas talvez você possa calcular a potência injetada e consumida da rede medindo a energia de saída do inversor e a de entrada na residência. Porém você precisaria de dois conjuntos de PZEM.

Para alterar o endereço de um módulo PZEM veja o post:

Conseguir realizar as medidas com 2 Pzem, mas não consigo obter energia total e os outros dados referente a potencia total, mostra somente como desconhecido. Tenho que editar alguma coisa no código ??

Você usa apenas dois PZEMs, ou seja sua instalação é bifásica?

Você deve configurar o parâmetro NumFases conforme o post:

Qual valor está usando?

@douglasit
Esse era o erro, como esse código funciona para circuitos trifásicos não mudei o NumFases.
Somete outra duvida, esse sensor.med_energia_fase_1_energia e fase_2, não deveria ser resetado a cada dia ??
Pois utilizava o tasmota e alimentava o Utility Meter com consumo diário e a cada dia ele zerava esse valor de energia. Fiquei um pouco confuso nessa parte. Mesmo assim Obrigado pela ajuda !!!

A informação do sensor de energia por fase e de energia total (soma da energia total de casa fase) são provenientes dos PZEMs e são cumulativo até que seja resetado no PZEM (por comando ou porque chegou ao valor máximo). Mas mesmo assim ele já é suficiente para usar no gerenciamento de energia do HA. A vantagem de usar esses sensores no painel de energia ao invés dos sensores utility meter é que os PZEMs continuam a acumular a leitura mesmo se perder a comunicação com o HA, sendo que a diferença da última medição e a medição de quando retornar a comunicação com o HA contabilizada na hora do retorno da comunicação.

As entidades utility meter podem ser criadas normalmente a partir dessa informação de energia total e vão servir para estatística para o usuário, podendo ser usadas em automação.

O código para criar as entidades utility meter é:

  #Totalizado com reset diário
  energia_diaria:
    source: sensor.med_energia_energia_total
    cycle: daily
    tariffs:
      - normal
  #Totalizado com reset semanal
  energia_semanal:
    source: sensor.med_energia_energia_total
    cycle: weekly
    tariffs:
      - normal
  #Totalizado com reset mensal
  energia_mensal:
    source: sensor.med_energia_energia_total
    cycle: monthly
    tariffs:
      - normal
  #Totalizado com reset anual
  energia_anual:
    source: sensor.med_energia_energia_total
    cycle: yearly
    tariffs:
      - normal
  #Totalizado sem reset periódico
  energia_total:
    source: sensor.med_energia_energia_total
    tariffs:
      - normal  

Novamente muito obrigado, @douglasit. Desta forma como estou em fase de teste para meu TCC, tenho somente que resetar a energia acumulativa dos pzem. Na ide arduino com a biblioteca do pzem-004t v3, existe a possibilidade de esse reset, no esphome teria essa possibilidade ? Criando um botão para esse reset ?

Desconheço que a biblioteca do PZEMAC no ESPHome possua essa função implementada, mas acredito que você possa conseguir sim. Utilize o UART SWITC com o campo data de acordo com o manual do PZEM para executar o reset.

Basta configurar como o manual especifica:
image

Com não uso e não configurei não tenho como te ajudar mais. Se conseguir e quiser compartilhar conosco ficaremos grato.

Para quem vem encontrando problemas com PZEM com ESPHome, apresentei algumas informações interessantes em:

1 Like

pra quem quiser, eu implementei isso como switch no HA:

uart:
  - tx_pin: TX
    rx_pin: RX
    baud_rate: 9600
    stop_bits: 1
    id: uart1
  - tx_pin: D5
    rx_pin: D6
    baud_rate: 9600
    stop_bits: 1
    id: uart2
    

modbus:
  - uart_id: uart1
    id: modbus1
  - uart_id: uart2
    id: modbus2
    
switch:
  - platform: uart
    uart_id: uart1
    name: "Phase 1 - Reset Energy"
    data: [0x01, 0x42, 0x80, 0x11]
  - platform: uart
    uart_id: uart2
    name: "Phase 2 - Reset Energy"
    data: [0x01, 0x42, 0x80, 0x11]

sensor:
  - platform: pzemac
    modbus_id: modbus1
    current:
      name: "Phase 1 Current"
    voltage:
      name: "Phase 1 Voltage"
    energy:
      name: "Phase 1 Energy"
    power:
      name: "Phase 1 Power"
    frequency:
      name: "Phase 1 Frequency"
    power_factor:
      name: "Phase 1 Power Factor"
    update_interval: 15s
  - platform: pzemac
    modbus_id: modbus2
    current:
      name: "Phase 2 Current"
    voltage:
      name: "Phase 2 Voltage"
    energy:
      name: "Phase 2 Energy"
    power:
      name: "Phase 2 Power"
    frequency:
      name: "Phase 2 Frequency"
    power_factor:
      name: "Phase 2 Power Factor"
    update_interval: 15s
5 Likes

Bom dia, Douglas!

Segui todo o tutorial e consegui colocar para funcionar.
Obrigado por compartilhar!

Pessoal, bom dia!

Eu comecei a medir a energia no dia 21/02, desde então minha base não para de crescer, o que estava dentro do esperado, só que eu estou achando um pouco exacerbado esse crescimento.
Pergunto, se eu alterar o tempo de atualização, está 1 segundo conforme o tutorial, para tipo 5 ou 10 segundos, vai alterar de alguma forma a consistência dos dados, ou seja, as informações armazenadas ou online continuarão verdadeiras?

Era exatamente isso que precisava, através do switch que criou, tenho a possibilidade no nodeRED criar uma rotina para zerar essa energia a cada troca de dia. Muito obrigado !!!

Tive problema para zerar também. Fiz esse código de sugerido para ele zera só do PZEM de endereço 0x01. Procurei e achei nesse link uma tabela que ai deu certo.

1 Like

Muito TOP seu post @douglasit .
Sabe dizer se consigo criar meu próprio “PZEM” com um sensor de corrente (Sct-013-100) e um arduino (ESP01, ESP32 ou mesmo c NODEMCU)? e dá para integrar com HA?

1 Like

Com o SCT-013-100 você não consegue medir todas as informações que um PZEM mede. O SCT-013-100 é um medidor de corrente, para medir a potência e a energia você precisa medir a tensão e o fator de potência também.

Mas se quiser usar um SCT-013-100, recomendo usar ESPHome, facilita bem a implementação e a integração com o Home Assistant. Aqui está a documentação para uso.

Prezado, obrigado por disponibilizar esse conteúdo com a comunidade. Gostaria de saber se você pode me ajudar com alguma informação em relação a maneira de zerar o valor acumulado na “device_classe: energy” , pois na página do Esphome tem essa informação, porém não consegui entender.

This action resets the total energy value of the pzemac device with the given ID when executed.

on_...:
  then:
    - pzemac.reset_energy: pzemac_1

Desde já agradeço e sucesso.