Aide pour création d'une carte

Bonjour,

je n’arrive pas a crée une carte de ce type,

j’ai essayer avec mushroom , button-card mais je n’ai rien qui graphiquement ce rapproche de ça
qui pourrait m’aiguiller au niveau du code ?

merci d’avance


Bonjour,
on dirait du button-card, avec du bar-card et mushroom chip.

il faut utiliser button-card et des custom_field. Mais ce n’est pas facile a faire.

un tuto fait par @Cleya :

Bonjour,

La carte est assez simple à reproduire avec custom:button-card (sauf la barre du niveau de remplissage de la cuve en version arrondie). Pour cette jauge, il faudra soit faire la même chose avec un rectangle soit creuser un peu plus pour arriver à un résultat satisfaisant… ou utiliser une custom:bar-card. Je te fais un exemple dans la journée si j’ai le temps.

Je suis dessus :

Bonjour et merci , je vais regarder plus en détail ce tuto , de ce que j’ai lu ce matin il est bien expliquer

Bonjour Cleya

merci pour ce bout de code, je vais pouvoir approfondir la chose avec ton tuto très bien fait en passant.

Paradoxalement pour la barre de niveau des granulé j’y suis arriver assez facilement , faudra juste que j’intègre tout sur la même carte.

type: vertical-stack
cards:
  - type: custom:mushroom-climate-card
    entity: climate.micronova_thermostat_pellet
    fill_container: true
    show_temperature_control: true
    icon_type: icon
    hvac_modes:
      - heat
      - "off"
    primary_info: name
    collapsible_controls: false
    tap_action:
      action: more-info
    secondary_info: state
  - type: entities
    entities:
      - sensor.micronova_stove_status_2
      - sensor.micronova_fumes_temperature_2
      - sensor.micronova_fan_rpm_2
    card_mod:
      style: >
        bar-card-currentbar, bar-card-backgroundbar {
          border-radius: 25px;
        }

        #states > bar-card-row > bar-card-card > bar-card-background >
        bar-card-contentbar > bar-card-name {
          font-size: 16px;
          font-weight: bold;
          color: white;
        }      
         ha-card {
          margin-top: -10px;
          background: none;
          border: none;
        }
  - type: custom:bar-card
    name: Niveau Pellet
    min: 8
    max: 100
    icon: mdi:water-check
    severity:
      - color: "#4CAF50"
        from: 35
        to: 100
      - color: "#FFEB3B"
        from: 15
        to: 35
      - color: "#F44336"
        from: 0
        to: 15
    card_mod:
      style: >
        bar-card-currentbar, bar-card-backgroundbar {
          border-radius: 25px;
        }

        #states > bar-card-row > bar-card-card > bar-card-background >
        bar-card-contentbar > bar-card-name {
          color: red;
          
        }      ha-card {
          margin-top: -10px;
          background: none;
          border: none;
        }  
    entities:
      - entity: sensor.micronova_pellet_level

Je te poste le début du code quand j’aurai ajouté les boutons « Allumer » et « Eteindre » (avant 13h00).

Pour le niveau de remplissage, effectivement c’est simple avec une custom:bar-card. La difficulté est d’avoir le même rendu avec une carte custom:button-card sans utiliser d’autres cartes.

Salut,
pourquoi tu te prends la tête et n’utilise pas bar-card directement dans button-card ?

Salut, pour n’avoir qu’une seule carte custom (pas de card-mod ni bar-card), sinon, y’a pas de défi :grin:

Beh, prends-toi la tête :sweat_smile:

Voilà le résultat (provisoire) avec les boutons « Allumer » et « Eteindre » :

Le code :

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
          - 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';
              ]]]
        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';
              ]]]          
        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';
              ]]]
        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';
              ]]]
        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
styles:
  card:
    - width: 480px
    - height: 430px
    - background-color: rgba(30,30,30,1.0)
    - cursor: default
  name:
    - font-size: 20px
    - color: white
    - position: absolute
    - top: 20px
  custom_fields:
    etat_poele:
      - position: absolute
      - top: 80px
      - left: 164px
    bouton_moins:
      - position: absolute
      - top: 145px
      - left: 65px
    temp_consigne:
      - position: absolute
      - top: 145px
      - left: 164px
    bouton_plus:
      - position: absolute
      - top: 145px
      - right: 65px
    temperature:
      - position: absolute
      - top: 210px
      - left: 164px
    bouton_allumer:
      - position: absolute
      - top: 280px
      - left: 85px
      - z-index: |
          [[[
            if (states['input_boolean.essai_poele'].state == 'on')
              return '0';
            else
              return '2';
          ]]]
    bouton_eteindre:
      - position: absolute
      - top: 280px
      - right: 85px
      - z-index: |
          [[[
            if (states['input_boolean.essai_poele'].state == 'off')
              return '0';
            else
              return '2';
          ]]]

