Integrar contadores inteligentes da EDP em Home Assistant

Para pessoas com o mesmo problema, está resolvido.
Assim que paguei a conta da luz, comecei a conseguir ler valores. Não sei se foi coincidencia ou não.

Bom dia! Consegui obter alguns valores, mas a maior parte deles não estou a conseguir ler.
Depois de contactar a e-redes, disseram-me que iam ver mas nunca informaram mais nada. Apos algumas semanas começei a receber alguns valores no homeassistant:

  • Tensão (108)
  • Corrente (109)
  • Fator de potencia (123)
  • Frequencia (127)
  • State L1 (132)
  • Tariff L1 (11)
  • Firmware Core (4)

No entanto os restantes valores como o consumo estão com erro. Estou a tentar varias configurações para ler o valor da Potencia Activa mas sem sucesso (nos endereços 115, tambem ja tentei ler os endereços 121, 117 e 119). De momento esta configuração no homeassistant configuration.yaml:

  - name: "EDP Box - Potência Ativa" # 79
    unique_id: edp_box_potencia_activa_sensor
    slave: 1
    address: 119
    input_type: input
    count: 4
    data_type: custom
    structure: ">Q"
    unit_of_measurement: W
    device_class: power
    scan_interval: 30

Mas o sensor não apresenta qualquer valor. No log do homeassistant apresenta o erro:

Logger: homeassistant.components.modbus.modbus
Source: components/modbus/modbus.py:331
integration: Modbus (documentation, issues)
First occurred: 09:58:05 (31 occurrences)
Last logged: 10:13:05

Pymodbus: edpbox: Error: device: 1 address: 119 → pymodbus returned isError True

No detalhe:
2024-06-05 09:57:55.252 DEBUG (MainThread) [pymodbus.logging] Connecting to 192.168.1.208:9502.

2024-06-05 09:57:55.252 DEBUG (MainThread) [pymodbus.logging] Connecting comm

2024-06-05 09:57:55.261 DEBUG (MainThread) [pymodbus.logging] Connected to comm

2024-06-05 09:57:55.261 DEBUG (MainThread) [pymodbus.logging] Resetting frame - Current Frame in buffer -

2024-06-05 09:57:55.262 INFO (MainThread) [homeassistant.components.modbus.modbus] modbus edpbox communication open

2024-06-05 09:58:01.265 DEBUG (MainThread) [pymodbus.logging] → transport: received eof

2024-06-05 09:58:01.266 DEBUG (MainThread) [pymodbus.logging] Connection lost comm due to None

2024-06-05 09:58:01.266 DEBUG (MainThread) [pymodbus.logging] callback_disconnected called: None

2024-06-05 09:58:01.268 DEBUG (MainThread) [pymodbus.logging] Wait comm 100.0 ms before reconnecting.

2024-06-05 09:58:01.380 DEBUG (MainThread) [pymodbus.logging] Connecting to 192.168.1.208:9502.

2024-06-05 09:58:01.380 DEBUG (MainThread) [pymodbus.logging] Connecting comm

2024-06-05 09:58:01.405 DEBUG (MainThread) [pymodbus.logging] Connected to comm

2024-06-05 09:58:01.406 DEBUG (MainThread) [pymodbus.logging] Resetting frame - Current Frame in buffer -

2024-06-05 09:58:03.921 DEBUG (MainThread) [pymodbus.logging] Adding transaction 1

2024-06-05 09:58:03.921 DEBUG (MainThread) [pymodbus.logging] Resetting frame - Current Frame in buffer -

2024-06-05 09:58:03.921 DEBUG (MainThread) [pymodbus.logging] send: 0x0 0x1 0x0 0x0 0x0 0x6 0x1 0x4 0x0 0x6d 0x0 0x1

2024-06-05 09:58:04.478 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x4 0x2 0x0 0x1b old_data: addr=None

2024-06-05 09:58:04.478 DEBUG (MainThread) [pymodbus.logging] Processing: 0x0 0x1 0x0 0x0 0x0 0x5 0x1 0x4 0x2 0x0 0x1b

2024-06-05 09:58:04.478 DEBUG (MainThread) [pymodbus.logging] Factory Response[ReadInputRegistersResponse’: 4]

