RTE Tempo : carte

Parce que tu mets à jour ton fichier à la main à chaque changement de tarif.
Là, il se met à jour tout seul via l’intégration Tarif EDF : a chaque jour qui démarre, lorsque le tarif est à 0 (celui de mes variables) il est mis à jour avec le tarif courant donné par l’intégration Tarif EDF (je ne sais pas comment il récupère le tarif).
Si le tarif change, alors tous mes tarifs sont mis à 0 et ensuite, chaque première fois où l’on rencontre un type de journée (Bleu / Blanc / Rouge) le tarif est mis à jour dans mes variables.
Rien n’empêche non plus de mettre à jour les variables à la main.

Si toi tu ne mets par à jour tes tarifs à la bonne date, à la main, dans un an ils seront certainement faux, les miens détectent le changement et se mettent à jour quand ils peuvent automatiquement.

Les variables sont les suivantes, 6 variables numériques :
input_number.tarif_tempo_heures_creuses_ttc_bleu
input_number.tarif_tempo_heures_pleines_ttc_bleu
input_number.tarif_tempo_heures_creuses_ttc_blanc
input_number.tarif_tempo_heures_pleines_ttc_blanc
input_number.tarif_tempo_heures_creuses_ttc_rouge
input_number.tarif_tempo_heures_pleines_ttc_rouge

@pascal_ha : Tu gères ton Aujourd’hui / Demain entre 0h00 et 6h00 ?

Exact, mais generalement ont est prevenu de l’evolution des tarifs. donc pas eu de probleme.

Oui, j’ai repris ton ameliration, mais j’ai remplacé la valeur <12 par <6. je verrais ce soir ce que cela donne.

Apres j’ai mis en doublon ta carte à coté de celle que j’utilise. Je verrais ce qui me plait le plus.

En fait, c’est juste une sécurité ! Pour ma part, tant qu’on est pas repassé en heures pleine, il reste sur Hier / Aujourd’hui au lieu de Aujourd’hui / Demain jusque midi.
Si tu mets 6h00, alors entre 6h00 et la mise à jour du basculement HC vers HP tes jours seront faux et les couleurs aussi.
Moi j’ai mis 12:00 par sécurité, mais si le baculement se fait à 6:30 ou 6:02 alors le changement Aujourd’hui / Demain se fait à cet heure là.
C’est juste une sécurité, souvent le basculement arrive vers 6h et quelques minutes.
Tu devrais laisser à plus que 6h00, là en mettant 6h00 tu es sur que ce sera mauvais quelques minutes par jour.

Bon ce que j’ai dis plus haut c’est que de la m e r d e !!
En fait cette intégration Tarif EDF est à supprimer dès que je peux car sur le tarif Tempo, les tarifs sont claqués en dur !
C’est dans le fichier const.py et ce n’est récupéré nulle part !

TEMPO_PRICES_DETAILS={
    1: {
        "couleur": "bleu",
        "hc": 0.1296,
        "hp": 0.1609
    },
    2: {
        "couleur": "blanc",
        "hc": 0.1486,
        "hp": 0.1894
    },
    3: {
        "couleur": "rouge",
        "hc": 0.1568,
        "hp": 0.7562
    }
}

Bref, c’est comme si j’avais mis les tarifs en dur mais en plus je n’ai que le prix du jour !
Toute cette débauche d’énergie pour rien ! Sauf la carte que je trouve sympa.

Je vais écrire ma première intégration je crois !
Il faut récupérer le fichier pdf : https://particulier.edf.fr/content/dam/2-Actifs/Documents/Offres/Grille_prix_Tarif_Bleu.pdf
Puis en extraire le texte, l’analyser puis mettre à jour les tarifs.

Pour rien, non ! sa a permis d’ameliorer la carte (aujourd’hui/demain - Hier/aujourd’hui).
Apres les tarifs, c’est vrai que c’est pas pratique de devoir mettre a jour, mais c’est pas insurmontable.

Et puis tant que tu change pas les prix , tu fait des economies :rofl: :rofl:

Cela depasse mes competences

