Integrar contadores inteligentes da EDP em Home Assistant

O plugin usa o Serial1.

Não podes usar mais nada com serial.

Quando desactivas o plugin só usas um pin.
Se usares dois vai entrar em conflito.

Só podes usar o 16/17 com o plugin

Obrigado pela paciência, mas desculpa porquê é dificil perceber alguns conceitos do EasyHAN e do Tasmota quando de vem do Arduino…

Ok, apenas indiquei no GPIO1 e GPIO3 os TCP Tx/RX no module parameters.
O script ficou desactivado.
Depois coloquei o script V1 (modbus no script) e indiquei as portas RX e TX:
+1,16,mN1,1,9600,EB3,17,15,r010400010001,r0104 …

No restart, o ESP32 parece uma arvore de natal :slight_smile: mas o mais importante é que o TX pisca regularmente e o RX é reconhecido no boot (atenção que ainda não liguei o cabo a porta HAN).
Também no main menu agora aparece correctamente as variáveis do EB3 trifásico.

Ainda não testei fisicamente a ligação, mas se achares que algo está errado, por favor agradeço o teu feedback.

Mais uma vez obrigado


ESP32-DevKit

Tasmota

Program Version 14.3.0 (tasmota32)
Build Date & Time 2024-11-16T21:40:37
Core/SDK Version 3_1_0/5.3.1.240924
Uptime 0T00:10:14
Flash Write Count 133
Boot Count 43
Restart Reason Software reset digital core
ESP Chip Id 4578916 (ESP32-D0WDQ6 v1.0)
Flash Chip Id 0x164020 (DIO)
Flash Size 4096 KB
Program Flash Size 4096 KB
Program Size 2078 KB
Free Program Space 801 KB
Free Memory 98.3 KB (frag. 7%)
Partition safeboot 832 KB (used 96%)
Partition app0* 2880 KB (used 72%)
Partition fs 320 KB

Para desactivar basta usar um pin.

Ao usares os dois activas completamente a bridge.

Mas, nesse aspecto já é domínio do Tasmota.

O motivo de alguns Wemos e Nodemcu não funcionarem com o pin 1 e 3.

É a existência de um pullup forte.

Ao fim destes anos, certas coisas fazem sentido agora.

Tradução adicionada como cortesia, porque sei que estou num fórum que não é em inglês:

Olá a todos,

Peço desculpa por usar o inglês, mas mudámo-nos recentemente para português e ainda estou a aprender a língua.
Achei este tópico muito perspicaz e tem muitas semelhanças com a forma como costumávamos extrair dados modbus de um inversor SunSynk na minha casa anterior.

Neste repositório do github está o código mais recente que usei para esse fim e pode ser facilmente adaptado para ler os registos corretos para as caixas EDP e expô-los como entidades em HA. Sinta-se à vontade para pegar em qualquer parte do código que queira reutilizar.

Eu costumava executar isso em um ESP32 com um chapéu modbus instalado e ele facilmente sondava dados a cada segundo, mas eu o mantive em intervalos de 5 segundos para facilitar o meu HA DB.

A configuração era semelhante à deste utilizador:
(imagem no próximo post)

Agora: Devido à caixa EDP estar longe da minha casa e não haver disponibilidade de um tubo para passar o cabo cat6, decidi instalar um Shelly Pro 3EM na placa principal, para poder ver/calcular a maior parte da informação disponível na caixa EDP. Terei todo o gosto em partilhar a forma como o fiz, mas é um trabalho em curso. Colocarei mais imagens nos próximos posts, devido às limitações das imagens incorporadas para os novos utilizadores

Parece que existe um conhecimento técnico aprofundado por parte das pessoas neste tópico, pelo que gostaria de colocar aqui uma questão simples.

O contador da EDP apresenta um valor total consumido para Vazio, Cheias e Ponta (1.8.1, 1.8.2 e 1.8.3) apesar de eu estar no tarifário “simples”.

Gostaria de saber quando é que o contador muda de cada tarifa para a seguinte, para poder ajustar a leitura total do contador em conformidade. O contador segue o horário abaixo indicado, incorporado na caixa EDP, ou existe outro horário programado na caixa Landis?
Além disso, que datas são utilizadas para determinar as tarifas de verão ou de inverno?


Hi All,

Apologies for using English, but we just recently moved to Portugual and I am still learning the language.
I found this thread very insightful and it has a lot of similarities on how we used to pull modbus data from a SunSynk inverter at my previous house.

In this github repo is the latest code I used for that purpose and it can very easily be adapted to read the correct registers for the EDP boxes and expose it as entities in HA. Feel free to take any bits of code you may want to reuse.

I used to run this on an ESP32 with a modbus hat installed and it easily polled data every second, but I kept it at 5 second intervals to go easier on my HA DB.