2024-06-05 09:58:04.478 DEBUG (MainThread) [pymodbus.logging] Getting transaction 1

2024-06-05 09:58:04.479 DEBUG (MainThread) [pymodbus.logging] Frame check, no more data!

2024-06-05 09:58:04.710 DEBUG (MainThread) [pymodbus.logging] Adding transaction 2

2024-06-05 09:58:04.712 DEBUG (MainThread) [pymodbus.logging] Resetting frame - Current Frame in buffer -

2024-06-05 09:58:04.712 DEBUG (MainThread) [pymodbus.logging] send: 0x0 0x2 0x0 0x0 0x0 0x6 0x1 0x4 0x0 0x77 0x0 0x4

2024-06-05 09:58:05.264 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 0x2 0x0 0x0 0x0 0x3 0x1 0x84 0x4 old_data: addr=None

2024-06-05 09:58:05.265 DEBUG (MainThread) [pymodbus.logging] Processing: 0x0 0x2 0x0 0x0 0x0 0x3 0x1 0x84 0x4

2024-06-05 09:58:05.265 DEBUG (MainThread) [pymodbus.logging] Factory Response[132]

2024-06-05 09:58:05.265 DEBUG (MainThread) [pymodbus.logging] Getting transaction 2

2024-06-05 09:58:05.265 DEBUG (MainThread) [pymodbus.logging] Frame check, no more data!

2024-06-05 09:58:05.279 ERROR (MainThread) [homeassistant.components.modbus.modbus] Pymodbus: edpbox: Error: device: 1 address: 119 → pymodbus returned isError True

2024-06-05 09:58:09.719 DEBUG (MainThread) [pymodbus.logging] → transport: received eof

2024-06-05 09:58:09.720 DEBUG (MainThread) [pymodbus.logging] Connection lost comm due to None

2024-06-05 09:58:09.721 DEBUG (MainThread) [pymodbus.logging] callback_disconnected called: None

2024-06-05 09:58:09.722 DEBUG (MainThread) [pymodbus.logging] Wait comm 100.0 ms before reconnecting.

- name: "EDP Box - Potência Ativa" # 79
    unique_id: edp_box_potencia_activa_sensor
    slave: 1
    address: 121
    input_type: input
    count: 1
    data_type: custom
    structure: ">L"
    unit_of_measurement: W
    device_class: power
    scan_interval: 30

Não há garantias que o componente modbus do Home Assistant funcione correctamente.

Os 32bits da edpbox são non-standard.

Obrigado @nikito7 . Não resulta, apresenta o erro:
Logger: homeassistant.config
Source: config.py:1326
First occurred: 14:04:17 (1 occurrences)
Last logged: 14:04:17

Invalid config for ‘modbus’ at configuration.yaml, line 196: EDP Box - Potência Ativa: Size of structure is 4 bytes but count: 1 is 2 bytes ‘modbus->0->sensors->7’, got {‘name’: ‘EDP Box - Potência Ativa’, ‘unique_id’: ‘edp_box_potencia_activa_sensor’, ‘slave’: 1, ‘address’: 121, ‘input_type’: ‘input’, ‘count’: 1, ‘data_type’: ‘custom’, ‘structure’: ‘>L’, ‘unit_of_measurement’: ‘W’, ‘device_class’: ‘power’, ‘scan_interval’: 30}, please check the docs at https://www.home-assistant.io/integrations/modbus

Vou experimentar tambem com o Count=2 (mas acho que ja tinha tentado isto antes numa das dezenas de sugestões do ChatGPT).

Com count=2, o erro no log é apresentao:
2024-06-05 14:10:28.102 DEBUG (MainThread) [pymodbus.logging] Adding transaction 8

2024-06-05 14:10:28.103 DEBUG (MainThread) [pymodbus.logging] Resetting frame - Current Frame in buffer -

2024-06-05 14:10:28.103 DEBUG (MainThread) [pymodbus.logging] send: 0x0 0x8 0x0 0x0 0x0 0x6 0x1 0x4 0x0 0x79 0x0 0x2

2024-06-05 14:10:28.668 DEBUG (MainThread) [pymodbus.logging] recv: 0x0 0x8 0x0 0x0 0x0 0xb 0x1 0x4 0x8 0x0 0x0 0x2 0x2 0x0 0x0 0x0 0x0 old_data: addr=None

