Converter unidades apenas no card

Instalei uma integração e agora tenho um sensor com pressão em psi.

Gostava de ver a pressão em bar.

template:
  - sensor:
      - name: front_left_tire_pressure_bar
        unit_of_measurement: "bar"
        state: "{{ (states('sensor.2020_mazda_mx_30_front_left_tire_pressure') | float * 0.0689475729) | round(2) }}"

Criei o template acima para ter o sensor como quero e funciona perfeitamente, e assim até posso interagir com o valor em bar, mas não preciso de tanto.
O que queria era apenas mostrar o valor “convertido” num card.
Como o posso fazer?
Algo do género:

type: entities
entities:
  - entity: sensor.2020_mazda_mx_30_front_left_tire_pressure
    name: Front Left Tire Pressure
    value: {{ (states('sensor.2020_mazda_mx_30_front_left_tire_pressure') | float * 0.0689475729) }}
    unit_of_measurement: bar

Boas.
Podes utilizar o custom-card template-entity-row. Faz o que pretendes e muito mais.
O multiple-entity-row também aceita templates, e até em informação secundária, por baixo da entidade principal.

Have fun :wink:

1 Curtiu

Boas.
Em primeiro lugar, muito obrigado pela resposta.

Usei o template-entity-row e realmente faz o que pretendo, mas não o faz bem!
Ou seja, efetivamente consigo fazer a conversão de unidades diretamente no card, mas o resultado obtido não é correto.

O que fiz para fazer debug:

  • criei um input_number.numeroteste para ir mudando os valores

  • criei os seguintes sensores:

template:
  - sensor:
      - name: sensor_numeroteste_round0
        unit_of_measurement: "bar"
        state: "{{ (states('input_number.numeroteste') | float * 0.0689475729) | round(0) }}"
  - sensor:
      - name: sensor_numeroteste_round1
        unit_of_measurement: "bar"
        state: "{{ (states('input_number.numeroteste') | float * 0.0689475729) | round(1) }}"
  - sensor:
      - name: sensor_numeroteste_round2
        unit_of_measurement: "bar"
        state: "{{ (states('input_number.numeroteste') | float * 0.0689475729) | round(2) }}"
  - sensor:
      - name: sensor_numeroteste_round3
        unit_of_measurement: "bar"
        state: "{{ (states('input_number.numeroteste') | float * 0.0689475729) | round(3) }}"
  - sensor:
      - name: sensor_numeroteste_round4
        unit_of_measurement: "bar"
        state: "{{ (states('input_number.numeroteste') | float * 0.0689475729) | round(4) }}"
  • criei um cartão de entidades:
type: entities
entities:
  - entity: input_number.numeroteste
  - entity: sensor.sensor_numeroteste_round0
  - entity: sensor.sensor_numeroteste_round1
  - entity: sensor.sensor_numeroteste_round2
  - entity: sensor.sensor_numeroteste_round3
  - entity: sensor.sensor_numeroteste_round4
  - type: custom:template-entity-row
    name: sensor_numeroteste_round0 TempEntRow
    state: >-
      {{states('input_number.numeroteste') | float * 0.0689475729 | round(0) }}
      bar
  - type: custom:template-entity-row
    name: sensor_numeroteste_round1 TempEntRow
    state: >-
      {{states('input_number.numeroteste') | float * 0.0689475729 | round(1) }}
      bar
  - type: custom:template-entity-row
    name: sensor_numeroteste_round2 TempEntRow
    state: >-
      {{states('input_number.numeroteste') | float * 0.0689475729 | round(2) }}
      bar
  - type: custom:template-entity-row
    name: sensor_numeroteste_round3 TempEntRow
    state: >-
      {{states('input_number.numeroteste') | float * 0.0689475729 | round(3) }}
      bar
  - type: custom:template-entity-row
    name: sensor_numeroteste_round4 TempEntRow
    state: >-
      {{states('input_number.numeroteste') | float * 0.0689475729 | round(4) }}
      bar

Eis alguns resultados…


O valor do template-entity-row, com round(0) dá sempre 0.
O round(1) dá um valor totalmente distinto.
Os restantes valores não são iguais.


Além das questões anteriores, os valores do template-entity-row, com round 1 ou 3 ou 4, apresentam 16 casas à direita da vírgula?


Mais outro exemplo.

Reparo que nos valores dos sensores, o separador decimal é a vírgula, enquanto que no template-entity-row o separador decimal é o ponto.
Será que é por aqui que estou a errar???

Bem, é a errar que se aprende:

  • nas fórmulas usadas no template_entity_row não tens os mesmos parênteses que tens na definição dos sensores. Os templates não seguem regras matemáticas, e pelo que vejo é o que te está a acontecer: estás a aplicar o round à tua constante, e depois é que multiplicas. Isso explica o facto de que quando usas round(0) te dê sempre zero, pois ele está a arredondar o teu valor de 0.06..... para 0 casas decimais, que fica com o valor 0; quando multiplica, claro que o valor é zero.
    Tens:
    state: >-
      {{states('input_number.numeroteste') | float * 0.0689475729 | round(1) }} bar

experimenta com:

    state: >-
      {{ ( states('input_number.numeroteste') | float * 0.0689475729 ) | round(1) }} bar

Lição a tirar: parênteses são nossos amigos :slight_smile:
Bons templates! :slight_smile:

1 Curtiu

Resolvidíssimo! :clap: :clap: :clap:
Muito obrigado.

Já agora, fica aqui o novo aspeto dos resultados, onde tudo está certo.

1 Curtiu

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


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