Mudar a cor do icon em função do valor

Olá,

Eu gostava de mudar a cor de um icon em função do valor que ele registar.
Tenho instalado o custom-ui e saquei este código da Net onde coloquei os valores que quero.
O problema é que agora não sei mais o que fazer (se está bem, onde colocar, se falta mais alguma coisa, etc.)
Alguém disponível para ajudar?

- platform: template
  sensors:
      co2:
        value_template: >
          {{ state_attr('sensor.eco2_exterior','battery')|round }}
        friendly_name: 'CO2'
        unit_of_measurement: 'mmp'
        device_class: carbon_dioxide
        icon_template: >-
          {% set co2 = states('sensor.eco2_exterior')|float(0) %}
          {% if co2 > 15000 %}
            red
          {% elif 15000 >= co2 > 5000 %}
            orange
          {% elif 5000 >= co2 > 2500 %}
            yellow
          {% elif 2500 >= co2 > 2000 %}
            yellow
          {% elif 2000 >= co2 > 1500 %}
            green
          {% elif 1500 >= co2 > 650 %}
            green
          {% elif 650 >= co2 > 400 %}
            green
          {% elif 400 >= co2 > 0 %}
            green
          {% else %}
            green
          {% endif %}

Obrigado!

Esse código cria um sensor que depois podes inserir num cartão no dashboard (num Entity por exemplo).

P.S.: a unidade de medida do CO2 é ppm e não mmp.

Obrigado pela tua atenção.

Eu já coloquei o código em customize.yaml e realmente criou o sensor CO2. Quando coloco esse sensor como entidade num cartão ele não muda de cor.
Será que o código para o cartão está mal?
Achas que era possível dar-me um exemplo de como seria o código para o cartão?

Cumprimentos!!

O código não é para ser colocado no customize.yaml mas sim onde defines os sensores. Em quê página encontraste esse código?

Eu também coloquei no sensors.yaml mas quando escolho o cartão normal de entidades e seleciono o novo sensor, continua azul…

Então o problema está no código. Eu quando preciso de alterar cores ou textos dinamicamente uso o paper-buttons-row que é muito flexivel para essas coisas. Podes usar o mesmo principio do if, else, endif para outros cartões e utilizar não só para as cores como com todos os elementos existentes, por exemplo, para o icone, tamanho da fonte, nome, estado, etc.

  - type: custom:paper-buttons-row
    buttons:
      - entity: sensor.qmp_temperature
        layout: name|state
        name: TEMP. -
        state:
          postfix: "°C"
        state_text:
          "unavailable": "n/d"
        styles:
          button:
            margin-top: 0.2em
          icon:
            color: white
          name:
            font-size: 0.7vw
            color: white
          state:
            font-size: 0.7vw
            color: >-
              {% if is_state('sensor.qmp_temperature', 'unavailable') %}
                var(--sigrev-icn-red)
              {% else%}
                var(--sigrev-icn-grey)
              {% endif %}
            animation: >-
              {% if is_state('sensor.qmp_temperature', 'unavailable') %}
                blink 3s ease infinite
              {% else%}
                none
              {% endif %}
        tap_action:
          action: none
        double_tap_action:
          action: none
        hold_action:
          action: none

Eu agradeço a atenção, sem dúvida, mas isso implica instalar mais um addon…
Já tenho addons para cards até dizer chega. Gostava de utilizar um dos que já tenho. :slight_smile:

Com o código que coloquei, crio uma nova entidade chamada “co2”.
Elas aparece nas entidades mas como indisponível. Não entendo…
Ando nisto, sem exagero há 3 semanas…

Ainda não consegui “dar a volta” a isto. Alguém pode ajudar?

Boas. Ainda estás a usar o código que partilhaste no primeiro post?

Os templates que eu crio tb são todos copiados da net, por isso tb não entendo nada. Mas esse parece estranho.

        value_template: >
          {{ state_attr('sensor.eco2_exterior','battery')|round }}

Acho que estás a extrair a bateria do sensor e não o nível de C02.
além disso o teu arrendondar é capaz de estar errado, precisas de round(0), por exemplo, para arredondar a zero casas decimais - aliás precisas de arredondar o valor só para mudar o cor do icon?

Boas!!

Não. Estou a usar

# co2
- platform: template
  sensors:
      co2_cor:
        value_template: >
          {{ state_attr('sensor.eco2_exterior', 'carbon dioxide')|round }}
        friendly_name: 'CO2'
        unit_of_measurement: 'mmp'
        device_class: carbon_dioxide
        icon_template: >-
          {% set co2 = states('sensor.eco2_exterior')|float(0) %}
          {% if co2 > 15000 %}
          red
          {% elif 15000 >= co2 > 5000 %}
          orange
          {% elif 5000 >= co2 > 2500 %}
          yellow
          {% elif 2500 >= co2 > 2000 %}
          yellow
          {% elif 2000 >= co2 > 1500 %}
          green
          {% elif 1500 >= co2 > 650 %}
          green
          {% elif 650 >= co2 > 400 %}
          green
          {% elif 400 >= co2 > 0 %}
          green
          {% else %}
          green
          {% endif %}

Mas quando coloco isto num cartão dá-me sempre “Entidade Indisponível”.

  - type: entities
    entities:
      - entity: sensor.co2_cor

Já ando nisto há meses e não consigo colocar o icon a trocar de cor…

Estive a ver a documentação aqui e acho que não dá para fazer como queres. Se leres onde diz icon_template, vais ver que dá para mudar o ícone, não a cor do ícone. Isto é, esse template que tens está a tentar mudar o símbolo do ícone, não a cor.

A sugestão do @j_assuncao acaba por ser a mais simples de executar, mas como não podes adicionar um cartão novo, tens aqui uma solução alternativa.

Começamos por criar um sensor que não muda absolutamente nada. Apenas indica a cor que queremos. Colas isto no teu configuration yaml, no seguimento de “sensor:”

  - platform: template
    sensors:
      eco2colorstate:
        friendly_name: CO2 Exterior Color State
        value_template: >-
          {% set colorstate = states('sensor.eco2_exterior') %}
          {% if colorstate | float <= 1499 %}
            Green
          {% elif colorstate | float >= 1500 and colorstate | float <= 4999 %}
            Yellow
          {% elif colorstate | float >= 5000 and colorstate | float <= 14999 %}
            Orange
          {% elif colorstate | float >= 15000 %}
            Red
          {% endif %}

reinicias o HA e tens um sensor novo que indica apenas Green, Yellow, etc.

Agora crias 4 cartões condicionais. Cada um deles só aparece se o sensor que acabamos de criar estiver no estado que pretendes: Por exemplo:

type: conditional
conditions:
  - entity: sensor.eco2colourstate
    state: Green
card:
  type: tile
  entity: sensor.eco2_exterior
  color: green

Crias mais 3 assim e mudas o “state” e o “colour” para Yellow e yellow (as maiúsculas são importantes), para Orange/orange, e para Red/red.

Adicionas os 4 cartões ao teu dashboard e está feito. Só vais ver um de cada vez.

1 Curtiu

Muito obrigado pela tua atenção e tempo. Amanhã já vou testar!!
Feliz Ano Novo!!


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


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