Integrar Contadores EDP com Tasmota (Parte 1/2)

Tutorial de como integrar o contador ZIV da EDP com Tasmota.

Neste tutorial vamos abordar um pouco mais sobre a integração dos nossos contadores inteligentes com o Tasmota.
Desde já começamos por agradecer ao @ReDaLeRt , @nikito7 e ao @PDM por terem aberto o caminho para o desenvolvimento e implementação dos nossos contadores inteligentes com o Tasmota para obtenção de dados. Sem eles não teria sido possível ter tido o sucesso com os nossos contadores inteligentes, como temos hoje.
Obrigado !!!

Este Tutorial é especifico para os contadores ZIV, no entanto o mesmo poder-se-á aplicar a outros tipos de contador.

Em resumo, estes são os passos necessários:
1 - Ter um contador inteligente (ZIV)
2 - Ter instalado chicote na porta HAN (Rj12 cabo)
3 - NodeMCU (esp8266)
4 - Conversor RS485 to TTL
5 - Ligaçõoes do NodeMCU com o Conversor RS485 to TTL
6 - Flashar e configurar Tasmota

Em detalhe:
1- Será necessário ter um contador inteligente da EDP, neste caso vamos fazer o setup para os contadores ZIV:

3

2 - Instalar no contador um chicote RJ12 na porta HAN:

1

3 - Ter um NodeMCU (esp8266):
1

4 - Ter um Coversor RS485 to TTL:

1

5 - Ligações do NodeMCU com o Conversor RS485 to TTL:

no NodeMCU vamos usar o Hardware Serial Pins

A seguir, vamos ligar os 3.3V, GND, RX(GPIO3) e TX(GPIO1) do esp8266 com o 3.3V, GND, RX e TX do conversor RS485 to TTL:

RX ----- RX
TX ----- TX
GND —GND
3.3V ----3.3V

No conversor vamos ligar ao Rj12 da seguinte forma:
:warning: ATENÇÃO À POSIÇÃO DA FICHA :warning:

1

B- ----- B- (pin 3 ficha macho Rj 12)
A+ ----- A+ (pin 5 ficha macho Rj 12)
GND —GND (pin 1 ficha macho Rj 12)

6 - Flashar o ESP8266 com Tasmota:

Iremos utilizar uma .bin pré-compilada com o Tasmota, que nos é fornecida pelo o user @nikito7, que está disponível no seu GitHub:

De seguida, vamos configurar o Tasmota recorrendo ao uso de scripts Smart Meter Interface (SMI).
Este script vai-nos ajudar com o protocolo de comunicação MODBUS entre o Tasmota e o contador. Poderão encontrar informações sobre o SMI aqui:

https://tasmota.github.io/docs/Smart-Meter-Interface/

Seguidamente, passaremos à interface do Tasmota para configurar o mesmo com o script:

O próximo passo será colocar o nosso script e gravar conforme abaixo:

>D

>B

=>sensor53 r

smlj=0

tper=20  

>S

if upsecs>25
then
smlj=1
endif

>M 1

+1,3,mN2,1,9600,ZIV,1,15,0104006C,r010400260007,r010400790003,0104007F

1,=hVALORES INSTANTANEOS <hr>
1,010404UUuuxxxx@i0:10,Tensão,V,ZIV_Voltage,16 
1,010404xxxxUUuu@i0:10,Corrente,A,ZIV_Current,18


1,=h<br>TOTALIZADORES ENERGIA <hr>
1,01041cUUuuUUuuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@i1:1000,Vazio(1),kWh,ZIV_Energy_Vazio,16
1,01041cxxxxxxxxUUuuUUuuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@i1:1000,Ponta(2),kWh,ZIV_Energy_Ponta,16
1,01041cxxxxxxxxxxxxxxxxUUuuUUuuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@i1:1000,Cheia(3),kWh,ZIV_Energy_Cheia,16
1,01041cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxUUuuUUuu@i1:1000,TOTAL(1+2+3),kWh,ZIV_Energy_TOTAL,16


1,=h<br>POTENCIA <hr>
1,01040AUUuuUUuuxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@i2:1,Potência,W,ZIV_Power,16
1,01040AxxxxxxxxxxxxxxxxUUuuxxxxxxxxxxxxxxxxxxxx@i2:1000,Fator Potência,Pf,ZIV_PFactor,17


