Dúvidas sensor tipo template

Estou a tentar fazer uma brincadeira com um shelly EM, e para já não o queria desligar da cloud, por isso estou a usar a interface rest.
Tinha os sensores rest a funcionar, mas isso obrigava a uma chamada rest por cada sensor, então investiguei se era possível obter o json por rest apenas uma vez e depois colocar os valores nos sensores certos. Parece-me que é possível com um sensor rest e depois com sensores template para extrair os vários campos, mas não estou a conseguir pôr isto a funciona, os valores ficam a zero; os vários sensores template são várias tentativas:

- platform: rest
  name: json_shelly_em
  json_attributes:
    - total
  resource: http://192.168.1.80/status
  value_template: '{{ value_json.emeters.0 }}'
  scan_interval: 2

- platform: template
  sensors:
    totalpower1:
      value_template: "{{ states.sensor.json_shelly_em.attributes[\"total\"] }}"
      unit_of_measurement: W
    totalpower2:
      value_template: '{{ states.sensor.json_shelly_em.attributes["total"] }}'
      unit_of_measurement: W
    totalpower3:
      value_template: '{{ states.sensor.json_shelly_em["total"] }}'
      unit_of_measurement: W
    totalpower4:
      value_template: '{{ states.sensor.json_shelly_em.total }}'
      unit_of_measurement: W
    totalpower5:
      value_template: '{{ value_json.states.sensor.json_shelly_em.total }}'
      unit_of_measurement: W
    totalpower6:
      value_template: '{{ states.sensor.json_shelly_em }}'
      unit_of_measurement: W

Alguém sabe o que estou a fazer mal?
O único que tem valores é o totalpower6, tem o json do sensor rest, mas mesmo este noto que não actualiza, é normal?

Obrigado!

@alexvaz quando publicares código ou logs deves fazê-lo como texto. Depois deves sublinhar o texto que queres transformar em código e clicar no ícone </>. Deverá existir um espaço antes e outro depois do bloco de código para que funcione correctamente. O código em YAML é muito sensível aos espaçamentos e sem o código devidamente formatado não te poderemos ajudar. E nos logs há pormenores que só devidamente formatados se conseguem ver. Além disso, existem regras no fórum que devem ser cumpridas e que podes ler nos nossos Termos do Serviço/Regras e na FAQ.

Vê um exemplo:

Boa noite,

Pelo que percebi pretende obter o valor total da energia. Experimente o seguinte código, retirando as linhas username, password e authentication, senão tem autenticação. Esta informação é de 2019 e pode estar desatualizada. Caso não funcione, coloque a resposta JSON do shelly.

- platform: rest
  name: json_shelly_em
  resource: http://192.168.1.80/status
  username: !secret shelly_usr
  password: !secret shelly_pwd
  authentication: basic
  value_template: '{{ value_json.emeters.0.total | float /1000 }}'
  scan_interval: 300 # Não vale a pena alterar este valor, o shelly só o actualiza a cada 5 minutos
  unit_of_measurement: kWh

Obrigado pela ajuda pessoal!

Penso que o problema é que estava a tentar limitar o json logo no “value_template” do sensor rest, mas pelos visto não preciso disso, basta apanhar o json todo e declarar os atributos que pretendo usar nos templates, o value_template coloquei “OK” devido a limitação no tamanho, li algures na documentação.

Caso alguém precise, aqui fica a solução:

- platform: rest
  name: json_shelly_em
  json_attributes:
    - emeters
  resource: http://192.168.1.80/status
  value_template: "OK"
  scan_interval: 2

- platform: template
  sensors:
    total_power:
      value_template: '{{ states.sensor.json_shelly_em.attributes["emeters"][0]["power"] | round(0) }}'
      unit_of_measurement: W
      device_class: power
    total_energy:
      value_template: '{{ (states.sensor.json_shelly_em.attributes["emeters"][0]["total"] | float /1000) | round(2) }}'
      unit_of_measurement: kWh
      device_class: energy
    partial_power:
      value_template: '{{ states.sensor.json_shelly_em.attributes["emeters"][1]["power"] | round(0) }}'
      unit_of_measurement: W
      device_class: energy
    partial_energy:
      value_template: '{{ (states.sensor.json_shelly_em.attributes["emeters"][1]["total"] | float /1000) | round(2) }}'
      unit_of_measurement: kWh
      device_class: power
    voltage:
      value_template: '{{ states.sensor.json_shelly_em.attributes["emeters"][0]["voltage"] }}'
      unit_of_measurement: V
      device_class: voltage

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


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