RTE Tempo couleur demain

Bon, gros taf sur l’automation !
Mes tarifs se mettrons à jour tout seul au premier jour de la couleur rencontrée au passage des heures pleines.

Définir 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

De la forme :

Et ajouter l’automation (EDIT : plus à jour, voir Voir : RTE Tempo : carte - #16 par Feneck91):

alias: Update Tarif Tempo
description: Mise à jour des tarifs tempo HP / HC :Bleu / Blanc / Rouge
triggers:
  - trigger: state
    entity_id:
      - binary_sensor.rte_tempo_heures_creuses
    from: "on"
    to: "off"
    for:
      hours: 0
      minutes: 0
      seconds: 30
conditions:
  - condition: template
    value_template: >-
      {% set color = states('sensor.rte_tempo_couleur_actuelle').lower() %}

      {% set nameHP = 'input_number.tarif_tempo_heures_pleines_ttc_' ~ color %}

      {% set nameHC = 'input_number.tarif_tempo_heures_creuses_ttc_' ~ color %}

      {{ (not is_state(nameHP,
      states['sensor.tarif_tempo_heures_pleines_ttc'].state)) or (not
      is_state(nameHC, states['sensor.tarif_tempo_heures_creuses_ttc'].state))
      }}
actions:
  - sequence:
      - if:
          - condition: template
            value_template: >-
              {% set color = states('sensor.rte_tempo_couleur_actuelle').lower()
              %}

              {% set nameHP = 'input_number.tarif_tempo_heures_pleines_ttc_' ~
              color %}

              {% set nameHC = 'input_number.tarif_tempo_heures_creuses_ttc_' ~
              color %}

              {# Si on arrive ici c'est que les tarifs ne correspondent pas #}

              {# Si le tarif en cours n'est pas à 0 c'est que les tarifs ont
              changés, il faut mettre tous les tarifs à 0 #}

              {{ states(nameHP)|float != 0.0 or states(nameHC)|float != 0.0 }}
        then:
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.tarif_tempo_heures_creuses_ttc_bleu
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.tarif_tempo_heures_pleines_ttc_bleu
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.tarif_tempo_heures_creuses_ttc_blanc
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.tarif_tempo_heures_pleines_ttc_blanc
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.tarif_tempo_heures_creuses_ttc_rouge
          - action: input_number.set_value
            metadata: {}
            data:
              value: 0
            target:
              entity_id: input_number.tarif_tempo_heures_pleines_ttc_rouge
      - action: input_number.set_value
        metadata: {}
        data:
          value: |
            {{ states['sensor.tarif_tempo_heures_creuses_ttc'].state }}
        target:
          entity_id: >
            {% set color = states('sensor.rte_tempo_couleur_actuelle').lower()
            %} {{ 'input_number.tarif_tempo_heures_creuses_ttc_' ~ color }}
      - action: input_number.set_value
        metadata: {}
        data:
          value: |
            {{ states['sensor.tarif_tempo_heures_pleines_ttc'].state }}
        target:
          entity_id: >
            {% set color = states('sensor.rte_tempo_couleur_actuelle').lower()
            %} {{ 'input_number.tarif_tempo_heures_pleines_ttc_' ~ color }}
mode: single

Et en prime voici ma carte, modifiée par rapport à ce que j’ai trouvé ici et là !

square: false
type: grid
cards:
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: sensor.rte_tempo_couleur_actuelle
        name: Aujourd'hui
        show_label: true
        label: |
          [[[
            var date = new Date();
            var day = ('0' + date.getDate()).slice(-2);
            var month = date.toLocaleString('fr-FR', { month: 'short' }).replace('.','');
            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 = '€/kWh';
                  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 = '€/kWh';
                  tarifs_hp = tarifs_hp_val.replace('.', ',');
               }
            }
            return `<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: Demain
        show_label: true
        label: |
          [[[
            var date = new Date();
            date.setDate(date.getDate() + 1);
            var day = ('0' + date.getDate()).slice(-2);
            var month = date.toLocaleString('fr-FR', { month: 'short' }).replace('.','');
            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 = '€/kWh';
                  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 = '€/kWh';
                  tarifs_hp = tarifs_hp_val.replace('.', ',');
               }
            }
            return `<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: glance
    show_name: true
    show_icon: true
    show_state: true
    entities:
      - entity: sensor.tarif_tempo_heures_creuses_ttc
        name: Tarif HC
        icon: mdi:cash
        card_mod:
          style: |
            :host {
              {% if is_state('binary_sensor.rte_tempo_heures_creuses', 'on') %}
                border-style: solid;
                border-radius: 12px;
                border-color: #ADD6FF;
                background: #ADD6FF;
              {% endif %}
            }
      - entity: sensor.rte_tempo_heures_creuses_changement
        name: Changement
      - entity: sensor.tarif_tempo_heures_pleines_ttc
        name: Tarif HP
        icon: mdi:cash
        card_mod:
          style: |
            :host {
              {% if is_state('binary_sensor.rte_tempo_heures_creuses', 'off') %}
                border-style: solid;
                border-radius: 12px;
                border-color: #FFB6AD;
                background: #FFB6AD;
              {% endif %}
            }
  - type: markdown
    content: |-
      **Jours restants**
      Pour la période du 1er septembre 2023 au 31 août 2024

      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

Voilà ce que ça donne :