Integrar contadores inteligentes da EDP em Home Assistant

Não é preciso estar na rede inteligente.

Mas o pedido é feito via e-redes.pt.

Além que tem ter a ordem de activar a porta HAN.

Os “técnicos” só cumprem ordens.

Olá a todos.
Ontem actualizei o HA para a versão 2023.10 e apareceram problemas na leitura dos dados do contador E-REDES. Fizeram altercações no modbus, depois de remover da configuração as linhas “count:1” agora alguns valores não são lidos correctamente. Já alguém conseguiu resolver o problema? Encontrei várias pessoas com a mesma queixa (https://github.com/home-assistant/core/issues/101421). Alguma dica? Ou será melhor reverter para a versão 2023.9.2.

Que device RS485 estas a usar para ler o contador ?

Com a ajuda do @nikito7 que desenvolveu um custom_components modbus que faz Bypass_Size_Check , parece que está a funcionar…ainda em teste, até agora parece que está ok.

3 Curtiram

Bruno, estou com o mesmo problema :

Invalid config
The following integrations and platforms could not be set up:
** modbus*
Please check your config and [logs].

Alguém com dica para resolver ?

EDIT : confirmo que depois de retirar count=1 continua a nao funcionar para mim…

[https://github.com/nikito7/easyhan/blob/dev/bridge/custom-ha/Bypass_Size_Check.md]

Sensors uint32

      - 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
1 Curtiu

Eu tenho um elfin EE11A.
Obrigado… com a solução do @nikito7 ([https://github.com/nikito7/easyhan/blob/dev/bridge/custom-ha/Bypass_Size_Check.md]) esta a ler valores :slight_smile:

1 Curtiu

@amadeumagalhaes.
Eu estou a usar HA no docker. Entrei no docker (docker exec -it hass bash) e executei os comandos no ficheiro partilhado pelo nikito7 (https://github.com/nikito7/easyhan/blob/dev/bridge/custom-ha/Bypass_Size_Check.md). Depois modifiquei no yaml a entrada ‘data_type: custom’ e adicionei o
structure: “>L”

1 Curtiu

Boa tarde,
executei o comando que tens no link através do terminal no HASS OS e alterei as configurações de um dos sensores como tens especificado, mas dá-me este erro:

Configuração inválida!
Invalid config for [modbus]: EB2 Import: Size of structure is 4 bytes but count: 1 is 2 bytes @ data[‘modbus’][0][‘sensors’][3]. Got {‘name’: ‘EB2 Import’, ‘unique_id’: ‘eb2_import’, ‘slave’: 1, ‘address’: 22, ‘input_type’: ‘input’, ‘count’: 1, ‘data_type’: ‘custom’, ‘structure’: ‘>L’, ‘precision’: 2, ‘scale’: 0.001, ‘unit_of_measurement’: ‘kWh’, ‘device_class’: ‘energy’, ‘state_class’: ‘total_increasing’, ‘scan_interval’: 15}. (See /config/configuration.yaml, line 35).

Alguém me consegue ajudar com isto?

Vê se tens modbus em /config/custom_components/

Boa tarder. sim tenho @nikito7

Devem ter mudado alguma coisa.
Esse erro é noutro sitio

1 Curtiu

Boas,

Podes por favor indicar como fazes para obter o clock? Eu tentei com a seguinte config e nepias…

      - name: "EDP clock demo"
        unique_id: eb2_clock_demo
        slave: 1
        address: 1
        input_type: input
        count: 1
        data_type: custom
        structure: ">H7BhB"

Segunda questão para quem souber os meus sensores do contador estão sempre a dar valores e logo a seguir dão “Unavailable” e andam nisto constantemente.

Video que demonstra o problema

A minha config é a seguinte:

# Contador edp
modbus:
  - name: edp_box_1
    type: serial
    method: rtu
    port: /dev/ttyUSB0
    baudrate: 9600
    stopbits: 1
    bytesize: 8
    parity: N
    delay: 1
    timeout: 5
    retries: 5
    retry_on_empty: true
    message_wait_milliseconds: 200
    sensors:
    
      - name: 'EDP Box - Frequencia'
        scan_interval: 5
        slave: 1
        address: 127
        input_type: input
        unit_of_measurement: 'Hz'
        #count: 1
        scale: 0.1
        offset: 0
        precision: 2
        # long unsigned
        data_type: uint16
        unique_id: edpfreq

      - name: 'EDP Box - Tensao'
        scan_interval: 5
        slave: 1
        address: 108
        input_type: input
        unit_of_measurement: 'V'
        #count: 1
        scale: 0.1
        offset: 0
        precision: 1
        # long unsigned
        data_type: uint16
        device_class: voltage
        unique_id: edpvoltage


      - name: 'EDP Box - Corrente'
        scan_interval: 5
        slave: 1
        address: 109
        input_type: input
        unit_of_measurement: 'A'
        #count: 1
        scale: 0.1
        offset: 0
        precision: 1
        # long unsigned
        data_type: uint16
        device_class: current
        unique_id: edpcurrent


      - name: "EDP Box - Potencia Ativa"
        slave: 1
        address: 121
        #address: 115
        input_type: input
        count: 1
        data_type: custom
        structure: ">L"
        unit_of_measurement: 'W'
        device_class: power
        unique_id: edppowera


      - name: 'EDP Box - Fator de Potencia'
        scan_interval: 5
        slave: 1
        address: 123
        input_type: input
        unit_of_measurement: 'p.u.'
        #count: 1
        scale: 0.001
        offset: 0
        precision: 3
        # long unsigned
        data_type: uint16
        device_class: power_factor
        unique_id: edppowerf

      - name: 'ICP State L1'
        ## 0 para disconectado - 1 para conectado - 2 para preparado a reconectar
        scan_interval: 5
        slave: 1
        address: 132
        input_type: input
        count: 1
        data_type: custom
        structure: ">Bx"
        unique_id: edpstatel1


      - name: 'Tariff L1'
        ## 1 para Vazio - 2 para Ponta - 3 para Cheia
        scan_interval: 10
        slave: 1
        address: 11
        input_type: input
        count: 1
        data_type: custom
        structure: ">Bx"
        unique_id: edptarifl1

      - name: "EDP Box - Total Vazio" 
        scan_interval: 30
        slave: 1
        address: 38
        input_type: input
        count: 1
        data_type: custom
        structure: ">L"
        precision: 3
        scale: 0.001
        unit_of_measurement: kWh
        device_class: 'energy'
        state_class: total_increasing
        unique_id: edpenergyv


      - name: "EDP Box - Total Ponta" 
        scan_interval: 10
        slave: 1
        address: 39
        input_type: input
        count: 1
        data_type: custom
        structure: ">L"
        precision: 3
        scale: 0.001
        unit_of_measurement: kWh
        device_class: 'energy'
        state_class: total_increasing
        unique_id: edpenergyp

      - name: "EDP Box - Total Cheia"
        scan_interval: 10
        slave: 1
        address: 40
        input_type: input
        count: 1
        data_type: custom
        structure: ">L"
        precision: 3
        scale: 0.001
        unit_of_measurement: kWh
        device_class: 'energy'
        state_class: total_increasing
        unique_id: edpenergyt
        
      - name: "EDP Serial Number"
        slave: 1
        address: 2
        input_type: input
        count: 10  # Assuming 10 registers of 2 bytes each result in 20 bytes
        data_type: string
        #structure: ">20s"  # Use struct format for 20 bytes of data
        scan_interval: 10
        unique_id: edpserialn  # Unique ID for the sensor

      - name: "EDP clock demo"
        unique_id: eb2_clock_demo
        slave: 1
        address: 1
        input_type: input
        count: 1
        data_type: custom
        structure: ">H7BhB"

sensor:
## EDP BOX Tarifa - MODBUS
  - platform: template
    sensors:
      edp_box_tarifa:
        friendly_name: 'EDP Box - Tarifa'
        icon_template: "{{ 'mdi:counter' }}"
        value_template: >-
          {% set x = states('sensor.tariff_l1')|string %}
          {% if x == "1" %}
            {{ "Vazio" }}
          {% elif x == "2" %}
            {{ "Ponta" }}
          {% elif x == "3" %}
            {{ "Cheia" }}
          {% else %}
            {{ x }}
          {% endif %}

## EDP BOX Estado ICP - MODBUS
  - platform: template
    sensors:
      edp_box_estado_icp:
        friendly_name: 'EDP Box - Estado ICP'
        icon_template: "{{ 'mdi:flash' }}"
        value_template: >-
          {% set x = states('sensor.icp_state_l1')|string %}
          {% if x == "0" %}
            {{ "Desligado" }}
          {% elif x == "1" %}
            {{ "Ligado" }}
          {% elif x == "2" %}
            {{ "Preparado para religacao" }}
          {% else %}
            {{ x }}
          {% endif %}

Rtu tweak: 12 bytes

Mas não recomendo.

Não é a forma certa de o fazer.

Tudo o que tem mais de 2 bytes é count 1. Non-standard.

Apenas o Modbus TCP não tem essa limitação, por sorte.

Tens algum programa que permita testar comunicação TCP, para enviar pedidos e verificar respostas?
Estou a usar isto, mas recebo algumas respostas estranhas…\x02i , …\x00)\ :stuck_out_tongue:


import socket

server_ip = "192.168.1.139"
server_port = 9502

try:
    # Create a socket connection to the Modbus TCP server
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((server_ip, server_port))

        # Send the Modbus TCP request packet
        #s.send(request_packet)
        #        transIDf\protoID\Lenght \uId\fun\firsREG\num_REG\
        s.send(b'\x00\x01\x00\x02\x00\x06\x01\x04\x00\x07\x00\x01')  # (6C volt ; 0B tarifa; 07 interface; 0C POT MAX 6900 ; 26,27,28 energia) 

        #       transIDf\protoID\Lenght \uId\fun\nºby\Regist1\RegistX\
        # reply \x00\x01\x00\x02\x00\x06\x01\x04\x00 \x2C\x00\x01\x01

        # Receive the response (adjust the buffer size as needed)
        response = s.recv(1024)

        # Print the raw response bytes (you'll need to parse the response accordingly)
        print("Raw Response"  , response)

except Exception as e:
    print("Error:", e)

Encontrei um free e portable como gosto , qModMaster

Sim uso esse também.

Apenas para leituras:

[https://github.com/nikito7/edpbox-dev/tree/dev/modbus/moacir]

Não lhe deu nenhum erro quando executou o script?
Provavelmente não conseguiu aceder a core-master/homeassistant/components/modbus/

Isso faz download de um zip do HA core


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


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