2024-06-05 14:10:28.668 DEBUG (MainThread) [pymodbus.logging] Processing: 0x0 0x8 0x0 0x0 0x0 0xb 0x1 0x4 0x8 0x0 0x0 0x2 0x2 0x0 0x0 0x0 0x0

2024-06-05 14:10:28.669 DEBUG (MainThread) [pymodbus.logging] Factory Response[ReadInputRegistersResponse’: 4]

2024-06-05 14:10:28.669 DEBUG (MainThread) [pymodbus.logging] Getting transaction 8

2024-06-05 14:10:28.669 DEBUG (MainThread) [pymodbus.logging] Frame check, no more data!

2024-06-05 14:10:28.872 ERROR (MainThread) [homeassistant.components.modbus.base_platform] Received 8 bytes, unpack error unpack requires a buffer of 4 bytes

Não resulta.

Não sei se é “EDP BOX”, estou a usar um ELFIN EW11, o nome EDP BOX veio das instruções que segui e usei o mesmo nome. De qualquer forma as configurações estão coerentes com o documento da especificação do protocolo da e-redes.

O pymodbus não suporta 32bits count 1. 4 bytes de uma só vez.

Obrigado.
Vou tentar seguir isto tentar correr dentro do docker container, não estou muito familiarizado com isto… se conseguir algum resultado informo.
Mais uma vez, obrigado pela ajuda

Podes tentar mas não compensa.

Esp8266 + rs485

Não me vou aventurar por agora. Isso ainda não esta ao meu alcance, não tenho know-how para me aventurar ainda e começar do zero com outra integração em tasmota.
Instalar outra versão Modbus no HA, parece que isso substitui componentes standard to modbus no homeassistant e imagino que iria ter problemas em actualizações ou não saberia resolver problemas que possam surgir.

Como ainda não tenho geração fotovoltaica e só tenho uma fase com tarifa simples, por agora vou usar os sensores que consigo obter no ELFIN e para a potencia activa/consumo momentanio vou usar uma formula num helper com template. Deixo o template para quem tiver com precisar e não se quiser dar ao trabalho:

{% set tensao = states(‘sensor.edp_box_tensao’) | float %}
{% set corrente = states(‘sensor.edp_box_corrente’) | float %}
{% set fator_potencia = states(‘sensor.edp_box_fator_de_potencia’) | float %}
{% set consumo = tensao * corrente * fator_potencia %}
{{ consumo }}

Aparentemente os valores parecem certos, mas não sei se a formula esta correta.

Bom dia,

Estou a usar o dispositivo feito pelo Tiago freire, e de há uns meses para cá deixou de conseguir ir buscar os valores da tensão, corrente, potência activa, entre outros . Mas consegue ler os totalizadores de consumo.

Contador: Landis GYR ZCXe110CRUOL3D2.03 S3 (PLC)

Alguém sabe porque poderá ter acontecido isto e uma possível solução?

Script no dispositivo:

>D 32
pin=0
pout=0
pi_d=0
po_d=0
hr=0
p:pi_m=0
p:po_m=0

;#after sensors init
>BS
smlj=0
tper=30
=>sensor53 r

;#every second
>S
if upsecs>20
and upsecs<30
{
smlj=1
tper=10
}

;#meter definition
>M 1
+1,3,m,1,9300,EB,1,8,r010400010001,r0104006C0007,r010400730007,r0104007A0006,r010400260003,r010400160006,r0104000B0004,r010400840003

1,=hClock
; 01
1,01040CUUuu@i0:1,Year,,Year,0
1,01040Cxxxxuu@i0:1,Month,,Month,0
1,01040Cxxxxxxuu@i0:1,Day,,Day,0
1,01040Cxxxxxxxxxxuu@i0:1,Clock,h,CH,0
1,01040Cxxxxxxxxxxxxuu@i0:1,Clock,m,CM,0
1,01040Cxxxxxxxxxxxxxxuu@i0:1,Clock,s,CS,0

