Simplification du code

Bonjour,

Je débute dans home assistant (j’ai débuté samedi dernier) et je cherche à simplifier le code pour le modifier qu’à un seul endroit (variable, macro, template, …). C’est cette partie de code ci dessous

                [[[
                if (states['remote.nvidia_shield'].state == 'on') 
                  return 'green';
                else
                  return 'grey';
                endif 
                ]]]

voici une partie de la vue de la télécommande (coupé car trop long)

views:
  - title: Télécommande
    type: custom:layout-card
    layout_type: custom:grid-layout
    layout:  
      width: 100%
      max_cols: 3
      grid-template-columns: 1fr 1fr 1fr
      grid-template-rows: auto
      grid-template-areas: |
        "btn_power     btn_remote    btn_remote"
        ".             btn_up        ."
        "btn_left      btn_enter     btn_right"
        "btn_back      btn_down      btn_home"
        "btn_first     btn_pause     btn_last"
        "btn_no_sound  btn_dec_sound btn_up_sound"
        "btn_youtube   btn_netflix   btn_molotov"
        "btn_statut    btn_statut    btn_statut"
        "btn_info      btn_info      btn_info"
    cards:
      - type: custom:button-card  # power
        entity: switch.prise_tv
        view_layout:
          grid-area: btn_power
        icon: mdi:power
        tap_action:
          action: toggle
        styles:
          icon:
            - color: >
                [[[
                if (states['switch.prise_tv'].state == 'off')
                   return 'red';
                else
                   return 'green';
                ]]]
      - type: custom:button-card  # remote
        entity: remote.nvidia_shield
        view_layout:
          grid-area: btn_remote
        name: Etat de la télécommande
        show_label: false
        label: |
          [[[
            return '#' + states['remote.nvidia_shield'].state + '#';
          ]]]
        styles:
          card:
            - height: 100%
          name:
            - justify-self: middle
            - font-weight: bold
          icon:
            - color: >
                [[[
                if (states['remote.nvidia_shield'].state == 'on') 
                  return 'green';
                else
                  return 'grey';
                endif 
                ]]]
      - type: custom:button-card  # up
        icon: mdi:arrow-up-bold
        view_layout:
          grid-area: btn_up
        aspect_ratio: 1/1
        tap_action:
          action: perform-action
          perform_action: remote.send_command
          data:
            command: DPAD_UP
          target:
            entity_id: remote.nvidia_shield
        hold_action:
          action: none
        styles:
          icon:
            - color: >
                [[[
                if (states['remote.nvidia_shield'].state == 'on') 
                  return 'green';
                else
                  return 'grey';
                endif 
                ]]]
      - type: custom:button-card  # left
        icon: mdi:arrow-left-bold
        view_layout:
          grid-area: btn_left
        aspect_ratio: 1/1
        tap_action:
          action: perform-action
          perform_action: remote.send_command
          data:
            command: DPAD_LEFT
          target:
            entity_id: remote.nvidia_shield
        hold_action:
          action: none
        styles:
          icon:
            - color: >
                [[[
                if (states['remote.nvidia_shield'].state == 'on') 
                  return 'green';
                else
                  return 'grey';
                endif 
                ]]]

J’ai essaye en macro, je n’ai pas réussi.
J’ai essayé un template, idem
Je ne pense pas qu’avec un script ça pourrait le faire.

Merci pour votre aide.
hervé

Salut,

Essaye ça

Hello,
Ce que je ferai, c’est créer une entrée de type template → modéliser un capteur

Dedans tu mets un nom (ma couleur), et dans la partie « Modèle de l’état* » ton code

ça va te créer quelque chose du genre sensor.ma_couleur

il ne te reste plus qu’à l’utiliser via {{ states(‹ sensor.ma_couleur ›) }}

Exemple de code à mettre dans ton capteur (à tester avec tes infos avant dans Outils de développement → modèle:

{% if is_state("light.bureau", "on") -%}
  green
{%- else -%}
  gray
{%- endif %}

merci Pulpy-Luke.
Je vais essayer de faire un template sur le bouton carrément. de plus j’ai l’instruction pour l’appeler. Merci pour tout

Bonjour,
comme te la proposer @Pulpy-Luke, utiliser decluttering-card, mais il existe une nouvelle carte identique, mais plus évoluer. J’en parle à la fin du sujet de decluttering-card.

C’est streamline-card qui fait la même chose :

Bonjour,
Merci WarC0zes ça aussi ça va me servir pour autre chose, c’est cool.

J’en profite :
Est ce qu’il y a une librairie pour pouvoir faire des fonctions, un fichier de constantes ?

Merci pour tout

Salut,

Oui les custom_templates
Un exemple Easy Time Macros for Templates! - Share your Projects! - Home Assistant Community

alors je peux installer decluttering mais celui là streamline-card je ne le trouve pas dans hacs

Il faut ajouter le dépôt dans HACS, il n’est pas encore par défaut dans la boutique de HACS.

Dépôt: https://github.com/brunosabot/streamline-card

1 « J'aime »

C’est dommage dans sa doc d’installation, il pourrait rajouter ça dans le cas où on ne le trouve pas.

Remonte l’info sur le GitHub du développeur :wink:

C’est bon s’est fait

1 « J'aime »