1,=h<br>FREQUENCIA <hr>
1,01040AUUuuxxxx@i3:10,Frequência,Hz,ZIV_Frequency,16

#

Vamos agora tentar perceber um pouco partes do script:

1

+1   - Número de contadores neste caso 1
 3   - O número do GPIO do RX usado no NodeMCU
mN2  - Tipo de comunicação do contador
9600 - Baudrate de comunicação usada
ZIV  - É simplesmente o nome de JsonPerfix que vai aparecer no vosso MQTT
1    - O número do GPIO do TX usado no NodeMCU
15  - É o número de  de incrementos em que (n * 100ms) de refresh rate , neste caso 1,5 segundos por pedido
0104006C,r010400260007,r010400790003,0104007F - são os vários pedidos que fazemos ao contador neste caso temos 4 pedidos

Mais abaixo no script é onde vamos descodificar a mensagem que o contador nos vais enviar:

1,010404UUuuxxxx@i0:10,Tensão,V,ZIV_Voltage,16
1,010404xxxxUUuu@i0:10,Corrente,A,ZIV_Current,18

Se quisermos fazer um debug aos logs de pedidos, que fazemos ao contador, podemos ir à consola do Tasmota e enviar o seguinte comando para ativar os logs:

Usar o seguinte comando na consola:
sensor53 d1

De seguida, deveremos visualizar o seguinte:

1

Como podemos observar, na seguinte imagem, temos um code HEX começado por > e outro começado por :

  • A linha que começa com o símbolo > corresponde ao nosso pedido que fazemos ao contador
  • A linha que começa com o símbolo : corresponde à resposta que o contador nos vai enviar

Caso obtenhamos resposta do contador deveremos desativar o log com o comando
sensor53 d0

Atenção! Se não desativarmos os logs, não vamos obter os dados em tempo real no GUI do Tasmota

Caso tudo tenha corrido como descrito, devemos ter o resultado final:

Neste tutorial só estamos a pedir ao contador os dados mais usados. Existem outros tipo de dados que podem ser pedidos ao nosso contador.

Seguem abaixo os vários links de informação usados para este tutorial:

https://tasmota.github.io/docs/Smart-Meter-Interface/

Este tutorial é a parte 1 de 2 partes

1 - Integrar Contadores EDP com Tasmota
2 - Integrar Contadores EDP com Homeassistant

10 Curtiram

O “Edit Script” mudou para os “Consoles”

@Encarnacao torna o titulo genérico se possivel.

Quem usa os gpios 3 e 1, ou o meu firmware, devia usar este tópico.

De qualquer forma as diferença do ZIV e Landis é só o mN2 vs mN1.

Usar mN2 implica firmware >= 9.3


20220817_161135

.

2 Curtiram

Viva boa tarde,

Estou a usar com sucesso este script. No entanto, precisava de mais dados para além daqueles que este script disponibiliza. Nomeadamente quantidade de energia exportada etc. No geral dados de exportação.
O meu contador é um GIV.

Alguém me consegue dar uma ajuda?

Obrigado!

OTA Update:

http://u.easyhan.pt/han/tasmota4M.bin.gz


Script:

{https://github.com/nikito7/easyhan/blob/dev/edpbox/eb1-script.js}

  • limpar o script

  • deixar só >D 48

  • save (eventualmente pode fazer auto reboot)

  • limpar

  • colar o novo

  • save

Olá, obrigado pela resposta.

Fiz o procedimento, mas tenho a maioria dos valores a zero:

Mudar no script para mN2

+1,3,mN1,1,9600,EB1,1,15,...

Funcionou! Obrigado!

1 Curtiu

Boa noite

Ando de volta do meu contador ZIV e não há maneira de colocar a funcionar…

Só a e-redes pode resolver isso…

Se tens dúvidas testa o hardware noutro contador com a HAN funcional.

Deve logo piscar o TX e RX.

Discord

Já liguei para E-redes, agora é aguardar infelizmente…
@nikito7 obrigado pela tua ajuda

1 Curtiu

Problema resolvido… O problema era do contador ZIV tinha a porta queimada… trocaram por um Landis…e ficou logo a funcionar.

Obrigado principalmente @nikito7 e @Jose_Alves pela vossa enorme paciência e ajuda.

Grande abraço a todos e um Santo Natal.

1 Curtiu

Alterando o script para:

+1,14,mN2,1,9600,XXX,5,15,0104006C,r010400260007,r010400790003,0104007F

Seria possível utilizá-lo com um KAIFA MA109P, e um D1 min com os gpios 14 e 5?

edit:

Parece que não…


13:02:24.382 cnt=99
13:02:25.381 MQT: tele/edpbox_CF7E22/STATE = {"Time":"2023-02-10T13:02:25","Uptime":"0T00:02:28","UptimeSec":148,"Vcc":3.106,"Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":26,"MqttCount":1,"Wifi":{"AP":1,"SSId":"SW","BSSId":"20:0D:B0:8D:E5:2B","Channel":11,"Mode":"11n","RSSI":34,"Signal":-83,"LinkCount":1,"Downtime":"0T00:00:03"}}
13:02:25.398 MQT: tele/edpbox_CF7E22/SENSOR = {"Time":"2023-02-10T13:02:25","EB1":{"CH":0,"CM":0,"CS":0,"Voltage":0.0,"Current":0.0,"TEI":0.00,"TEE":0.00,"TET1":0.00,"TET2":0.00,"TET3":0.00,"Power":0,"Active Power Export":0,"Factor":0.000,"Frequency":0.0,"Tariff":0,"CT1":0.00,"LP1_Y":0,"LP1_M":0,"LP1_D":0,"LP1_HH":0,"LP1_MM":0,"LP3_IMP":0,"LP6_EXP":0}}
13:02:30.356 CMD: sensor53 d1
13:02:30.363 MQT: stat/edpbox_CF7E22/RESULT = {"Time":"2023-02-10T13:02:30","SML":{"CMD":"dump: 1"}}
13:02:31.251 > 01 04 00 7f 00 02 40 13 
13:02:32.774 > 01 04 00 0b 00 04 80 0b 
13:02:34.257 > 01 44 06 01 83 ad 
13:02:35.379 MQT: tele/edpbox_CF7E22/STATE = {"Time":"2023-02-10T13:02:35","Uptime":"0T00:02:38","UptimeSec":158,"Vcc":3.106,"Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":99,"MqttCount":1,"Wifi":{"AP":1,"SSId":"SW","BSSId":"20:0D:B0:8D:E5:2B","Channel":11,"Mode":"11n","RSSI":30,"Signal":-85,"LinkCount":1,"Downtime":"0T00:00:03"}}
13:02:35.396 MQT: tele/edpbox_CF7E22/SENSOR = {"Time":"2023-02-10T13:02:35","EB1":{"CH":0,"CM":0,"CS":0,"Voltage":0.0,"Current":0.0,"TEI":0.00,"TEE":0.00,"TET1":0.00,"TET2":0.00,"TET3":0.00,"Power":0,"Active Power Export":0,"Factor":0.000,"Frequency":0.0,"Tariff":0,"CT1":0.00,"LP1_Y":0,"LP1_M":0,"LP1_D":0,"LP1_HH":0,"LP1_MM":0,"LP3_IMP":0,"LP6_EXP":0}}
13:02:35.782 > 01 04 00 01 00 01 60 0a 
13:02:37.263 > 01 04 00 6c 00 02 b1 d6 
13:02:38.881 > 01 04 00 16 00 02 90 0f 
13:02:40.358 > 01 04 00 26 00 03 51 c0 
13:02:41.970 > 01 04 00 79 00 03 61 d2 
13:02:43.703 > 01 04 00 7f 00 02 40 13 
13:02:45.224 > 01 04 00 0b 00 04 80 0b 
13:02:45.381 MQT: tele/edpbox_CF7E22/STATE = {"Time":"2023-02-10T13:02:45","Uptime":"0T00:02:48","UptimeSec":168,"Vcc":3.106,"Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":100,"MqttCount":1,"Wifi":{"AP":1,"SSId":"SW","BSSId":"20:0D:B0:8D:E5:2B","Channel":11,"Mode":"11n","RSSI":30,"Signal":-85,"LinkCount":1,"Downtime":"0T00:00:03"}}
13:02:45.401 MQT: tele/edpbox_CF7E22/SENSOR = {"Time":"2023-02-10T13:02:45","EB1":{"CH":0,"CM":0,"CS":0,"Voltage":0.0,"Current":0.0,"TEI":0.00,"TEE":0.00,"TET1":0.00,"TET2":0.00,"TET3":0.00,"Power":0,"Active Power Export":0,"Factor":0.000,"Frequency":0.0,"Tariff":0,"CT1":0.00,"LP1_Y":0,"LP1_M":0,"LP1_D":0,"LP1_HH":0,"LP1_MM":0,"LP3_IMP":0,"LP6_EXP":0}}
13:02:46.920 > 01 44 06 01 83 ad 
13:02:48.511 > 01 04 00 01 00 01 60 0a 
13:02:50.033 > 01 04 00 6c 00 02 b1 d6 
13:02:51.644 > 01 04 00 16 00 02 90 0f 
13:02:53.121 > 01 04 00 26 00 03 51 c0 
13:02:54.645 > 01 04 00 79 00 03 61 d2 

13:03:15.361 MQT: tele/edpbox_CF7E22/STATE = {"Time":"2023-02-10T13:03:15","Uptime":"0T00:03:18","UptimeSec":198,"Vcc":3.106,"Heap":15,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":99,"MqttCount":1,"Wifi":{"AP":1,"SSId":"SW","BSSId":"20:0D:B0:8D:E5:2B","Channel":11,"Mode":"11n","RSSI":38,"Signal":-81,"LinkCount":1,"Downtime":"0T00:00:03"}}
13:03:15.377 MQT: tele/edpbox_CF7E22/SENSOR = {"Time":"2023-02-10T13:03:15","EB1":{"CH":0,"CM":0,"CS":0,"Voltage":0.0,"Current":0.0,"TEI":0.00,"TEE":0.00,"TET1":0.00,"TET2":0.00,"TET3":0.00,"Power":0,"Active Power Export":0,"Factor":0.000,"Frequency":0.0,"Tariff":0,"CT1":0.00,"LP1_Y":0,"LP1_M":0,"LP1_D":0,"LP1_HH":0,"LP1_MM":0,"LP3_IMP":0,"LP6_EXP":0}}
13:03:15.646 > 01 04 00 16 00 02 90 0f 
13:03:17.123 > 01 04 00 26 00 03 51 c0 
13:03:18.647 > 01 04 00 79 00 03 61 d2 
13:03:20.153 > 01 04 00 7f 00 02 40 13 
13:03:21.627 > 01 04 00 0b 00 04 80 0b 

Kaifa usa mN1.

mN2 requer gpio 3 e 1.

Sim, já tinha alterado mN2>mN1.

Mas utilizando um D1 mini e os gpio 14 & 5 continua tudo em 0s.


Nem mesmo usando um D1 mini com o script do Tiago está a dar. :disappointed:

Isto pode parecer uma pergunta um pouco parva mas por vezes existe alguma confusão em relação a pinos por isso vou fazer na mesma…

Por acaso não estás a fazer confusão entre D1=GPIO1, D2=GPIO2, etc? É que segundo o pinout do D1 mini o GPIO14=D5 e o GPIO5=D1.

True!

Mas não, estou a usar D5 (gpio14) para RX e D1 (gpio5) para TX.

1 Curtiu

Consegui por a funcionar; depois de trocar o conversor RS485 to TTL.

Mas apenas estou a conseguir a leitura de dados com o firmware (versão 9.1.0) & script do tiagofreire-pt. Mas como esse não tem dados do sistema fotovoltaico…

Experimentando com o firmware pré-complicado do @nikito7 (Easy HAN 4M-12.3.1-1 / Tasmota 12.3.1 by Theo Arends) continuo a 0s.

Tenho de alterar mais alguma coisa no script?
Actualmente, apenas alterei os dados de gpio:

+1,14,mN1,1,9600,EB1,5,15,r010400010001,r0104006C0002,r010400160002,...

E guardou o script?

Para alterar é preciso desactivar primeiro, e restart

Sim, aquilo é um copy&past do script já depois do restart.


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


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