1,=h<hr> Overview
; 6C
1,01040EUUuu@i1:10,Voltage L1,V,Voltage_P1,1
1,01040ExxxxUUuu@i1:10,Current L1,A,Current_P1,1
; 79
1,01041cx8x8x8UUuuUUuu@i2:1,Active Power Import,W,Power_P1,0
; 7A
1,01040eUUuuUUuu@i3:1,Active Power Export,W,Power_Export_P1,0
; 7B
1,01040exxxxxxxxUUuu@i3:1000,Power Factor,pf,PFactor_P1,3
; 7F
1,01040exxxxxxxxxxxxxxxxxxxxxxxxUUuu@i3:10,Frequency_P1,Hz,F,1


1,=h<hr>Energy
; 26
1,01040CUUuuUUuu@i4:1000,T1 Vazio (1),kWh,Energy_P1_R1,1
1,01040CxxxxxxxxUUuuUUuu@i4:1000,T2 Ponta (2),kWh,Energy_P1_R2,1
1,01040CxxxxxxxxxxxxxxxxUUuuUUuu@i4:1000,T3 Cheia (3),kWh,Energy_P1_R3,1
; 16
1,010418UUuuUUuu@i5:1000,Import,kWh,Energy_Imported_P1,3
1,010418xxxxxxxxUUuuUUuu@i5:1000,Export,kWh,Energy_Exported_P1,3

1,=h<hr>

; 0B

1,01040euu@i6:1,Tariff ,,Tariff_P1,0
1,01040exxUUuuUUuu@i6:1000,Contract T1,kVA,Tariff_P1_R1,2
1,01040exxxxxxxxxxUUuuUUuu@i6:1000,Contract T2,kVA,Tariff_P1_R2,2
1,01040exxxxxxxxxxxxxxxxxxUUuuUUuu@i6:1000,Contract T3,kVA,Tariff_P1_R3,2

1,=h<hr>

; 84

1,01040auu@i7:1,DCP,,DCP,0
1,01040axxUUuuUUuu@i7:1,DCP Q,,Q,0
1,01040axxxxxxxxxxUUuuUUuu@i7:100,DCP K,,K,1


#

+1,3,m,1,9300,EB,1,8,r010400010001,r0104006C0007,r010400730007,r0104007A0006,r010400260003,r010400160006,r0104000B0004,r010400840003

Estes pedidos são trifásicos, não funciona em todos os monofásicos


+1,3,mN1,1,9600,EB1,1,15,r010400010001,r0104006C0002,r010400160002,r010400260003,r010400790003,r0104007F0001,r0104000B0007,r01440601

; r01440601 Imp+Exp
; r01440301 Imp

1,=h<br>

; 01

1,01040Cx4xxuu@i0:1,Clock ,h,CH,0
1,01040Cx4xxxxuu@i0:1,Clock ,m,CM,0
1,01040Cx4xxxxxxuu@i0:1,Clock ,s,CS,0

1,=h<br>

; 6C

1,010404UUuu@i1:10,Voltage L1 ,V,VL1,1
1,010404xxxxUUuu@i1:10,Current L1 ,A,CL1,1

1,=h<br>

; 16

1,010408UUuuUUuu@i2:1000,%TE% Total Import ,kWh,TEI,3
1,010408x4UUuuUUuu@i2:1000,%TE% Total Export ,kWh,TEE,3

1,=h<br>

; 26

1,01040CUUuuUUuu@i3:1000,%TE% T1 Vazio ,kWh,TET1,3
1,01040Cx4UUuuUUuu@i3:1000,%TE% T2 Ponta ,kWh,TET2,3
1,01040Cx8UUuuUUuu@i3:1000,%TE% T3 Cheias ,kWh,TET3,3

1,=h<br>

; 79

1,01040aUUuuUUuu@i4:1,%AP% Import ,W,API,0
1,01040ax4UUuuUUuu@i4:1,%AP% Export ,W,APE,0
1,01040ax8UUuu@i4:1000,%PF% ,φ,PF,3

; 7F

1,010402UUuu@i5:10,Frequency ,Hz,FR,1

1,=h<br>

; 0B

1,01041Auu@i6:1,Tarifa,,Tariff,0
1,01041AxxUUuuUUuu@i6:1000,CT1,kVA,CT1,2
1,01041Ax12xxUUuuUUuu@i6:1000,CT4,kVA,CT4,2

1,=h<br>

; lp

; 01441d Imp+Exp
; 014411 Imp

