Bubble card, changement de couleur texte

Bonjour,

j’essai de faire des bubble card pour le moment je suis arrivé a ce résultat.

type: custom:bubble-card
card_type: button
button_type: state
name: Production solaire
scrolling_effect: false
show_attribute: false
card_layout: large-2-rows
sub_button:
  - show_background: false
    show_state: true
    icon: mdi:solar-power-variant-outline
    entity: sensor.watt_hour1
    show_name: true
    name: Spa
  - show_background: false
    icon: mdi:solar-power-variant-outline
    show_state: true
    tap_action:
      action: none
    entity: sensor.watt_hour2
    name: Maison
    show_name: true
  - show_background: false
    show_state: true
    icon: mdi:solar-power
    tap_action:
      action: fire-dom-event
      browser_mod:
        service: browser_mod.popup
        data:
          size: normal
          style: "--popup-border-radius: 10px"
          content:
            type: horizontal-stack
            cards:
              - type: statistics-graph
                chart_type: line
                period: hour
                entities:
                  - sensor.qualite_de_l_air_temperature
                stat_types:
                  - max
                logarithmic_scale: false
                hide_legend: true
                title: Température Intérieur
                days_to_show: 1
    entity: sensor.total_day1
    show_name: false
  - show_background: false
    show_state: true
    icon: mdi:solar-power
    tap_action:
      action: none
    entity: sensor.total_day2
show_icon: true
icon: mdi:sun-angle
force_icon: false
show_name: true
show_last_changed: false
entity: sensor.tdeg_cabane_temperature
grid_options:
  columns: 15
  rows: 1
