Aide pour création d'une carte

Le but est effectivement que tu comprennes le fonctionnement (d’où le fait que je mettes le code au différentes modifications : ainsi par comparaison, tu peux voir ce que donne les modifications)

Le code final (?) :

type: custom:button-card
name: Poêle à granulés
custom_fields:
  etat_poele:
    card:
      type: custom:button-card
      name: |
        [[[
          if (states['input_boolean.essai_poele'].state == 'off')
            return 'Off';
          else
            return 'On';
        ]]]
      show_icon: false
      show_name: true
      show_state: false
      styles:
        card:
          - width: 150px
          - height: 65px
          - background: none
          - border: none
          - cursor: default
        name:
          - font-size: 24px
          - font-weight: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return 'bold';
                else
                  return 'regular';
              ]]]
          - color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return 'rgba(128,0,0,1.0)';
                else
                  return 'rgba(0,128,0,1.0)';
              ]]]
  bouton_moins:
    card:
      type: custom:button-card
      icon: mdi:minus
      show_icon: true
      styles:
        card:
          - width: 90px
          - height: 65px
          - background-color: |
              [[[
                if (states['input_number.essai_temp_consigne'].state <= '14.0')
                  return 'rgba(54,54,54,0.4)';
                else
                  return 'rgba(54,54,54,1.0)';
              ]]]
          - border: |
              [[[
                if (states['input_number.essai_temp_consigne'].state <= '14.0')
                  return '2px solid rgba(60,60,60,0.2)';
                else
                  return '2px solid rgba(60,60,60,1.0)';
              ]]]
          - cursor: |
              [[[
                if (states['input_number.essai_temp_consigne'].state <= '14.0')
                  return 'default';
                else
                  return 'hand';
              ]]]
          - "--mdc-ripple-press-opacity": 0.12
        icon:
          - color: |
              [[[
                if (states['input_number.essai_temp_consigne'].state <= '14.0')
                  return 'dimgray';
                else
                  return 'white';
              ]]]
          - width: 45%
      tap_action:
        action: |
          [[[
            if (states['input_number.essai_temp_consigne'].state > '14.0')
              return 'call-service'; 
            else
              return 'none';
          ]]]
        service: script.decrement_essai_temp_consigne
  temp_consigne:
    card:
      type: custom:button-card
      entity: input_number.essai_temp_consigne
      show_icon: false
      show_name: false
      show_state: true
      styles:
        card:
          - width: 150px
          - height: 65px
          - background-color: rgba(54,54,54,1.0)
          - border: 2px solid rgba(60,60,60,1.0)
          - cursor: default
        state:
          - color: white
          - font-size: 48px
  bouton_plus:
    card:
      type: custom:button-card
      icon: mdi:plus
      show_icon: true
      styles:
        card:
          - width: 90px
          - height: 65px
          - background-color: |
              [[[
                if (states['input_number.essai_temp_consigne'].state >= '32.0')
                  return 'rgba(54,54,54,0.4)';
                else
                  return 'rgba(54,54,54,1.0)';
              ]]]          
          - border: |
              [[[
                if (states['input_number.essai_temp_consigne'].state >= '32.0')
                  return '2px solid rgba(60,60,60,0.4)';
                else
                  return '2px solid rgba(60,60,60,1.0)';
              ]]]          
          - cursor: |
              [[[
                if (states['input_number.essai_temp_consigne'].state >= '32.0')
                  return 'default';
                else
                  return 'hand';
              ]]]
          - "--mdc-ripple-press-opacity": 0.12
        icon:
          - color: |
              [[[
                if (states['input_number.essai_temp_consigne'].state >= '32.0')
                  return 'dimgray';
                else
                  return 'white';
              ]]]          
          - width: 45%
      tap_action:
        action: |
          [[[
            if (states['input_number.essai_temp_consigne'].state < '32.0')
              return 'call-service'; 
            else
              return 'none';
          ]]]
        service: script.increment_temp_consigne
  temperature:
    card:
      type: custom:button-card
      entity: sensor.echo_salon_temperature
      show_icon: true
      show_name: false
      show_state: true
      layout: icon_state
      styles:
        card:
          - width: 150px
          - height: 65px
          - background: none
          - border: none
          - cursor: default
        state:
          - color: white
          - font-size: 24px
          - padding-right: 10px
        icon:
          - color: white
          - width: 50%
          - margin-left: "-10px"
  bouton_allumer:
    card:
      type: custom:button-card
      entity: input_boolean.essai_poele
      icon: mdi:fire
      name: Allumer
      show_icon: true
      layout: icon_name
      styles:
        card:
          - width: 162px
          - height: 60px
          - background-color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return 'rgba(54,54,54,0.4)';
                else
                  return 'rgba(158,158,158,1.0)';
              ]]]
          - border: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return '2px solid rgba(60,60,60,0.2)';
                else
                  return '2px solid rgba(164,164,164,1.0)';
              ]]]
          - cursor: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return 'default';
                else
                  return 'hand';
              ]]]
          - "--mdc-ripple-press-opacity": 0.12
        name:
          - font-size: 24px
          - color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return 'dimgray';
                else
                  return 'white';
              ]]]
          - padding-right: 30px
        icon:
          - color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return 'dimgray';
                else
                  return 'white';
              ]]]
          - width: 60%
      tap_action:
        action: |
          [[[
            if (states['input_boolean.essai_poele'].state == 'off')
              return 'call-service'; 
            else
              return 'none';
          ]]]
        service: input_boolean.turn_on
        service_data:
          entity_id: input_boolean.essai_poele
  bouton_eteindre:
    card:
      type: custom:button-card
      icon: mdi:power
      name: Eteindre
      show_icon: true
      layout: icon_name
      styles:
        card:
          - width: 162px
          - height: 60px
          - background-color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'off')
                  return 'rgba(54,54,54,0.4)';
                else
                  return 'rgba(158,158,158,1.0)';
              ]]]
          - border: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'off')
                  return '2px solid rgba(60,60,60,0.2)';
                else
                  return '2px solid rgba(160,160,160,1.0)';
              ]]]
          - cursor: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'off')
                  return 'default';
                else
                  return 'hand';
              ]]]
          - "--mdc-ripple-press-opacity": 0.12
        name:
          - font-size: 24px
          - color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'off')
                  return 'dimgray';
                else
                  return 'white';
              ]]]
          - padding-right: 20px
        icon:
          - color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'off')
                  return 'dimgray';
                else
                  return 'white';
              ]]]
          - padding-left: 10px
          - width: 60%
      tap_action:
        action: |
          [[[
            if (states['input_boolean.essai_poele'].state == 'on')
              return 'call-service'; 
            else
              return 'none';
          ]]]
        service: input_boolean.turn_off
        service_data:
          entity_id: input_boolean.essai_poele
  niveau_cuve:
    card:
      type: custom:button-card
      show_name: true
      show_icon: false
      show_state: false
      name: "Cuve :"
      custom_fields:
        fond_barre:
          card:
            type: custom:button-card
            styles:
              card:
                - width: 200px
                - height: 30px
                - border-radius: 15px
                - background-color: |
                    [[[
                      const niveau = parseFloat(states['input_number.essai_niveau_cuve']?.state || 0);
                      if (niveau <= 30) {
                        return 'rgba(255,0,0,0.2)';
                      } else if (niveau >= 31 && niveau <= 49) {
                        return 'rgba(255,165,0,0.2)';
                      } else {
                        return 'rgba(0,128,0,0.2)';
                      }
                    ]]]
        niveau_remplissage:
          card:
            type: custom:button-card
            styles:
              card:
                - width: |
                    [[[
                      const niveau = parseFloat(states['input_number.essai_niveau_cuve']?.state || 0);
                      return `${niveau * 2}px`
                    ]]]
                - height: 30px
                - border-radius: 15px
                - background-color: |
                    [[[
                      const niveau = parseFloat(states['input_number.essai_niveau_cuve']?.state || 0);
                      if (niveau <= 30) {
                        return 'rgba(255,0,0,1.0)';
                      } else if (niveau >= 31 && niveau <= 49) {
                        return 'rgba(255,165,0,1.0)';
                      } else {
                        return 'rgba(0,128,0,1.0)';
                      }
                    ]]]
      styles:
        card:
          - width: 260px
          - height: 30px
          - background: none
          - border: none
          - border-radius: 0
          - padding: 0
          - display: flex
          - align-items: center
          - cursor: default
          - "--mdc-ripple-press-opacity": 0
        name:
          - font-size: 16px
          - color: white
          - position: absolute
          - top: 5px
          - left: 0px
      tap_action:
        action: none
  bouton_puissance:
    card:
      type: custom:button-card
      entity: input_number.essai_puissance_poele
      icon: mdi:fire
      show_icon: true
      show_name: false
      show_state: true
      layout: icon_state
      styles:
        card:
          - width: 90px
          - height: 50px
          - background-color: rgba(22,22,22,1.0)
          - border: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return '1px solid rgba(40,40,40,1.0)'; 
                else
                  return 'none';
              ]]]
          - border-radius: 25px
          - "--mdc-ripple-press-opacity": 0.12
        state:
          - font-size: 20px
          - font-weight: bold
          - color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return 'white'; 
                else
                  return 'dimgray';
              ]]]
        icon:
          - color: |
              [[[
                if (states['input_boolean.essai_poele'].state == 'on')
                  return 'white'; 
                else
                  return 'dimgray';
              ]]]
          - width: 80%
          - padding-left: 20px
      tap_action:
        action: |
          [[[
            if (states['input_boolean.essai_poele'].state == 'on')
              return 'call-service'; 
            else
              return 'none';
          ]]]
        service: script.increment_puissance_poele