It looked similar to this user’s setup:
(image in next post)

Now: Due to the EDP box being far from my house and no availability of a pipe to run the cat6 cable in, I have settled on installing a Shelly Pro 3EM in the main board, so I can see/calculate the majority of information available in the EDP box. I am happy to share how I have done this, it’s a work in progress though. will post more images in next posts, due to embedded image limitations for new users

It seems there is a thorough technical understanding from the people on this thread, so I would like to pose a simple question here.

The EDP meter shows a total consumed value for Vazio, Cheias and Ponta (1.8.1, 1.8.2 and 1.8.3) even though I am on the “simples” tariff.

I would like to know when the meter switches from each tariff to the next so I can adjust my total meter reading accordingly. Does it follow the below timetable built into the EDP box, or is there another schedule programmed inside the Landis box?
Also, what dates are used to determine the summer or winter tariffs?
image

Follow up from previous post - My sunsynk modbus poller on ESPHome looked similar to this user’s setup:

This is what I have thus far in HA

Hello @Jacques_Aucamp

Can you share with us how you added the sub totals for “Today”, “This week”, “This month”, “This Quarter”, “This year”…, thanks.

Also, your “Setup” sensor and yaml would be nice, if you can share.

Thanks.

Olá a todos

Estive a ajudar um colega a montar um Elfin conectado por modbus com o home assistant (customer component).

Consigo ler os valores corretamente, contudo alguns deles como por exemplo o consumo em amps, fica a transitar entre o valor lido e “unavailable”.

Entretanto também me apercebi que o valor da tarifa (address 11) tem um ouput que difere do que tenho em casa.

Pode isto estar a acontecer por necessitar de ter configurações diferentes para o modelo do contador dele?

  - name: ERedes_box_contador_energia
    type: tcp
    host: <IP>
    port: 9502
    delay: 1
    timeout: 4
    retries: 5
    #retry_on_empty: true
    message_wait_milliseconds: 200
    - name: "ERedes Box Current" # 6D
      slave: 01
      address: 109
      input_type: input
      #count: 1
      data_type: uint16
      precision: 1
      scale: 0.1
      unit_of_measurement: A
      device_class: current
      scan_interval: 15

Configs do Elfin:
image

No fundo o meu problema é muito semelhante ao reportado pelo @Cesar_Araujo

Houve alguma solução?

Obrigado!

Olá, eu acabei por mudar para o easyhan, os contadores da e-redes não usam o protocolo standard e por isso temos que fazer maroscas para obter todos os registos. Cansei de fazer patch ao modbus do home assistant sempre que tinha um update. Easyhan, foi directo e simples. E alem disso tenho toda a informação possível.
O mestre nikito vai fazendo os updates e domina os “glitches” dos contadores para ter sempre leituras, mesmo nos casos onde tem o modem da e-redes.
Espero ter ajudado.

Obrigado pelo feedback @Cesar_Araujo

@nikito7 Sabe se existe alguma solução mantendo o Elfin?

Obrigado pela vossa disponibilidade

Actualmente desisti do Elfin. Principalmente do componente modbus do Home Assistant.

Só os Watts e kWh tem problemas.

A corrente deveria funcionar.

A maioria dos contadores são 8N1, Stop bits 1.

Excepto Landis e Ziv, desatualizados ou antigos.

O problema é pior com usb rs485.

Com o Elfin deveria funcionar com o custom_component.

Eu não sigo isso.

Os 32bits tem de ser com o data_type: custom

No easyhan bridge funciona:
Screenshot_20250215_214230_Home Assistant

Se o pedido modbus falhar fica unavailable

Sem custom:

Logger: homeassistant.config
Source: config.py:942
First occurred: 21:47:19 (1 occurrences)
Last logged: 21:47:19

