Integrar contadores inteligentes da EDP em Home Assistant

ou seija de acordo com o que estou a perceber o problema seria
com um pedido normal do tipo unsigned long ele mada 1 pedido de 4 bytes numa register
e a EDP usa double long unsign e nao temos opçao de pedir 2 pedidos de 4 bytes a 2 registers double long unsign
e mesmo que se pedirmos por exemplo >LL ou >Lxxxx que seria as 8 bytes nao ia dar porque mandas 8 bytes num pedido numa so register.
Entao com a unit32 , 4 bytes em dois pedidos 2 registers, count 2 e data type unit32 resolvia

Se o HA adicionar opção de unit32

É só um register

Com uint o ha vai esperar apenas 2 bytes

E a resposta é uint32 4 bytes

Vai sempre dar erro sobre o tamanho…

O correcto será:

  data_type: uint32
  count: 1

Simplesmente, mas alguém o terá de fazer


( Também existe uint32 de dois registers uint16
Mas não é o caso. Nessa situação o count 2 seria suficiente, com >L )

1 Curtiu

da para na issue do git pores o exemplo de e yaml e descreveres melhor oque é suposto de acontecer e o que acontece la no git hub para ver se alguém pega naquilo?

Tasmota: Serial to TCP bridge

@nikito7 parace que com a issue nao se chegou a lado nenhum

      - name: Modbus_Vazio_test
        input_type: input
        data_type: string     
        slave: 1
        count: 1
        address: 38
        unit_of_measurement: 'kWh'

nao faço ideia como processar a string

sensor.modbus_vazio_test: <!+

parece que foi boa tentativa

Com um template, estilo os do mqtt

se tiveres por ai algum exemplo era fixe?

Mas a string aparece no HA? E não dá erro?

Quanto ao count é rigido.

Considera que um register só tem 2 bytes.

nao da erro da valores tipo

s d etc…
1

Converte para ascii…

Era preciso voltar a hex

E depois decimal…

por exemplo esse ascii to dec = 1 125

O que usas como bridge?

Protoss-PW11
TCP server

A rigidez do código do home assistant, em que 1 register tem obrigatoriamente 2 bytes.
Não deixa fazer grandes alterações…

Ou então é do próprio pymodbus

E a parte do string converte para ascii

sem duvida é uma pena que por causa the um sanity check que faz comparações nao possamos usar o componente official quando se removeres aquelas linhas funciona perfeitamente

Na dev acho que nem isso funciona

Isso é apenas um erro

E o codigo a seguir nao me parece essencial

Eu com o uint no voltage e current

Consigo fazer todo o tipo de brincadeiras

Como criar templates

E fazes só um request e depois split

Sem uint32 não dá que eu saiba para descodificar 4 bytes

Parece que o standard seria:

Address 108 voltage 1° parte 2 bytes
Address 109 segunda parte 2 bytes

Logicamente na edpbox não é assim

O 109 é current

Para isso tinha de saltar um register

108 - voltage

110 - current

E por fim: no home assistant faz todos os pedidos individualmente

sem o check sanity no componente basta por tipo isto

     - name: Modbus_Active Cheia
        input_type: input
        data_type: custom
        structure: ">L"
        precision: 0
        scale: 0.001
        offset: 0           
        count: 1        
        slave: 1
        address: 40
        unit_of_measurement: 'kWh'

      - name: Modbus_Total
        input_type: input
        data_type: custom
        structure: ">L"
        precision: 0
        scale: 0.001
        offset: 0         
        slave: 1
        count: 1 
        address: 44
        unit_of_measurement: 'kWh'

e temos logo tudo sem stress
1

tivemos naquela issue ali uma boa chance, mas infelizmente ele nao vai mudar nada porque a maneira de funcionamento nao esta de acordo com os parâmetros do modbus protocolo

já vi que tás de volta á carga :slightly_smiling_face:

A ver se ao menos ele tira o check no custom

O struct tem tanta coisa boa :slight_smile:

Isso do sanity check na DEV nunca funcionou
Ou fiz asneira algures

Eles tem alterado muita coisa nos ultimos dias

E criado novos bugs

A minha bridge é o tasmota rtuovertcp

Ainda não há a pretendida solução para os 4 bytes.

Mas podes compactar registers com 2 bytes

# (...)

modbus:

  - name: edpbox1
    type: rtuovertcp
    host: 10.1.0.40
    port: 8888

    sensors:

      - name: "RTU1 X108"
        slave: 1
        address: 108
        input_type: input
        count: 7
        data_type: custom
        structure: ">7h"

sensor rtu1x:

  - platform: template
    sensors:

      rtu1_vol_l1:
        friendly_name: "RTU1 Voltage L1"
        value_template: >-
          {{ states('sensor.rtu1_x108').split(',')[0] | int / 10 }}
        unit_of_measurement: "V"

      rtu1_cur_l1:
        friendly_name: "RTU1 Current L1"
        value_template: >-
          {{ states('sensor.rtu1_x108').split(',')[1] | int / 10 }}
        unit_of_measurement: "A"

      rtu1_vol_l2:
        friendly_name: "RTU1 Voltage L2"
        value_template: >-
          {{ states('sensor.rtu1_x108').split(',')[2] | int / 10 }}
        unit_of_measurement: "V"

      rtu1_cur_l2:
        friendly_name: "RTU1 Current L2"
        value_template: >-
          {{ states('sensor.rtu1_x108').split(',')[3] | int / 10 }}
        unit_of_measurement: "A"

      rtu1_vol_l3:
        friendly_name: "RTU1 Voltage L3"
        value_template: >-
          {{ states('sensor.rtu1_x108').split(',')[4] | int / 10 }}
        unit_of_measurement: "V"

      rtu1_cur_l3:
        friendly_name: "RTU1 Current L3"
        value_template: >-
          {{ states('sensor.rtu1_x108').split(',')[5] | int / 10 }}
        unit_of_measurement: "A"

      rtu1_cur_total:
        friendly_name: "RTU1 Current total"
        value_template: >-
          {{ states('sensor.rtu1_x108').split(',')[6] | int / 10 }}
        unit_of_measurement: "A"


testa la no HA vai aqui e copia o componente completo

edita o ficheiro sensor.py e remove linhas

        if entry[CONF_COUNT] * 2 != size:
            _LOGGER.error(
                "Structure size (%d bytes) mismatch registers count (%d words)",
                size,
                entry[CONF_COUNT],
            )
            continue

poe o folder modbus dentro do folder custom_components e renicia o HA e ja esta

o da issue nao funciona porque o componente ja é antigo

já agora que software tas a usar para fazer debug do modbus?


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


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