styles:
  card:
    - width: 480px
    - height: 430px
    - background-color: rgba(30,30,30,1.0)
    - cursor: default
    - "--mdc-ripple-press-opacity": 0
  name:
    - font-size: 20px
    - color: white
    - position: absolute
    - top: 20px
  custom_fields:
    etat_poele:
      - position: absolute
      - top: 70px
      - left: 164px
    bouton_moins:
      - position: absolute
      - top: 135px
      - left: 65px
    temp_consigne:
      - position: absolute
      - top: 135px
      - left: 164px
    bouton_plus:
      - position: absolute
      - top: 135px
      - right: 65px
    temperature:
      - position: absolute
      - top: 200px
      - left: 164px
    bouton_allumer:
      - position: absolute
      - top: 270px
      - left: 85px
      - z-index: |
          [[[
            if (states['input_boolean.essai_poele'].state == 'on')
              return '0';
            else
              return '2';
          ]]]
    bouton_eteindre:
      - position: absolute
      - top: 270px
      - right: 85px
      - z-index: |
          [[[
            if (states['input_boolean.essai_poele'].state == 'off')
              return '0';
            else
              return '2';
          ]]]
    niveau_cuve:
      - position: absolute
      - top: 370px
      - left: 30px
    bouton_puissance:
      - position: absolute
      - top: 360px
      - right: 30px

Là tu as les modifications concernant le bouton « puissance » (il change d’aspect et devient cliquable ou pas en fonction de l’état du poêle) et le changement de couleur de la barre de niveau de remplissage (et la couleur du support de la barre) en fonction de la valeur du niveau de remplissage.

Poêle allumé avec 27% de remplissage :

Poêle éteint avec 46% de remplissage :

2 « J'aime »