Invalid config for ‘modbus’ at pkg/active/demo.yaml, line 40: EB2 38 uint32 c1: Size of structure is 4 bytes but count: 1 is 2 bytes ‘modbus->0->sensors->2’, got {‘name’: ‘EB2 38 uint32 c1’, ‘unique_id’: ‘eb2_demo38_c1’, ‘slave’: 1, ‘address’: 38, ‘input_type’: ‘input’, ‘data_type’: ‘custom’, ‘count’: 1, ‘structure’: ‘>L’, ‘precision’: 2, ‘scale’: 0.001, ‘unit_of_measurement’: ‘kWh’, ‘device_class’: ‘energy’, ‘state_class’: ‘total_increasing’}, please check the docs at https://www.home-assistant.io/integrations/modbus Invalid config for ‘modbus’ at pkg/active/demo.yaml, line 67: EB2 22+23 uint32 c2: Size of structure is 8 bytes but count: 2 is 4 bytes ‘modbus->0->sensors->4’, got {‘name’: ‘EB2 22+23 uint32 c2’, ‘unique_id’: ‘eb2_demo22_c2’, ‘slave’: 1, ‘address’: 22, ‘input_type’: ‘input’, ‘count’: 2, ‘data_type’: ‘custom’, ‘structure’: ‘>2L’, ‘scale’: 0.001, ‘precision’: 2}, please check the docs at https://www.home-assistant.io/integrations/modbus Invalid config for ‘modbus’ at pkg/active/demo.yaml, line 80: EB2 clock demo: Size of structure is 12 bytes but count: 1 is 2 bytes ‘modbus->0->sensors->5’, got {‘name’: ‘EB2 clock demo’, ‘unique_id’: ‘eb2_clock_demo’, ‘slave’: 1, ‘address’: 1, ‘input_type’: ‘input’, ‘count’: 1, ‘data_type’: ‘custom’, ‘structure’: ‘>H7BhB’}, please check the docs at https://www.home-assistant.io/integrations/modbus

O custom altera o único codigo que me aceitaram.
Sem isso nem o custom era possível.
Além que o custom não é a forma correta…

Eu já tinha utilizado esse script por isso nao tenho o erro indicado acima. Como é que posso perceber qual é a origem deste problema do unavailable? É estranho só acontecer com alguns dos sensores. Há uns que estão sempre a funcionar, mas há outros, nomeadamente este que referi a cima que está sempre a ficar unavailable.

Seria espetacular se tivesse algumas luzes de como despistar este problema, será que por vezes o contador dá output de um formato que não é reconhecido pelo modbus no HA?

Deve dar timeout. Ou conflito.

message_wait_milliseconds: 750


Não sei se isto faz alguma coisa:

min_value float (Optional)
The minimum allowed value of a sensor. If value < min_value –> min_value. Can be float or integer

[https://www.home-assistant.io/integrations/modbus/#min_value ]


In order for the developers better to identify the problem, please add the following lines to configuration.yaml:

logger:
  default: warning
  logs:
    homeassistant.components.modbus: debug
    pymodbus: debug

and restart Home Assistant, reproduce the problem, and include the log in the issue.

Tentei com as configs acima contudo tenho o mesmo problema.

Os sensores em questão ficam indisponiveis sempre que tenho a seguinte mensagem:

2025-02-16 13:57:06.983 DEBUG (SyncWorker_3) [pymodbus.logging] New Transaction state “SENDING”

2025-02-16 13:57:06.983 DEBUG (SyncWorker_3) [pymodbus.logging] Changing transaction state from “SENDING” to “WAITING FOR REPLY”

2025-02-16 13:57:06.987 ERROR (SyncWorker_3) [custom_components.modbus.modbus] Pymodbus: ERedes_box_contador_energia: Modbus Error: [Connection] ModbusTcpClient(192.168.1.241:9502): Connection unexpectedly closed 0.00011348724365234375 seconds into read of 8 bytes without response from slave before it closed connection

2025-02-16 13:57:12.009 DEBUG (SyncWorker_1) [pymodbus.logging] Connection to Modbus server established. Socket (‘192.168.1.242’, 58730)

2025-02-16 13:57:12.010 DEBUG (SyncWorker_1) [pymodbus.logging] Current transaction state - WAITING_FOR_REPLY

2025-02-16 13:57:12.010 DEBUG (SyncWorker_1) [pymodbus.logging] Running transaction 286

O que isto significa? Que a conexão foi fechada enquanto estavamos à espera de uma resposta do contador?

Problemas de wifi talvez.

olá,

estou a tentar ler os valores da corrente activa directamente pelo modbus no homeassistant mas tenho valores muito elevados:

A minha configuração é:

      #114 0x0072 Instantaneous Current (Sum of all phases)  (A)
      - name: "Contador Corrente"
        slave: 1
        address: 114
        input_type: input
        count: 1
        data_type: custom
        structure: ">H"
        precision: 0
        scale: 1
        unit_of_measurement: A
        device_class: current
        scan_interval: 5

A minha dúvida é saber se o contador está a devolver o valores em A ou em que unidade está a devolver?
Ou devo usar outro registo para ler a corrente?

Obrigado.

        input_type: input
        data_type: uint16
        precision: 1
        scale: 0.1

@nikito7 funciona correctamente, obrigado!

1 Curtiu

@nikito7 Não me parece ser WiFi, estive a ver e na minha casa tenho também os mesmos outputs nos logs, mas os valores não desaparecem. Qual seria a sugestão como alternativa? Existe algo que possa flashar num ESP8266? Há algum tutorial?
Confesso que me custa um bocado ter esse effort quando o Elfin deveria funcionar em condicoes.


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade