Integrar Contadores EDP com Homeassistant (Parte 2)

Seguindo a sequência do primeiro post

Integrar Contadores EDP com Tasmota (Parte 1/2)

Vamos agora integrar o Tasmota com o Home Assistant usando uma diferente abordagem

Vamos criar o nosso próprio device usando o MQTT e NodeRed usando a abordagem do nosso amigo @pmfernandes .
Vamos criar tópicos no MQTT onde vamos adicionar toda a informação para personalizar os nossos sensores e retirar a informação pretendida

para este tutorial vamos necessitar de

  • NodeRed
  • Integracao MQTT

Vamos à consola do contador e vamos analisar o exemplo de este código

a partir deste código conseguimos ver o nosso payload de json

"ZIV":{"ZIV_Power":328}

mais tarde iremos retirar a informação de cada MQTT menssagem usando o

"value_template":" {{ value_json.ZIV.ZIV_Power|int }}"
:slight_smile:

Vamos começar por criar um ficheiro com o nome de edp_ziv.yaml
ficheiro este que será posto na pasta /config/www
dentro deste ficheiro vamos colocar o seguinte
Atençao se tiverem topicos e payloads diferentes vão ter de configurar de acordo com o vosso setup

Criamos o nosso device

devices:
  - device: '{"manufacturer": "Encarnacao","identifiers": ["7ae29cde-e902-4342-8e3a-883b6b091234"],"model": "ZIV","name": "Contador EDP ZIV","sw_version": "1.0.0.0"}'

de seguida vamos criar os nosso tópicos, onde iremos personalizar o nosso sensor e ir buscar os dados pretendidos

  - topic: homeassistant/sensor/edp_contador_voltage/config
    payload: '{"name": "EDP ZIV Contador Voltage","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Power|int }}","unit_of_measurement": "V","unique_id": "b357d05e-30af-4f82-ae31-3ee225746a89","device_class":"voltage","device": ##device##}'
    retain: true

:warning: Atenção como referido acima vao ter de configurar de acordo com os vossos setups, as partes mais importantes que terão de estar de acordo como o vosso setup é

"state_topic": "tele/edp_ziv_contador/SENSOR"
"value_template":" {{ value_json.ZIV.ZIV_Power|int }}"

agora é fazer o codigo para todos os sensores que queremos integrar no HA
no final quando tudo estiver concluído, teremos o seguinte código:

devices:
  - device: '{"manufacturer": "Encarnacao","identifiers": ["7ae29cde-e902-4e72-8e3a-883b6b091234"],"model": "ZIV","name": "Contador EDP ZIV","sw_version": "1.0.0.0"}'
    topics:
      - topic: homeassistant/sensor/edp_contador_voltage/config
        payload: '{"name": "EDP ZIV Contador Voltage","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Voltage|int }}","unit_of_measurement": "V","unique_id": "b357d05e-30af-4f82-ae31-3ee225746a89","device_class":"voltage","device": ##device##}'
        retain: true
        
      - topic: homeassistant/sensor/edp_contador_current/config
        payload: '{"name": "EDP ZIV Contador Amps","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Current|float }}","unit_of_measurement": "A","unique_id": "b357d05e-30af-4f82-ae31-3ee225746132","device_class":"current","device": ##device##}'
        retain: true

      - topic: homeassistant/sensor/edp_contador_power_factor/config
        payload: '{"name": "EDP ZIV Contador Power_Factor","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_PFactor|float }}","unit_of_measurement": "Pf","unique_id": "b357d05e-323f-4f82-ae31-3ee225746132","device_class":"power_factor","device": ##device##}'
        retain: true
        
      - topic: homeassistant/sensor/edp_contador_active_power/config
        payload: '{"name": "EDP ZIV Contador Watts","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Power|int }}","unit_of_measurement": "W","unique_id": "b334d05e-323f-4f82-ae31-3ee225746132","device_class":"power","device": ##device##}'
        retain: true

      - topic: homeassistant/sensor/edp_contador_frequency/config
        payload: '{"name": "EDP ZIV Contador Frequency","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Frequency|float }}","unit_of_measurement": "Hz","icon":"mdi:pulse","unique_id": "b334d05e-323f-4f82-ae31-3ee223446132","device": ##device##}'
        retain: true

      - topic: homeassistant/sensor/edp_contador_energia_vazio/config
        payload: '{"name": "EDP ZIV Contador Vazio","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Energy_Vazio|int }}","unit_of_measurement": "kWh","icon":"mdi:transmission-tower","unique_id": "b334d05e-323f-4f82-ae31-3ee223434132","device": ##device##}'
        retain: true
        
      - topic: homeassistant/sensor/edp_contador_energia_ponta/config
        payload: '{"name": "EDP ZIV Contador Ponta","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Energy_Ponta|int }}","unit_of_measurement": "kWh","icon":"mdi:transmission-tower","unique_id": "b334d05e-323f-4f82-ae31-3e3453446132","device": ##device##}'
        retain: true
        
      - topic: homeassistant/sensor/edp_contador_energia_cheia/config
        payload: '{"name": "EDP ZIV Contador Cheia","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Energy_Cheia|int }}","unit_of_measurement": "kWh","icon":"mdi:transmission-tower","unique_id": "b334d05e-323f-4f82-ae22-3e3453446132","device": ##device##}'
        retain: true 


      - topic: homeassistant/sensor/edp_contador_energia_total/config
        payload: '{"name": "EDP ZIV Contador Total","state_topic": "tele/edp_ziv_contador/SENSOR","value_template":" {{ value_json.ZIV.ZIV_Energy_TOTAL|int }}","unit_of_measurement": "kWh","icon":"mdi:transmission-tower","unique_id": "b334d05e-323f-4f82-ae31-3e3451116132","device": ##device##}'
        retain: true

de seguida vamos adicionar o seguinte no configuration.yaml para nos permiter aceder à localização do ficheiro criado

homeassistant:
  allowlist_external_dirs:
    - /config/www

vamos agora preparar a nossa flow no NodeRed a qual nos vai enviar o código criado para nos criar o device com os sensores:

[{"id":"e4d3168d.32cc48","type":"yaml","z":"588bf003.f0a66","property":"payload","name":"","x":730,"y":1260,"wires":[["debd4fe0.ed1c2"]]},{"id":"eac49781.60a6e8","type":"change","z":"588bf003.f0a66","name":"Prepare Message to Publish","rules":[{"t":"set","p":"topic","pt":"msg","to":"payload.topic","tot":"msg"},{"t":"set","p":"retain","pt":"msg","to":"payload.retain","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"payload.payload","tot":"msg"},{"t":"change","p":"payload","pt":"msg","from":"##device##","fromt":"str","to":"deviceInformation","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":800,"y":1340,"wires":[["fd8efc62.36f71"]]},{"id":"16852818.c21ca8","type":"inject","z":"588bf003.f0a66","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":270,"y":1260,"wires":[["f9faa267.55683"]]},{"id":"a4efe830.f2f6d8","type":"splitter","z":"588bf003.f0a66","name":"Topics | Splitter","property":"payload.topics","x":560,"y":1340,"wires":[["eac49781.60a6e8"]]},{"id":"355f7b1a.fd2bc4","type":"change","z":"588bf003.f0a66","name":"Save Device Information","rules":[{"t":"set","p":"deviceInformation","pt":"msg","to":"payload.device","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":330,"y":1340,"wires":[["a4efe830.f2f6d8"]]},{"id":"debd4fe0.ed1c2","type":"splitter","z":"588bf003.f0a66","name":"Devices | Splitter","property":"payload.devices","x":910,"y":1260,"wires":[["355f7b1a.fd2bc4"]]},{"id":"fd8efc62.36f71","type":"mqtt out","z":"588bf003.f0a66","name":"","topic":"","qos":"","retain":"","broker":"afc49ed5.67b27","x":1020,"y":1340,"wires":[]},{"id":"f9faa267.55683","type":"http request","z":"588bf003.f0a66","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://192.168.1.100:8123/local/edp_ziv.yaml","tls":"","persist":false,"proxy":"","authType":"","x":560,"y":1260,"wires":[["e4d3168d.32cc48"]]},{"id":"afc49ed5.67b27","type":"mqtt-broker","name":"","broker":"192.168.1.100","port":"1883","tls":"","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

vão precisar de instalar a node splitter node-red-contrib-splitter

1
nesta flow só vamos precisar de alterar o http request node
1

na Url vão mudar para o vosso IP
:warning: Atencão para quem usa duckdns vao ter de por a url com https

vamos fazer um deploy para actualizar as mudanças no NR

e vamos clicar no inject node para enviar a informação
1

vamos agora às integrações e na integracao MQTT ver se tudo correu bem, se sim já devemos ter lá o nosso próprio device

Este tutorial é a parte 2

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

4 Curtiram
; switch
Publish2 homeassistant/switch/nikito7-EB1/restart/config {"name":"EB1 ESP Restart","unique_id":"EB1_ESP_Switch","command_topic":"cmnd/edpbox1/restart","payload_on":"1","payload_off":"1","icon":"mdi:restart","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; sensor
; esp
Publish2 homeassistant/sensor/nikito7-EB1/uptime/config {"name":"EB1 ESP Uptime","unique_id":"EB1_ESP_Uptime","state_topic":"tele/edpbox1/STATE","value_template":"{{ ( value_json.UptimeSec / 3600 ) | round(1) }}","unit_of_measurement":"h","icon":"mdi:alarm","availability_topic":"tele/edpbox1/LWT","payload_available":"Online","payload_not_available":"Offline","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/freeheap/config {"name":"EB1 ESP Free Heap","unique_id":"EB1_ESP_Heap","state_topic":"tele/edpbox1/STATE","value_template":"{{ value_json.Heap }}","unit_of_measurement":"kB","icon":"mdi:chip","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/signal/config {"name":"EB1 ESP Signal","unique_id":"EB1_ESP_Signal","state_topic":"tele/edpbox1/STATE","value_template":"{{ value_json.Wifi.Signal }}","unit_of_measurement":"dB","device_class":"signal_strength","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/vcc/config {"name":"EB1 ESP Vcc","unique_id":"EB1_ESP_Vcc","state_topic":"tele/edpbox1/STATE","value_template":"{{ value_json.Vcc|float(0.000) }}","unit_of_measurement":"V","device_class":"voltage","state_class":"measurement","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; clock
Publish2 homeassistant/sensor/nikito7-EB1/clockh/config {"name":"EB1 Clock H","unique_id":"EB1_Clock_H","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% if value_json.EB1.CH is defined %%} {{ value_json.EB1.CH }} {%% else %%} {{ states('sensor.eb1_clock_h') }} {%% endif %%}","icon":"mdi:clock","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/clockm/config {"name":"EB1 Clock M","unique_id":"EB1_Clock_M","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% if value_json.EB1.CM is defined %%} {{ value_json.EB1.CM }} {%% else %%} {{ states('sensor.eb1_clock_m') }} {%% endif %%}","icon":"mdi:clock","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/clock/config {"name":"EB1 Clock","unique_id":"EB1_Clock","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% if value_json.EB1.CS is defined %%} {%% set hh = states('sensor.eb1_clock_h')|int(0) %%} {%% set mm = states('sensor.eb1_clock_m')|int(0) %%} {%% set ss = value_json.EB1.CS|int(0) %%} {{ '{0:02d}'.format(hh) + ':' + '{0:02d}'.format(mm) + ':' + '{0:02d}'.format(ss) }} {%% endif %%}","icon":"mdi:clock","device":{"identifiers":"nikito7-EB1"}}
Publish2 homeassistant/sensor/nikito7-EB1/clockesp/config {"name":"EB1 ESP Clock","unique_id":"EB1_ESP_Clock","state_topic":"tele/edpbox1/SENSOR","value_template":" {%% if value_json.Time is defined %%} {{ value_json.Time.split('T')[1]|string }} {%% endif %%}","icon":"mdi:clock","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; Voltage
Publish2 homeassistant/sensor/nikito7-EB1/volt/config {"name":"EB1 Voltage L1","unique_id":"EB1_VolL1","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json['EB1']['Voltage']|float(0) %%} {%% if x > 0 %%} {{ x }} {%% endif %%}","unit_of_measurement":"V","device_class":"voltage","state_class":"measurement","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; Current
Publish2 homeassistant/sensor/nikito7-EB1/current/config {"name":"EB1 Current L1","unique_id":"EB1_CurL1","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json['EB1']['Current']|float(0) %%} {%% if x > -1 %%} {{ x }} {%% endif %%}","unit_of_measurement":"A","device_class":"current","state_class":"measurement","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; Factor
Publish2 homeassistant/sensor/nikito7-EB1/pfactor/config {"name":"EB1 Power Factor","unique_id":"EB1_PowFac","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json['EB1']['Factor']|float(0) %%} {%% if x > -1 %%} {{ x }} {%% endif %%}","unit_of_measurement":"pu","device_class":"power_factor","state_class":"measurement","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; Power
Publish2 homeassistant/sensor/nikito7-EB1/powimp/config {"name":"EB1 Active Power Import","unique_id":"EB1_ActPow","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json['EB1']['Power']|int(0) %%} {%% if x > -1 %%} {{ x }} {%% endif %%}","unit_of_measurement":"W","device_class":"power","state_class":"measurement","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/powexp/config {"name":"EB1 Active Power Export","unique_id":"EB1_ActPowExp","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json['EB1']['Active Power Export']|int(0) %%} {%% if x > -1 %%} {{ x }} {%% endif %%}","unit_of_measurement":"W","device_class":"power","state_class":"measurement","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; Frequency
Publish2 homeassistant/sensor/nikito7-EB1/freq/config {"name":"EB1 Frequency","unique_id":"EB1_Frequency","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json.EB1.Frequency|float(0) %%} {%% if x > 0 %%} {{ x }} {%% endif %%}","unit_of_measurement":"Hz","device_class":"frequency","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; Tarifas kWh
Publish2 homeassistant/sensor/nikito7-EB1/tt1/config {"name":"EB1 T1 Vazio","unique_id":"EB1_TotEneT1","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json.EB1.TET1|float(0) %%} {%% if x > 0 %%} {{ x }} {%% endif %%}","unit_of_measurement":"kWh","device_class":"energy","state_class":"total_increasing","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/tt2/config {"name":"EB1 T2 Ponta","unique_id":"EB1_TotEneT2","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json.EB1.TET2|float(0) %%} {%% if x > 0 %%} {{ x }} {%% endif %%}","unit_of_measurement":"kWh","device_class":"energy","state_class":"total_increasing","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/tt3/config {"name":"EB1 T3 Cheias","unique_id":"EB1_TotEneT3","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json.EB1.TET3|float(0) %%} {%% if x > 0 %%} {{ x }} {%% endif %%}","unit_of_measurement":"kWh","device_class":"energy","state_class":"total_increasing","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; Total kWh
Publish2 homeassistant/sensor/nikito7-EB1/totalimp/config {"name":"EB1 Import","unique_id":"EB1_TotEneImp","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json.EB1.TEI|float(0) %%} {%% if x > 0 %%} {{ x }} {%% endif %%}","unit_of_measurement":"kWh","device_class":"energy","state_class":"total_increasing","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
Publish2 homeassistant/sensor/nikito7-EB1/totalexp/config {"name":"EB1 Export","unique_id":"EB1_TotEneExp","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json.EB1.TEE|float(0) %%} {%% if x > 0 %%} {{ x }} {%% endif %%}","unit_of_measurement":"kWh","device_class":"energy","state_class":"total_increasing","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito7"}}
; Tarifa
Publish2 homeassistant/sensor/nikito7-EB1/tarifa/config {"name":"EB1 Tariff","unique_id":"EB1_Tariff","state_topic":"tele/edpbox1/SENSOR","value_template":"{%% set x = value_json.EB1.Tariff|int(0) %%} {%% if x == 1 %%} {{ 'Vazio' }} {%% elif x == 2 %%} {{ 'Ponta' }} {%% elif x == 3 %%} {{ 'Cheias' }} {%% endif %%}","icon":"mdi:counter","device":{"identifiers":"nikito7-EB1","name":"EB1","model":"Easy HAN RS485","manufacturer":"nikito"}}
; eof

UfsRun discovery.txt 

Em 2 esp funciona. Noutro não aceita qualquer ficheiro…

Boas malta,

Nao bastaria escrever na consola “SetOption19 0” para ter logo tudo no Home Assistant?
Eu testei e funcionou… o unico problema é que nao temos aquele if para convertar a tarifa para texto. Se eu conseguisse fazer isso no script ficava logo tudo limpinho.

Recomendo usar os sensores kWh em yaml.

Quanto à tarifa:

Obrigado! Vou testar isso.
Aconselhas o yaml por algum motivo em particular?

Eu já meti com os teus scripts de auto-discovery e está top :slight_smile:

1 Curtiu

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


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