Moi j’y connais rien mais je suis ingénieur en informatique.
Il y a des supers tuto pour faire une intégration.
Je connais plein de langage dont le python avec lequel je fais des programmes de plusieurs milliers de lignes. Là ça va être vraiment simple, il faut juste comprendre comment fonctionnent les intégrations.
Et puis … avoir le temps.

Je partage ma carte pour ceux qui le souhaite :
Capture d’écran 2024-11-29 161203

Le code:

type: custom:stack-in-card
mode: vertical
keep:
  box_shadow: true
  margin: false
  border_radius: true
  background: true
  outer_padding: false
cards:
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: sensor.rte_tempo_couleur_actuelle
        name: |
          [[[
            const dateObj = new Date();
            const day = dateObj.getDate();
            const month = dateObj.toLocaleDateString('fr-FR', { month: 'long' });
            const lineColor = (entity.state === 'Blanc' || entity.state === 'inconnu') ? 'rgba(0, 0, 0, 0.5)' : 'rgba(255, 255, 255, 0.5)';
            const capsuleColor = entity.state === 'Bleu' ? 'rgba(0, 0, 102, 0.8)' : (entity.state === 'Rouge' ? 'rgba(102, 0, 0, 0.8)' : 'rgba(128, 128, 128, 0.5)');
            let displayState;
            if (entity.state === 'Bleu') displayState = 'Jour bleu';
            else if (entity.state === 'Rouge') displayState = 'Jour rouge';
            else if (entity.state === 'Blanc') displayState = 'Jour blanc';
            else displayState = 'Indéterminé';
            return `<div style="background-color: ${capsuleColor}; padding: 4px 12px; border-radius: 14px; display: inline-block; margin-bottom: 6px; color: white;">Aujourd'hui</div><br><span style="font-size: 22px; font-weight: bold;">${day}</span> ${month}<br><div style="width: 100px; height: 1px; background-color: ${lineColor}; margin: 4px auto;"></div><span style="font-size: 13px;">${displayState}</span>`;
          ]]]
        show_icon: false
        show_state: false
        styles:
          card:
            - background: |
                [[[
                  if (entity.state === 'Bleu') return 'radial-gradient(circle, #0d61fc, #0404c2)';
                  if (entity.state === 'Blanc') return 'radial-gradient(circle, #ffffff, #cccccc)';
                  if (entity.state === 'Rouge') return 'radial-gradient(circle, #fc2121, #9c0505)';
                  return 'repeating-linear-gradient(-45deg, #dddddd, #dddddd 3px, #aaaaaa 3px, #aaaaaa 6px)';
                ]]]
            - display: flex
            - align-items: center
            - justify-content: center
            - text-align: center
          name:
            - color: |
                [[[
                  if (entity.state === 'Rouge' || entity.state === 'Bleu') return 'white';
                  return 'black';
                ]]]
            - font-family: "'Helvetica Neue', Arial, sans-serif"
            - font-size: 18px
      - type: custom:button-card
        entity: sensor.rte_tempo_prochaine_couleur
        name: |
          [[[
            let tomorrow = new Date();
            tomorrow.setDate(tomorrow.getDate() + 1);
            const day = tomorrow.getDate();
            const month = tomorrow.toLocaleDateString('fr-FR', { month: 'long' });
            const lineColor = (entity.state === 'Blanc' || entity.state === 'inconnu') ? 'rgba(0, 0, 0, 0.5)' : 'rgba(255, 255, 255, 0.5)';
            const capsuleColor = entity.state === 'Bleu' ? 'rgba(0, 0, 102, 0.8)' : (entity.state === 'Rouge' ? 'rgba(102, 0, 0, 0.8)' : 'rgba(128, 128, 128, 0.5)');
            let displayState;
            if (entity.state === 'Bleu') displayState = 'Jour bleu';
            else if (entity.state === 'Rouge') displayState = 'Jour rouge';
            else if (entity.state === 'Blanc') displayState = 'Jour blanc';
            else displayState = 'Indéterminé';
            return `<div style="background-color: ${capsuleColor}; padding: 4px 12px; border-radius: 14px; display: inline-block; margin-bottom: 6px; color: white;">Demain</div><br><span style="font-size: 22px; font-weight: bold;">${day}</span> ${month}<br><div style="width: 100px; height: 1px; background-color: ${lineColor}; margin: 4px auto;"></div><span style="font-size: 13px;">${displayState}</span>`;
          ]]]
        show_icon: false
        show_state: false
        styles:
          card:
            - background: |
                [[[
                  if (entity.state === 'Bleu') return 'radial-gradient(circle, #0d61fc, #0404c2)';
                  if (entity.state === 'Blanc') return 'radial-gradient(circle, #ffffff, #cccccc)';
                  if (entity.state === 'Rouge') return 'radial-gradient(circle, #fc2121, #9c0505)';
                  return 'repeating-linear-gradient(-45deg, #dddddd, #dddddd 3px, #aaaaaa 3px, #aaaaaa 6px)';
                ]]]
            - display: flex
            - align-items: center
            - justify-content: center
            - text-align: center
          name:
            - color: |
                [[[
                  if (entity.state === 'Rouge' || entity.state === 'Bleu') return 'white';
                  return 'black';
                ]]]
            - font-family: "'Helvetica Neue', Arial, sans-serif"
            - font-size: 18px
  - type: horizontal-stack
    cards:
      - type: custom:mushroom-entity-card
        entity: sensor.rte_tempo_cycle_jours_restants_bleu
        icon_color: blue
        icon: mdi:calendar
        name: " "
        layout: horizontal
        primary_info: state
        secondary_info: none
        icon_type: icon
        card_mod:
          style: |
            ha-card {
              padding: 8px 0px !important;
              display: flex;
              justify-content: center;
              align-items: center;
              background: radial-gradient(circle, rgba(13, 97, 252, 0.3), rgba(28, 28, 28, 0.3));
              border: #242424;
            }
            mushroom-state-item {
              --icon-size: 24px !important;
            }
      - type: custom:mushroom-entity-card
        entity: sensor.rte_tempo_cycle_jours_restants_blanc
        icon_color: white
        icon: mdi:calendar
        name: " "
        layout: horizontal
        primary_info: state
        secondary_info: none
        icon_type: icon
        card_mod:
          style: |
            ha-card {
              padding: 8px 0px !important;
              display: flex;
              justify-content: center;
              align-items: center;
              background: radial-gradient(circle, rgba(255, 255, 255, 0.3), rgba(28, 28, 28, 0.3));
              border: #242424;
            }
            mushroom-state-item {
              --icon-size: 24px !important;
            }
      - type: custom:mushroom-entity-card
        entity: sensor.rte_tempo_cycle_jours_restants_rouge
        icon_color: "#FC2121"
        icon: mdi:calendar
        name: " "
        layout: horizontal
        primary_info: state
        secondary_info: none
        icon_type: icon
        card_mod:
          style: |
            ha-card {
              padding: 8px 0px !important;
              display: flex;
              justify-content: center;
              align-items: center;
              background: radial-gradient(circle, rgba(252, 33, 33, 0.3), rgba(28, 28, 28, 0.3));
              border: #242424;
            }
            mushroom-state-item {
              --icon-size: 24px !important;
            }
            shape {
            background-color: rgba(0)!important;
            }