Pour tester la carte, j’ai créé un input_number avec une valeur minimale de 14, une valeur maximale de 32, un pas de 1 et degré celcius en unité. Ainis quand tu arrives à 32° C de température de consigne, tu ne peux plus cliquer sur le bouton « + » et inversement quand tu arrives à 14° C, tu ne peux plus cliquer sur le bouton « - ». J’ai aussi deux scripts qui augmentent ou diminuent l’input_number en fonction des clics sur les boutons.
Pour le fonctionnement des boutons « Allumer » et « Eteindre », j’ai créé une entrée « interrupteur » dont l’état change en fonction du clic sur l’un ou l’autre des boutons. Si tu as des questions sur le fonctionnement ou le code, n’hésites pas.

Je te ferai un .gif en fin d’après-midi qui sera plus parlant pour le fonctionnement.

wouha super merci beaucoup :heart_eyes:,

j’en demandai pas temps mais je prend avec plaisir :sweat_smile:
faut donc que je crée les 2 scripts, j’avais bien vu quelques a chose a ce sujet pour le réglage de la tempé.

Je reviendrai sur ce sujet avec la version final :wink:

Tu doit avoir une entité correspondant à la température de consigne de ton poêle, il faudra effectivement que tu crées un script (ou deux) pour modifier cette température.

Je me pencherai sur l’affichage du niveau de remplissage de la cuve en fin d’après midi.

Voilà un visuel simple pour le niveau de remplissage de la cuve :

10% :


35% :

70% :

Je peux le faire avec la barre d’indication du niveau droite (en bidouillant avec l’ajout d’un custom_fields supplémentaire rectangulaire d’une largeur variable de 1 à 15 et d’une hauteur variable de 2 à 30 avec une position variable en fonction du niveau de cuve)
Et sinon, je peux laisser comme cela mais simplement supprimer l’arrondi de la barre de progression et du fond de la barre

A quoi correspondent les deux indicateurs en bas à droite (température et pourcentage) ?
Je suppose que le premier est la température extérieure mais je ne vois pas à quoi pourrait correspondre le deuxième.

oui c’est température d’eau du poele pour le nuage, fonction non utilisé chez moi

par contre l’autre c’est puissance du poele que je peut aussi modifier de 1 a 5 , ce serai pas mal d’y avoir accès par exemple en appui court avoir le input_number a régler

Merci c’est top, ça me va bien comme ça c’est parfaitement lisible en coup d’oeil :+1:

Déjà le .gif :

essai

Pour la puissance du poêle, il y a la possibilité d’ajouter un bouton qui fonctionne en boucle (en incrémentant un input_number de 1 à 5 à chaque clic et qui revienne à 1 sur un clic quand la valeur est à 5) avec affichage de la puissance sélectionnée. Il te suffira de faire une automatisation avec en déclencheur le changement de valeur de l’input_number et en action le réglage de la puissance en fonction de cette valeur.

La représentation du niveau de remplissage telle quelle te va ?

1 « J'aime »

Oui le remplissage c’est bien est discret au pire je rajouterai peut etre la valeur de % dedans mais je pense que ça va charger la carte ou alors je met une severite comme j’ai fais sur la custom-bar?

Non, tu ne pourras pas mettre de « severité » car ce n’est pas une custom:bar-card mais juste un custom_fields de custom:button-card. Je peux ajouter la valeur de pourcentage, changer la couleur en fonction du pourcentage (voire mettre un remplissage dégradé du rouge au vert en fonction du niveau de remplissage) etc. mais tout doit se faire par code.

Je t’ai ajouté un bouton pour le réglage de la puissance mais il faudrait que tu me précises si ce bouton doit être accessible avec le poêle éteint, avec le poêle allumé, avec les deux ?

essai

Ok pas de souci pour la severité,

je veut bien le dégrader du vert au rouge en fonction du remplissage , genre vert jusque 50% , orange de 50 a 30% et rouge a 30% ce qui correspond a la notification que je me suis mis pour veillez a remplir le réservoir a partir de 30%

Le réglage de puissance doit être actif que poêle allumer ,
je viens d’installer le code et de mettre met entité c’est top, je vais essayer de rajouter le status du poêle également dans le code , a coté de la température de la pièce je sais pas si c’est possible.