RTE Tempo : carte

Bon, j’ai fini la carte et certaines automatisations :
Il faut se baser sur ce message : RTE Tempo couleur demain - #67 par Feneck91
Mais j’ai changé 2 choses depuis ce message : la carte et l’automatisation.

La carte (un des message ne prenait pas en compte l’année courante), on peut le voir sur la capture ici (jour restant jusque Août 2024), mais c’est corrigé + ajout du jour de la semaine (mer / jeu /etc) :

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 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: Demain
        show_label: true
        label: |
          [[[
            var date = new Date();
            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: 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: |-
      {% 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

L’automatisation : je gère désormais le fait que le tarif se met à jour n’importe quand (non testé) : Mise à jour ce jour du tarif blanc à 20h00 passé et ça marche !

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
  - trigger: state
    entity_id:
      - sensor.tarif_tempo_heures_creuses_ttc
      - sensor.tarif_tempo_heures_pleines_ttc
    for:
      hours: 0
      minutes: 1
      seconds: 30
conditions:
  - condition: or
    conditions:
      - condition: state
        entity_id: sensor.rte_tempo_couleur_actuelle
        state: Bleu
      - condition: state
        entity_id: sensor.rte_tempo_couleur_actuelle
        state: Blanc
      - condition: state
        entity_id: sensor.rte_tempo_couleur_actuelle
        state: Rouge
  - 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 %}

      {% set lastUpdateHCMin = ((as_timestamp(now()) -
      as_timestamp(states['sensor.tarif_tempo_heures_creuses_ttc'].last_updated))
      / 60 | int) %}

      {% set lastUpdateHPMin = ((as_timestamp(now()) -
      as_timestamp(states['sensor.tarif_tempo_heures_pleines_ttc'].last_updated))
      / 60 | int) %}

      {% set isOneValueIsNotSame = (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))
      %}

      {# Si une des deux valeurs (tarif HP et HC) est différente de celle de
      référence ET si les deux dernière mise à jour du tarif datent de moins de
      6h00 #}

      {# Permet de gérer le fait que la mise à jour du tarif peut arriver plus
      tard dans la journée #}

      {{ isOneValueIsNotSame and lastUpdateHCMin < 360 and lastUpdateHPMin < 360
      }}
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
2 « J'aime »