card_mod:
  style: |
    .bubble-icon-container {
      background: transparent;
      background-size: cover;
      
    .bubble-sub-button-1 {
      background-color:
      {% set watts = states(config.sub_button[1].entity) W}
      {% if watts <= '300' W}
        rgb(var(--bbl-rgb-yellow))
      {% elif watts >= '400' W}
        rgb(var(--bbl-rgb-orange))
      {% elif watts >= '600' W}
        rgb(var(--bbl-rgb-red))
      {% endif %}
      ;
    }

    .bubble-sub-button-2 {
        background-color:
        {% set w = states(config.sub_button[2].entity) W}
      {% if w <= '300' W}
        rgb(var(--bbl-rgb-yellow))
      {% elif w >= '400' W}
        rgb(var(--bbl-rgb-orange))
      {% elif w >= '600' W}
        rgb(var(--bbl-rgb-red))
      {% endif %}
      ;
    }
    .bubble-sub-button-3 {
      background-color:
    }
    .bubble-sub-button-4 {
      background-color:
    }


et je souhaiterais possible avoir la couleur de mes chiffres spa et maison qui change de couleur en fonction des watts.

je m’explique:

de 0 à 200 w en jaune

de 200 à 400 en orange

de 400 à 800 en rouge

je ne sais pas si c’est faisable et je remercie par avance les personnes qui m’auront aider.

merci

  • Méthode d’installation Home Assistant OS

  • Core2025.8.3

  • Supervisor2025.08.1

  • Operating System16.1

  • Interface utilisateur20250811.1

Salut, essaie ceci la ton code essaie d’utiliser du Jinja ({% ... %}) alors que dans Lovelace card-mod il faut du JavaScript template [[[ ... ]]].
Voici ton code adapté pour que la couleur des chiffres (ou du fond si tu préfères) change selon tes seuils :

type: custom:bubble-card
card_type: button
button_type: state
name: Production solaire
scrolling_effect: false
show_attribute: false
card_layout: large-2-rows
sub_button:
  - show_background: false
    show_state: true
    icon: mdi:solar-power-variant-outline
    entity: sensor.watt_hour1
    show_name: true
    name: Spa
  - show_background: false
    icon: mdi:solar-power-variant-outline
    show_state: true
    tap_action:
      action: none
    entity: sensor.watt_hour2
    name: Maison
    show_name: true
  - show_background: false
    show_state: true
    icon: mdi:solar-power
    tap_action:
      action: fire-dom-event
      browser_mod:
        service: browser_mod.popup
        data:
          size: normal
          style: "--popup-border-radius: 10px"
          content:
            type: horizontal-stack
            cards:
              - type: statistics-graph
                chart_type: line
                period: hour
                entities:
                  - sensor.qualite_de_l_air_temperature
                stat_types:
                  - max
                logarithmic_scale: false
                hide_legend: true
                title: Température Intérieur
                days_to_show: 1
    entity: sensor.total_day1
    show_name: false
  - show_background: false
    show_state: true
    icon: mdi:solar-power
    tap_action:
      action: none
    entity: sensor.total_day2
show_icon: true
icon: mdi:sun-angle
force_icon: false
show_name: true
show_last_changed: false
entity: sensor.tdeg_cabane_temperature
grid_options:
  columns: 15
  rows: 1
card_mod:
  style: |
    /* === Couleur du texte (état) pour le Spa === */
    .bubble-sub-button-1 .bubble-sub-button-state {
      color: [[[
        let v = parseFloat(states['sensor.watt_hour1']?.state || 0);
        if (v < 200) return 'rgb(var(--bbl-rgb-yellow))';
        if (v < 400) return 'rgb(var(--bbl-rgb-orange))';
        return 'rgb(var(--bbl-rgb-red))';
      ]]];
      font-weight: bold;
    }

    /* === Couleur du texte (état) pour la Maison === */
    .bubble-sub-button-2 .bubble-sub-button-state {
      color: [[[
        let v = parseFloat(states['sensor.watt_hour2']?.state || 0);
        if (v < 200) return 'rgb(var(--bbl-rgb-yellow))';
        if (v < 400) return 'rgb(var(--bbl-rgb-orange))';
        return 'rgb(var(--bbl-rgb-red))';
      ]]];
      font-weight: bold;
    }

:small_orange_diamond: Résultat :

  • 0 → 199 W : jaune
  • 200 → 399 W : orange
  • 400 → 800+ W : rouge

:backhand_index_pointing_right: Ici j’ai coloré uniquement les chiffres (state).
Si tu veux plutôt colorer le fond du bouton en entier, on peut appliquer la même logique sur .bubble-sub-button-1 et .bubble-sub-button-2 avec background-color: au lieu de color:.

et ben sa fonctionne pas, y a pas de couleur

Re hum…

essaie cela et dit moi si y a des changement.


type: custom:bubble-card
card_type: button
button_type: state
name: Production solaire
scrolling_effect: false
show_attribute: false
card_layout: large-2-rows

sub_button:
  - show_background: false
    show_state: true
    icon: mdi:solar-power-variant-outline
    entity: sensor.watt_hour1
    show_name: true
    name: Spa

  - show_background: false
    icon: mdi:solar-power-variant-outline
    show_state: true
    tap_action:
      action: none
    entity: sensor.watt_hour2
    name: Maison
    show_name: true

  - show_background: false
    show_state: true
    icon: mdi:solar-power
    tap_action:
      action: fire-dom-event
      browser_mod:
        service: browser_mod.popup
        data:
          size: normal
          style: "--popup-border-radius: 10px"
          content:
            type: horizontal-stack
            cards:
              - type: statistics-graph
                chart_type: line
                period: hour
                entities:
                  - sensor.qualite_de_l_air_temperature
                stat_types:
                  - max
                logarithmic_scale: false
                hide_legend: true
                title: Température Intérieur
                days_to_show: 1
    entity: sensor.total_day1
    show_name: false

  - show_background: false
    show_state: true
    icon: mdi:solar-power
    tap_action:
      action: none
    entity: sensor.total_day2

show_icon: true
icon: mdi:sun-angle
force_icon: false
show_name: true
show_last_changed: false
entity: sensor.tdeg_cabane_temperature
grid_options:
  columns: 15
  rows: 1

# >>> Styles Bubble-Card natifs (pas de card_mod, pas de Jinja) <<<
styles: |
  /* Calcule les couleurs en JS et les stocke en variables CSS */
  ha-card {
    --spa-color: [[[
      let v = states['sensor.watt_hour1']?.state ?? '0';
      v = parseFloat(String(v).replace(',', '.')) || 0;
      if (v < 200) return 'rgb(var(--bbl-rgb-yellow))';
      if (v < 400) return 'rgb(var(--bbl-rgb-orange))';
      return 'rgb(var(--bbl-rgb-red))';
    ]]];
    --maison-color: [[[
      let v = states['sensor.watt_hour2']?.state ?? '0';
      v = parseFloat(String(v).replace(',', '.')) || 0;
      if (v < 200) return 'rgb(var(--bbl-rgb-yellow))';
      if (v < 400) return 'rgb(var(--bbl-rgb-orange))';
      return 'rgb(var(--bbl-rgb-red))';
    ]]];
  }

  /* SPA = 1er sous-bouton : colore le chiffre (state) + option icône */
  ha-card .bubble-sub-buttons > *:nth-child(1) .bubble-sub-button-state,
  ha-card .bubble-sub-buttons > *:nth-child(1) .state {
    color: var(--spa-color) !important;
    font-weight: 600;
  }
  ha-card .bubble-sub-buttons > *:nth-child(1) ha-icon {
    color: var(--spa-color) !important;
  }

  /* MAISON = 2e sous-bouton */
  ha-card .bubble-sub-buttons > *:nth-child(2) .bubble-sub-button-state,
  ha-card .bubble-sub-buttons > *:nth-child(2) .state {
    color: var(--maison-color) !important;
    font-weight: 600;
  }
  ha-card .bubble-sub-buttons > *:nth-child(2) ha-icon {
    color: var(--maison-color) !important;
  }

aucun changement, pas de couleur

Test rapide (vérifier que les styles s’appliquent)

Ajoute temporairement en bas de ta carte :

styles: |
  /* Test visible : l’icône principale passe en fuchsia */
  .bubble-icon { color: fuchsia !important; }
  • Si l’icône ne devient pas fuchsia ➜ le module n’est pas chargé ou le cache n’est pas vidé.
  • Si elle devient fuchsia ➜ passe au code dynamique ci-dessous (et enlève ce test).

pas de fuchsia

comment on vide le cache sur ha

sur PC ? tu fait CTRL + SHIFT + R

voila j’ai reinstallé bubble-card et vider le cache et rien nada pas de couleur

  • Va dans Paramètres → Tableaux de bord → Ressources
  • Tu dois voir une ligne du style :
/hacsfiles/bubble-card/bubble-card.js

en type JavaScript Module.

  • Si ce n’est pas là → ajoute-la manuellement.

Après chaque modif → vide le cache navigateur (Ctrl+Shift+R sur PC).

j,ai tout reinstallé y compris le js et rien

bon bah je suis désolé j’ai essayer de t’aidez personnellement :confused:

je vais laissé d’autre personne répondre si il on une solution sinon je te propose de faire une issue sur

apres avoir redemarrer une derniere fois l’icone est devenu fuchsia

ha ca c’est une bonne nouvelle donc essaie de nouveau

type: custom:bubble-card
card_type: button
button_type: state
name: Production solaire
scrolling_effect: false
show_attribute: false
card_layout: large-2-rows

sub_button:
  - show_background: false
    show_state: true
    icon: mdi:solar-power-variant-outline
    entity: sensor.watt_hour1
    show_name: true
    name: Spa

  - show_background: false
    icon: mdi:solar-power-variant-outline
    show_state: true
    tap_action:
      action: none
    entity: sensor.watt_hour2
    name: Maison
    show_name: true

  - show_background: false
    show_state: true
    icon: mdi:solar-power
    tap_action:
      action: fire-dom-event
      browser_mod:
        service: browser_mod.popup
        data:
          size: normal
          style: "--popup-border-radius: 10px"
          content:
            type: horizontal-stack
            cards:
              - type: statistics-graph
                chart_type: line
                period: hour
                entities:
                  - sensor.qualite_de_l_air_temperature
                stat_types:
                  - max
                logarithmic_scale: false
                hide_legend: true
                title: Température Intérieur
                days_to_show: 1
    entity: sensor.total_day1
    show_name: false

  - show_background: false
    show_state: true
    icon: mdi:solar-power
    tap_action:
      action: none
    entity: sensor.total_day2

show_icon: true
icon: mdi:sun-angle
force_icon: false
show_name: true
show_last_changed: false
entity: sensor.tdeg_cabane_temperature
grid_options:
  columns: 15
  rows: 1

# >>> Styles Bubble-Card natifs (pas de card_mod, pas de Jinja) <<<
styles: |
  /* Calcule les couleurs en JS et les stocke en variables CSS */
  ha-card {
    --spa-color: [[[
      let v = states['sensor.watt_hour1']?.state ?? '0';
      v = parseFloat(String(v).replace(',', '.')) || 0;
      if (v < 200) return 'rgb(var(--bbl-rgb-yellow))';
      if (v < 400) return 'rgb(var(--bbl-rgb-orange))';
      return 'rgb(var(--bbl-rgb-red))';
    ]]];
    --maison-color: [[[
      let v = states['sensor.watt_hour2']?.state ?? '0';
      v = parseFloat(String(v).replace(',', '.')) || 0;
      if (v < 200) return 'rgb(var(--bbl-rgb-yellow))';
      if (v < 400) return 'rgb(var(--bbl-rgb-orange))';
      return 'rgb(var(--bbl-rgb-red))';
    ]]];
  }

  /* SPA = 1er sous-bouton : colore le chiffre (state) + option icône */
  ha-card .bubble-sub-buttons > *:nth-child(1) .bubble-sub-button-state,
  ha-card .bubble-sub-buttons > *:nth-child(1) .state {
    color: var(--spa-color) !important;
    font-weight: 600;
  }
  ha-card .bubble-sub-buttons > *:nth-child(1) ha-icon {
    color: var(--spa-color) !important;
  }

  /* MAISON = 2e sous-bouton */
  ha-card .bubble-sub-buttons > *:nth-child(2) .bubble-sub-button-state,
  ha-card .bubble-sub-buttons > *:nth-child(2) .state {
    color: var(--maison-color) !important;
    font-weight: 600;
  }
  ha-card .bubble-sub-buttons > *:nth-child(2) ha-icon {
    color: var(--maison-color) !important;
  }

hésite pas a redémarrer si besoin

j’ai l’icone fuschia, mais pas les chiffres en couleur, bon en meme temps y a plus de production, y fait nuit.

tu peux modifier les valeur ( fictive dans les outils de développement) attention sa ne reste pas longtemps non plus mais sa te permet de faire tes test

je trouve pas ou ça se trouve

quand je met ce code, j’ai le texte en bold et le reste ne fonctionne pas.

/* === Couleur du texte (état) pour le Maison === */
     .bubble-sub-button-1 { 
      color: [[[
        let v = parseFloat(states['sensor.watt_hour1']?.state || 0);
        if (v < 200) return 'rgb(var(--bbl-rgb-yellow))';
        if (v < 400) return 'rgb(var(--bbl-rgb-orange))';
        return 'rgb(var(--bbl-rgb-red))';
      ]]];
      font-weight: bold;
    }

et quand je met ceci

 /* === Couleur du texte (état) pour la Maison === */
    .bubble-sub-button-2 .bubble-sub-button-state {
      color: [[[
        let v = parseFloat(states['sensor.watt_hour2']?.state || 0);
        if (v < 200) return 'rgb(var(--bbl-rgb-yellow))';
        if (v < 400) return 'rgb(var(--bbl-rgb-orange))';
        return 'rgb(var(--bbl-rgb-red))';
      ]]];
      font-weight: bold;
    }

y a plus rien

Bonjour,
essaye ça plutôt :

styles: |
  .bubble-sub-button-2 .bubble-sub-button-state {
    color: ${hass.states['sensor.watt_hour2'].state <= '200' ? 'yellow' : hass.states['sensor.watt_hour2'].state <= '400' ? 'orange' : 'red'} !important;
    font-weight: bold;
  }

non toujours pas