1,01441dUUuu@i7:1,LP Year,,LP1_Y,0
1,01441dxxxxuu@i7:1,LP Month,,LP1_M,0
1,01441dxxxxxxuu@i7:1,LP Day,,LP1_D,0
1,01441dx4xxuu@i7:1,LP Hour,h,LP1_HH,0
1,01441dx4xxxxuu@i7:1,LP Minute,m,LP1_MM,0
;
1,01441dx8x4xxUUuuUUuu@i7:1000,LP Import Inc,kWh,LP3_IMP,3
1,01441dx16xxUUuuUUuu@i7:1000,LP 4,kWh,LP4,3
1,01441dx16x4xxUUuuUUuu@i7:1000,LP 5,kWh,LP5,3
1,01441dx16x8xxUUuuUUuu@i7:1000,LP Export Inc,kWh,LP6_EXP,3

#

Boas!

Andei algum tempo a martelar a minha integração do Elfin com o HA, e finalmente consegui uma configuração que funciona.

Estes erros apareceram depois de uma breaking change que foi introduzina há algumas releses atrás (no modbus), e pelo que tenho visto em vários foruns, tem afetado muita gente. Este erro manifestava-se por não poder definir a propriedade “count” quando se usavam tipos uint

Aqui segue a minha configuração.

Espero que ajude

Obrigado Nikito! Usei este script e funcionou às mil maravilhas!

Agora estou a tentar resolver um problema com reconnects de wifi… Está constantemente a reconectar ao wifi, centenas de vezes ao dia.

Se tiveres um router com band steering pode ser disso.

Ou fraco sinal.

Boa noite a todos.

Provavelmente por ser um nabo, estou a ter problemas a tentar integrar o HAN Module com o Home Assistant OS, para conseguir ver os dados referentes aos sensores dele via MQTT. Ele está bem configurado, o setup está bem feito, consigo que o meu MQTT broker vejas as messages que ele está a enviar (comprovado com o MQTT Explorer), mas agora nao estou a conseguir finalizar a parte de declarar as entities dentro do HA via configuration.yaml (se é que é lá que o devo fazer).

O MQTT broker que tenho é o Mosquitto, com o Addon oficial que se pode instalar diretamente no Home Assistant, e ao acrescentar os conteúdos que vejo nas instruçoes do git, tenho o seguint erro:

Alguém me consegue dar alguns pointers pf? É possível que isto já tenha sido abordado e respondido por aqui, mas nao consegui encontrar.

Obrigado!

Integração tasmota …

Desde já obrigado pela partilha da informação sobre os controladores de leitura da porta HAN dos SmartMeters da e-redes.
Após algum tempo a tentar perceber como “montar” um ESP/HAN consegui colocar a funcionar segundo os principios do tutorial do Tiago.
Consegui colocar a funcionar o script trifásico “basico” do nikito7 do tutorial do Tiago ao Janz B2801 GPRS 2017 com modem GSM ligado.
No entanto, resolvi testar o teu script mais avançado (pois o primeiro não tem energia exportada) e após colocar novos firmares noutro ESP8266 wemos mini D1, não consegui comunicar com o Janz. Mais tarde, percebi que o tutorial do Tiago no esquema de ligações usa softserial. Como tinha tentado também já o script avancado “EB3” do nikito7, reajustei o script para ir buscar as ligações RX/TX aos pinos do softserial. Consegui comunicar com o Janz, mas enquanto que com o script trifásico basico o ESP funcionou durante 4 dias sem problema (ESP8266 → TX/RX softserial), no script do nikito7 o ESP está instavel nas comunicações, embora conseguise ter leituras durante 3 horas em continuo… Para eliminar a instabilidade, decidi passar para o porta 3 RX e porta 1 TX (hardserial). Após alteração fisica e nos scripts “+1,3,m,0,9600,EB,1,…”, quando ligo o cabo rj12 ao Janz, o RX pisca quase em continuo, demonstrando saturação na comunicação. Verifiquei as ligações segundo o tutorial TTL-485 RX <-> RX GPIO3 ESP8266 mini D1 e TTL-485 TX <-> TX GPIO1 ESP8266 mini D1. Segundo o teu comentário, é necessário retirar o resistor junto ao RX. Será este o problema ? Existe algum feedback e uma solução ? Obrigado.


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


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