3 « J'aime »

J’aime bien les dégradés, c’est joli.
Par contre on ne sait pas ce que sont les jours, à priori ceux qu’il reste, jusque quand ?
Et dans ton code comme tous les autres, entre minuit et 6h00 ta carte est buggé !
Il t’indique aujourd’hui qui est la couleur de hier et demain qui est celle d’aujourd’hui avec des mauvaises couleurs.

J’ai mis en gras les couleurs du jour.

square: false
type: grid
cards:
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: sensor.rte_tempo_couleur_actuelle
        name: |
          [[[
            var firstDay = "Aujourd'hui";

            if (new Date().getHours() < 12 && states['binary_sensor.rte_tempo_heures_creuses'].state === 'on')
            { // Jusque midi pour se mettre à jour (passer en HC) !
              // Sans cette gestion, entre 0h00 et 6h00 les jours sont faux, c'est demain !
              firstDay = "Hier";
            }
          return firstDay;
          ]]]
        show_label: true
        label: |
          [[[
            var date = new Date();
            if (date.getHours() < 12 && states['binary_sensor.rte_tempo_heures_creuses'].state === 'on')
            { // Jusque midi pour se mettre à jour (passer en HC) !
              // Sans cette gestion, entre 0h00 et 6h00 les jours
              // sont faux, c'est demain !
              date.setDate(date.getDate() - 1);
            }
            var dayOfWeek = date.toLocaleString('fr-FR', { weekday: 'short' });
            var day = ('0' + date.getDate()).slice(-2);
            var month = date.toLocaleString('fr-FR', { month: 'short' });
            var color = states['sensor.rte_tempo_couleur_actuelle'].state;
            var color_text = (color === 'unavailable') ? "(Non disponible)" : "Jour " + color;
            // Tarifs
            var tarifs_hc = 'Non disponible';
            var tarifs_hc_unit = '';
            var tarifs_hp = 'Non disponible';
            var tarifs_hp_unit = '';
            if (color !== 'unavailable')
            {
               var tarifs_hc_val = (states['input_number.tarif_tempo_heures_creuses_ttc_' + color.toLowerCase()].state);
               if (tarifs_hc_val != 0.0)
               {
                  tarifs_hc_unit = states['input_number.tarif_tempo_heures_creuses_ttc_' + color.toLowerCase()].attributes['unit_of_measurement'];
                  tarifs_hc = tarifs_hc_val.replace('.', ',');
               }
               var tarifs_hp_val = (states['input_number.tarif_tempo_heures_pleines_ttc_' + color.toLowerCase()].state);
               if (tarifs_hp_val != 0.0)
               {
                  tarifs_hp_unit = states['input_number.tarif_tempo_heures_pleines_ttc_' + color.toLowerCase()].attributes['unit_of_measurement'];
                  tarifs_hp = tarifs_hp_val.replace('.', ',');
               }
            }
            return `${dayOfWeek} <span style="font-size: 1.5em;">${day}</span> ${month}<hr style="margin: 1px 0 8px; border-top: 1px solid rgba(0, 0, 0, 0.2);">Tarif HC : ${tarifs_hc} ${tarifs_hc_unit}<br/>Tarif HP : ${tarifs_hp} ${tarifs_hp_unit}`;
          ]]]
        styles:
          card:
            - height: 130px
            - background-color: |
                [[[
                  var color = states['sensor.rte_tempo_couleur_actuelle'].state.toLowerCase();
                  return (color === 'rouge') ? '#c62828' : 
                        (color === 'blanc') ? '#ffffff' : 
                        (color === 'bleu') ? '#1565c0' : 
                        'var(--card-background-color)';
                ]]]
            - color: |
                [[[
                  return (states['sensor.rte_tempo_couleur_actuelle'].state.toLowerCase() === 'blanc') ? 'black' : 'white';
                ]]]
            - border-radius: 20px
            - padding: 16px
            - font-size: 1.2em
            - text-align: center
            - box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.3)
          grid:
            - grid-template-areas: "\"n\" \"l\""
            - grid-template-rows: 1fr min-content
          name:
            - font-weight: bold
            - font-size: 1.2em
          label:
            - font-size: 0.9em
            - justify-self: center
            - align-self: center
            - margin-top: 10px
      - type: custom:button-card
        entity: sensor.rte_tempo_prochaine_couleur
        name: |
          [[[
            var secondDay = "Demain";

            if (new Date().getHours() < 12 && states['binary_sensor.rte_tempo_heures_creuses'].state === 'on')
            { // Jusque midi pour se mettre à jour (passer en HC) !
              // Sans cette gestion, entre 0h00 et 6h00 les jours sont faux, c'est demain !
              secondDay = "Aujourd'hui";
            }
          return secondDay;
          ]]]
        show_label: true
        label: |
          [[[
            var date = new Date();
            date.setDate(date.getDate() + 1);
            if (date.getHours() < 12 && states['binary_sensor.rte_tempo_heures_creuses'].state === 'on')
            { // Jusque midi pour se mettre à jour (passer en HC) !
              // Sans cette gestion, entre 0h00 et 6h00 les jours
              // sont faux, c'est après demain !
              date.setDate(date.getDate() - 1);
            }
            var dayOfWeek = date.toLocaleString('fr-FR', { weekday: 'short' });
            var day = ('0' + date.getDate()).slice(-2);
            var month = date.toLocaleString('fr-FR', { month: 'short' });
            var color = states['sensor.rte_tempo_prochaine_couleur'].state;
            var color_text = (color === 'unavailable') ? "(Non disponible)" : "Jour " + color;
            // Tarifs
            var tarifs_hc = 'Non disponible';
            var tarifs_hc_unit = '';
            var tarifs_hp = 'Non disponible';
            var tarifs_hp_unit = '';
            
            if (color !== 'unavailable')
            {
               var tarifs_hc_val = (states['input_number.tarif_tempo_heures_creuses_ttc_' + color.toLowerCase()].state);
               if (tarifs_hc_val != 0.0)
               {
                  tarifs_hc_unit = states['input_number.tarif_tempo_heures_creuses_ttc_' + color.toLowerCase()].attributes['unit_of_measurement'];
                  tarifs_hc = tarifs_hc_val.replace('.', ',');
               }
               var tarifs_hp_val = (states['input_number.tarif_tempo_heures_pleines_ttc_' + color.toLowerCase()].state);
               if (tarifs_hp_val != 0.0)
               {
                  tarifs_hp_unit = states['input_number.tarif_tempo_heures_pleines_ttc_' + color.toLowerCase()].attributes['unit_of_measurement'];
                  tarifs_hp = tarifs_hp_val.replace('.', ',');
               }
            }
            return `${dayOfWeek} <span style="font-size: 1.5em;">${day}</span> ${month}<hr style="margin: 1px 0 8px; border-top: 1px solid rgba(0, 0, 0, 0.2);">Tarif HC : ${tarifs_hc} ${tarifs_hc_unit}<br/>Tarif HP : ${tarifs_hp} ${tarifs_hp_unit}`;
          ]]]
        styles:
          card:
            - height: 130px
            - background-color: |
                [[[
                  var color = states['sensor.rte_tempo_prochaine_couleur'].state.toLowerCase();
                  return (color === 'rouge') ? '#c62828' :
                        (color === 'blanc') ? '#fFfFfF' : 
                        (color === 'bleu') ? '#1565c0' :
                        (color === 'unavailable') ? 'orange' :
                        'var(--card-background-color)';
                ]]]
            - color: |
                [[[
                  return (states['sensor.rte_tempo_prochaine_couleur'].state.toLowerCase() === 'blanc') ? 'black' : 'white';
                ]]]
            - border-radius: 20px
            - padding: 16px
            - font-size: 1.2em
            - text-align: center
            - box-shadow: 0px 2px 4px 0px rgba(0,0,0,0.3)
          grid:
            - grid-template-areas: "\"n\" \"l\""
            - grid-template-rows: 1fr min-content
          name:
            - font-weight: bold
            - font-size: 1.3em
          label:
            - font-size: 0.9em
            - justify-self: center
            - align-self: center
            - margin-top: 10px
  - type: markdown
    content: "**La couleur du lendemain est actualisée tous les jours dès 6\_h.**\nPour plus d'information, visiter le site [Tempo EDF](https://particulier.edf.fr/fr/accueil/gestion-contrat/options/tempo.html#/).\n\nLes Heures Pleines sont de 6\_h à 22\_h.\nLes Heures Creuses sont de 22\_h à 6\_h.\n"
  - type: grid
    square: false
    columns: 1
    cards:
      - type: horizontal-stack
        cards:
          - type: markdown
            card_mod:
              style:
                ha-markdown: |
                  ha-card
                  {
                    {% if is_state('binary_sensor.rte_tempo_heures_creuses', 'on') %}
                      border-style: solid;
                      border-radius: 12px;
                      border-color: #ADD6FF;
                      background: #ADD6FF;
                    {% endif %}
                  }
            content: >-
              {# Calcul HC Bleu #}
              {% set tarifs_hc_bleu = 'Indisponible' %}
              {% set unit_hc_bleu = '' %}
              {% set tarifs_hc_val_bleu =
              states['input_number.tarif_tempo_heures_creuses_ttc_bleu'].state %}
              {% if tarifs_hc_val_bleu != '0.0' %}
              {% set tarifs_hc_bleu = tarifs_hc_val_bleu.replace('.', ',') %}
              {# {% set unit_hc_bleu = states['input_number.tarif_tempo_heures_creuses_ttc_bleu'].attributes['unit_of_measurement'] %} #}
              {% endif %}
              {# Calcul HC Blanc #}
              {% set tarifs_hc_blanc = 'Indisponible' %}
              {% set unit_hc_blanc = '' %}
              {% set tarifs_hc_val_blanc = states['input_number.tarif_tempo_heures_creuses_ttc_blanc'].state %}
              {% if tarifs_hc_val_blanc != '0.0' %}
              {% set tarifs_hc_blanc = tarifs_hc_val_blanc.replace('.', ',') %}
              {# {% set unit_hc_blanc = states['input_number.tarif_tempo_heures_creuses_ttc_blanc'].attributes['unit_of_measurement'] %} #}
              {% endif %}
              {# Calcul HC Rouge #}
              {% set tarifs_hc_rouge = 'Indisponible' %}
              {% set unit_hc_rouge = '' %}
              {% set tarifs_hc_val_rouge = states['input_number.tarif_tempo_heures_creuses_ttc_rouge'].state %}
              {% if tarifs_hc_val_rouge != '0.0' %}
              {% set tarifs_hc_rouge = tarifs_hc_val_rouge.replace('.', ',') %}
              {# {% set unit_hc_rouge = states['input_number.tarif_tempo_heures_creuses_ttc_rouge'].attributes['unit_of_measurement'] %} #}
              {% endif %}

              **<center>Tarif HC</center>**
              <center>({{ states['input_number.tarif_tempo_heures_creuses_ttc_bleu'].attributes['unit_of_measurement'] }})</center>
              <br/>
              🔵 {% if states['sensor.rte_tempo_couleur_actuelle'].state == 'Bleu' %}<b>{{ tarifs_hc_bleu }} {{ unit_hc_bleu }}</b>{% else %}{{ tarifs_hc_bleu }} {{ unit_hc_bleu }}{% endif %}<br/>
              ⚪️ {% if states['sensor.rte_tempo_couleur_actuelle'].state == 'Blanc' %}<b>{{ tarifs_hc_blanc }} {{ unit_hc_blanc }}</b>{% else %}{{ tarifs_hc_blanc }} {{ unit_hc_blanc }}{% endif %}<br/>
              🔴 {% if states['sensor.rte_tempo_couleur_actuelle'].state == 'Rouge' %}<b>{{ tarifs_hc_rouge }} {{ unit_hc_rouge }}</b>{% else %}{{ tarifs_hc_rouge }} {{ unit_hc_rouge }}{% endif %}<br/>
          - type: markdown
            content: >-
              {% set rel = ((as_timestamp(states['sensor.rte_tempo_heures_creuses_changement'].state) | float) - as_timestamp(now())) %}
              {% set duration = 'Maintenant' %}
              {% if (rel / 3600.0) >= 2.0 %}
              {% set duration = 'Dans ' + ((rel / 3600.0) | round(0) | string) + ' heures' %}
              {% elif (rel / 3600.0) >= 1.0 %}
              {% set duration = 'Dans une heure' %}
              {% elif rel / 3600.0 > 0.0 and ((rel / 60.0) | round(0)) > 1.0 %}
              {% set duration = 'Dans ' + ((rel / 60.0) | round(0) | string) + ' minutes' %}
              {% elif rel / 3600.0 > 0.0 %}
              {% set duration = 'Dans une minute' %}
              {% endif %}

              **<center>Changement</center>**
              <br/>
              <center><font color="#44739E"><ha-icon icon="mdi:clock"></ha-icon></font><br/></center>
              <br/>
              <center>{{ duration }}</center>
          - type: markdown
            card_mod:
              style:
                ha-markdown: |
                  ha-card
                  {
                    {% if is_state('binary_sensor.rte_tempo_heures_creuses', 'off') %}
                      border-style: solid;
                      border-radius: 12px;
                      border-color: #FFB6AD;
                      background: #FFB6AD;
                    {% endif %}
                  }
            content: >-
              {# Calcul HP Bleu #}
              {% set tarifs_hp_bleu = 'Indisponible' %}
              {% set unit_hp_bleu = '' %}
              {% set tarifs_hp_val_bleu = states['input_number.tarif_tempo_heures_pleines_ttc_bleu'].state %}
              {% if tarifs_hp_val_bleu != '0.0' %}
              {% set tarifs_hp_bleu = tarifs_hp_val_bleu.replace('.', ',') %}
              {# {% set unit_hp_bleu = states['input_number.tarif_tempo_heures_pleines_ttc_bleu'].attributes['unit_of_measurement'] %} #}
              {% endif %}
              {% set tarifs_hp_blanc = 'Indisponible' %}
              {# Calcul HP Blanc #}
              {% set unit_hp_blanc = '' %}
              {% set tarifs_hp_val_blanc = states['input_number.tarif_tempo_heures_pleines_ttc_blanc'].state %}
              {% if tarifs_hp_val_blanc != '0.0' %}
              {% set tarifs_hp_blanc = tarifs_hp_val_blanc.replace('.', ',') %}
              {# {% set unit_hp_blanc = states['input_number.tarif_tempo_heures_pleines_ttc_blanc'].attributes['unit_of_measurement'] %} #}
              {% endif %}
              {% set tarifs_hp_rouge = 'Indisponible' %}
              {# Calcul HP Rouge #}
              {% set unit_hp_rouge = '' %}
              {% set tarifs_hp_val_rouge = states['input_number.tarif_tempo_heures_pleines_ttc_rouge'].state %}
              {% if tarifs_hp_val_rouge != '0.0' %}
              {% set tarifs_hp_rouge = tarifs_hp_val_rouge.replace('.', ',') %}
              {# {% set unit_hp_rouge = states['input_number.tarif_tempo_heures_pleines_ttc_rouge'].attributes['unit_of_measurement'] %} #}
              {% endif %}

              **<center>Tarif HP</center>**
              <center>({{ states['input_number.tarif_tempo_heures_pleines_ttc_bleu'].attributes['unit_of_measurement'] }})</center>
              <br/>
              🔵 {% if states['sensor.rte_tempo_couleur_actuelle'].state == 'Bleu' %}<b>{{ tarifs_hp_bleu }} {{ unit_hp_bleu }}</b>{% else %}{{ tarifs_hp_bleu }} {{ unit_hp_bleu }}{% endif %}<br/>
              ⚪️ {% if states['sensor.rte_tempo_couleur_actuelle'].state == 'Blanc' %}<b>{{ tarifs_hp_blanc }} {{ unit_hp_blanc }}</b>{% else %}{{ tarifs_hp_blanc }} {{ unit_hp_blanc }}{% endif %}<br/>
              🔴 {% if states['sensor.rte_tempo_couleur_actuelle'].state == 'Rouge' %}<b>{{ tarifs_hp_rouge }} {{ unit_hp_rouge }}</b>{% else %}{{ tarifs_hp_rouge }} {{ unit_hp_rouge }}{% endif %}<br/>
  - type: markdown
    content: |-
      {% set n = now() %}
      {% set year = n.year %}
      {% if n.month < 9 %}
      {% set year = year - 1 %}
      {% endif %}

      **Jours restants**
      Pour la période du 1er septembre {{ year }} au 31 août {{ year + 1 }}

      La journée de demain est déjà prise en compte dans les décomptes affichés.
  - type: horizontal-stack
    cards:
      - type: markdown
        content: |
          **Jours bleus**
          🔵 {{states('sensor.rte_tempo_cycle_jours_restants_bleu')}}/301
      - type: markdown
        content: |
          **Jours blancs**
          ⚪️ {{states('sensor.rte_tempo_cycle_jours_restants_blanc')}}/43
      - type: markdown
        content: |
          **Jours rouges**
          🔴 {{states('sensor.rte_tempo_cycle_jours_restants_rouge')}}/22
columns: 1
1 « J'aime »

Effectivement je ne m’était pas rendu compte du problème entre 00h00 et 6h00.
Merci pour l’info, j’ai pu corriger.

Super, content d’avoir pu t’aider à corriger.
Ta carte peut intéresser les autres, tu peux la re-publier avec tes corrections ?