RTE Tempo : carte

Bonjour et merci,
oui, il faut leur faire un email. ils sont réactifs. A toutes fins utiles, ci dessous l’intégration de “météo tempo” de Kriss Récupération des prévisions Tempo

J’ai modifié le code des cartes pour mixer les deux (avec la tarification venant de l’intégration edf)

type: custom:vertical-stack-in-card
title: Prévisions Tempo
cards:
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: sensor.rte_tempo_couleur_actuelle
        name: |
          [[[
            var firstDay = "Aujourd'hui";
            return firstDay;
          ]]]
        show_label: true
        label: |
          [[[
            var date = new Date();
            
            var day = date.toLocaleString('fr-FR', { weekday: 'short' }).slice(0, 3);
            var dayOfMonth = ('0' + date.getDate()).slice(-2);
            var month = date.toLocaleString('fr-FR', { month: 'short' }).replace('.', '');

            date.setDate(date.getDate() + 1);
            var daydemain = date.toLocaleString('fr-FR', { weekday: 'short' }).slice(0, 3);
            var dayOfMonthdemain = ('0' + date.getDate()).slice(-2);
            var monthdemain = date.toLocaleString('fr-FR', { month: 'short' }).replace('.', '');
            

            var hc = states['binary_sensor.rte_tempo_heures_creuses'].state;
            var couleurActuelle = states['sensor.rte_tempo_couleur_actuelle'].state.toLowerCase();

            var heuresPleinesActuelles = states['binary_sensor.rte_tempo_heures_creuses'].state;
            var heuresCreusesActuelles = states['binary_sensor.rte_tempo_heures_creuses'].state;

            var hpprixLabel;
            if (couleurActuelle === 'bleu' && heuresPleinesActuelles)
            {hpprixLabel = (Math.round(states['sensor.tarif_bleu_tempo_heures_pleines_ttc'].state *10000)/100).toString();}
             else if (couleurActuelle === 'blanc' && heuresPleinesActuelles)
            {hpprixLabel = (Math.round(states['sensor.tarif_blanc_tempo_heures_pleines_ttc'].state *10000)/100).toString();}
             else if (couleurActuelle === 'rouge' && heuresPleinesActuelles)
            {hpprixLabel = (Math.round(states['sensor.tarif_rouge_tempo_heures_pleines_ttc'].state *10000)/100).toString();} 
             else
            {hpprixLabel = 'Indisponible'};

            var hcprixLabel;
            if (couleurActuelle === 'bleu' && heuresCreusesActuelles)
            {hcprixLabel = (Math.round(states['sensor.tarif_bleu_tempo_heures_creuses_ttc'].state *10000)/100).toString();}
             else if (couleurActuelle === 'blanc' && heuresCreusesActuelles)
            {hcprixLabel = (Math.round(states['sensor.tarif_blanc_tempo_heures_creuses_ttc'].state *10000)/100).toString();}
             else if (couleurActuelle === 'rouge' && heuresCreusesActuelles)
            {hcprixLabel = (Math.round(states['sensor.tarif_rouge_tempo_heures_creuses_ttc'].state *10000)/100).toString();}
             else 
            {hcprixLabel = 'Indisponible'};

            var currentHour = new Date().getHours();
            var isCheckedhp = currentHour >= 6 && currentHour < 22;
            var isCheckedhc = currentHour < 6 || currentHour >= 22;

            return `<br><span style="font-size: 1.2em; margin: 10px 0;">${day} ${dayOfMonth} ${month}</span>
            <br><span style="font-size: 0.9em; margin: 5px 0;">Au ${daydemain} ${dayOfMonthdemain} ${monthdemain} à 06h00</span>
            <hr style="margin: 1px 0 8px;">
            HP ${hpprixLabel} c€/kWh &nbsp;${isCheckedhp ? '✔' : ''}
            <br>HC ${hcprixLabel} c€/kWh &nbsp;${isCheckedhc ? '✔' : ''}
            <br><br>Heures creuses ${hc}
            <br><br>`;
          ]]]
        styles:
          card:
            - height: 200px
            - background-color: |
                [[[
                  var color = states['sensor.rte_tempo_couleur_actuelle'].state.toLowerCase();
                  return (color === 'rouge') ? '#c62828' : 
                         (color === 'blanc') ? 'white' : 
                         (color === 'bleu') ? '#1565c0' : 
                         'var(--card-background-color)';
                ]]]
            - color: |
                [[[
                  return (states['sensor.rte_tempo_couleur_actuelle'].state.toLowerCase() === 'blanc') ? 'black' : 'white';
                ]]]
            - border-radius: 20px
            - padding: 2px
            - 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.8em
            - justify-self: center
            - align-self: center
      - type: custom:button-card
        entity: sensor.rte_tempo_prochaine_couleur
        name: |
          [[[
            var secondDay = "Demain";
            if (new Date().getHours() < 8 && states['binary_sensor.rte_tempo_heures_creuses'].state === 'on')
            {
              secondDay = "Aujourd'hui";
            }
          return secondDay;
          ]]]
        show_label: true
        label: |
          [[[
            var date = new Date();
            date.setDate(date.getDate() + 1);
            if (date.getHours() < 8 && states['binary_sensor.rte_tempo_heures_creuses'].state === 'on')
            {
              date.setDate(date.getDate() - 1);
            }
            var day = date.toLocaleString('fr-FR', { weekday: 'short' }).slice(0, 3);
            var dayOfMonth = ('0' + date.getDate()).slice(-2);
            var month = date.toLocaleString('fr-FR', { month: 'short' }).replace('.', '');
            var pcolor = states['sensor.rte_tempo_prochaine_couleur'].state;

            var tprice;
             if (pcolor === 'Bleu')
             {tprice = (Math.round(states['sensor.tarif_bleu_tempo_heures_pleines_ttc'].state *10000)/100).toString();}
              else if (pcolor === 'Blanc')
             {tprice = (Math.round(states['sensor.tarif_blanc_tempo_heures_pleines_ttc'].state *10000)/100).toString();}
              else if (pcolor === 'Rouge')
             {tprice = (Math.round(states['sensor.tarif_rouge_tempo_heures_pleines_ttc'].state *10000)/100).toString();} 
              else
             {tprice = 'Indisponible'};    
            
            
            var blrest = states['sensor.rte_tempo_cycle_jours_restants_bleu'].state;
            var bcrest = states['sensor.rte_tempo_cycle_jours_restants_blanc'].state;
            var rgrest = states['sensor.rte_tempo_cycle_jours_restants_rouge'].state;
            
            return `<br><span style="font-size: 1.2em; margin: 10px 0;">${day} ${dayOfMonth} ${month}</span>
            <br><span style="font-size: 0.9em; margin: 5px 0;">A partir de 06h00</span>
            <br><hr style="margin: 1px 0 8px;">Prix ${tprice} c€/kWh</span>
            <br>🔵 ${blrest} restant(s) 
            <br>⚪️   ${bcrest} restant(s)
            <br>🔴 ${rgrest} restant(s)
           
            <br><br>`;
          ]]]
        styles:
          card:
            - height: 200px
            - background-color: |
                [[[
                  var color = states['sensor.rte_tempo_prochaine_couleur'].state.toLowerCase();
                  return (color === 'rouge') ? '#c62828' : 
                         (color === 'blanc') ? 'white' : 
                         (color === 'bleu') ? '#1565c0' : 
                         'var(--card-background-color)';
                ]]]
            - color: |
                [[[
                  return (states['sensor.rte_tempo_prochaine_couleur'].state.toLowerCase() === 'blanc') ? 'black' : 'white';
                ]]]
            - border-radius: 20px
            - padding: 2px
            - 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.8em
            - justify-self: center
            - align-self: center
  - type: horizontal-stack
    cards:
      - type: custom:button-card
        entity: sensor.opendpe_forecast_j2
        name: |
          [[[
            const days = ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'];
            const date = new Date(entity.attributes.date);
            return days[date.getDay()];
          ]]]
        show_state: false
        show_icon: false
        styles:
          card:
            - background-color: transparent
            - border: none
            - box-shadow: none
            - padding: 8px
            - margin-top: 10px
            - min-height: 90px
          grid:
            - grid-template-areas: "\"n\" \"color\" \"prob\""
            - grid-template-rows: auto 40px auto
            - gap: 4px
          name:
            - font-size: 14px
            - color: var(--primary-text-color)
            - padding-bottom: 4px
            - margin: 0
          custom_fields:
            color:
              - width: 40px
              - height: 40px
              - margin: 4px auto
            prob:
              - font-size: 12px
              - padding-top: 4px
              - margin: 0
              - color: var(--secondary-text-color)
        custom_fields:
          color: |
            [[[
              const color = (entity.state || '').toLowerCase();
              let bgColor = '#CCCCCC';
              if (color === 'bleu') bgColor = '#1958C4';
              if (color === 'blanc') bgColor = '#F7F7F7';
              if (color === 'rouge') bgColor = '#E5543A';
              return `<div style="width: 100%; height: 100%; background-color: ${bgColor}; border-radius: 6px; border: 1px solid #777777; box-sizing: border-box;"></div>`;
            ]]]
          prob: |
            [[[ 
              const p = entity.attributes.probability;
              if (p === null || p === undefined || p === "") {
                return "?";
              }
              return Math.round(p * 100) + "%";
            ]]]
        tap_action:
          action: none
      - type: custom:button-card
        entity: sensor.opendpe_forecast_j3
        name: |
          [[[
            const days = ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'];
            const date = new Date(entity.attributes.date);
            return days[date.getDay()];
          ]]]
        show_state: false
        show_icon: false
        styles:
          card:
            - background-color: transparent
            - border: none
            - box-shadow: none
            - padding: 8px
            - margin-top: 10px
            - min-height: 90px
          grid:
            - grid-template-areas: "\"n\" \"color\" \"prob\""
            - grid-template-rows: auto 40px auto
            - gap: 4px
          name:
            - font-size: 14px
            - color: var(--primary-text-color)
            - padding-bottom: 4px
            - margin: 0
          custom_fields:
            color:
              - width: 40px
              - height: 40px
              - margin: 4px auto
            prob:
              - font-size: 12px
              - padding-top: 4px
              - margin: 0
              - color: var(--secondary-text-color)
        custom_fields:
          color: |
            [[[
              const color = entity.state;
              let bgColor = '#CCCCCC';
              if (color === 'bleu') bgColor = '#1958C4';
              if (color === 'blanc') bgColor = '#F7F7F7';
              if (color === 'rouge') bgColor = '#E5543A';
              return `<div style="width: 100%; height: 100%; background-color: ${bgColor}; border-radius: 6px; border: 1px solid #777777; box-sizing: border-box;"></div>`;
            ]]]
          prob: |
            [[[ 
              const p = entity.attributes.probability;
              if (p === null || p === undefined || p === "") {
                return "?";
              }
              return Math.round(p * 100) + "%";
            ]]]
        tap_action:
          action: none
      - type: custom:button-card
        entity: sensor.opendpe_forecast_j4
        name: |
          [[[
            const days = ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'];
            const date = new Date(entity.attributes.date);
            return days[date.getDay()];
          ]]]
        show_state: false
        show_icon: false
        styles:
          card:
            - background-color: transparent
            - border: none
            - box-shadow: none
            - padding: 8px
            - margin-top: 10px
            - min-height: 90px
          grid:
            - grid-template-areas: "\"n\" \"color\" \"prob\""
            - grid-template-rows: auto 40px auto
            - gap: 4px
          name:
            - font-size: 14px
            - color: var(--primary-text-color)
            - padding-bottom: 4px
            - margin: 0
          custom_fields:
            color:
              - width: 40px
              - height: 40px
              - margin: 4px auto
            prob:
              - font-size: 12px
              - padding-top: 4px
              - margin: 0
              - color: var(--secondary-text-color)
        custom_fields:
          color: |
            [[[
              const color = entity.state;
              let bgColor = '#CCCCCC';
              if (color === 'bleu') bgColor = '#1958C4';
              if (color === 'blanc') bgColor = '#F7F7F7';
              if (color === 'rouge') bgColor = '#E5543A';
              return `<div style="width: 100%; height: 100%; background-color: ${bgColor}; border-radius: 6px; border: 1px solid #777777; box-sizing: border-box;"></div>`;
            ]]]
          prob: |
            [[[ 
              const p = entity.attributes.probability;
              if (p === null || p === undefined || p === "") {
                return "?";
              }
              return Math.round(p * 100) + "%";
            ]]]
        tap_action:
          action: none
      - type: custom:button-card
        entity: sensor.opendpe_forecast_j5
        name: |
          [[[
            const days = ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'];
            const date = new Date(entity.attributes.date);
            return days[date.getDay()];
          ]]]
        show_state: false
        show_icon: false
        styles:
          card:
            - background-color: transparent
            - border: none
            - box-shadow: none
            - padding: 8px
            - margin-top: 10px
            - min-height: 90px
          grid:
            - grid-template-areas: "\"n\" \"color\" \"prob\""
            - grid-template-rows: auto 40px auto
            - gap: 4px
          name:
            - font-size: 14px
            - color: var(--primary-text-color)
            - padding-bottom: 4px
            - margin: 0
          custom_fields:
            color:
              - width: 40px
              - height: 40px
              - margin: 4px auto
            prob:
              - font-size: 12px
              - padding-top: 4px
              - margin: 0
              - color: var(--secondary-text-color)
        custom_fields:
          color: |
            [[[
              const color = entity.state;
              let bgColor = '#CCCCCC';
              if (color === 'bleu') bgColor = '#1958C4';
              if (color === 'blanc') bgColor = '#F7F7F7';
              if (color === 'rouge') bgColor = '#E5543A';
              return `<div style="width: 100%; height: 100%; background-color: ${bgColor}; border-radius: 6px; border: 1px solid #777777; box-sizing: border-box;"></div>`;
            ]]]
          prob: |
            [[[ 
              const p = entity.attributes.probability;
              if (p === null || p === undefined || p === "") {
                return "?";
              }
              return Math.round(p * 100) + "%";
            ]]]
        tap_action:
          action: none
      - type: custom:button-card
        entity: sensor.opendpe_forecast_j6
        name: |
          [[[
            const days = ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'];
            const date = new Date(entity.attributes.date);
            return days[date.getDay()];
          ]]]
        show_state: false
        show_icon: false
        styles:
          card:
            - background-color: transparent
            - border: none
            - box-shadow: none
            - padding: 8px
            - margin-top: 10px
            - min-height: 90px
          grid:
            - grid-template-areas: "\"n\" \"color\" \"prob\""
            - grid-template-rows: auto 40px auto
            - gap: 4px
          name:
            - font-size: 14px
            - color: var(--primary-text-color)
            - padding-bottom: 4px
            - margin: 0
          custom_fields:
            color:
              - width: 40px
              - height: 40px
              - margin: 4px auto
            prob:
              - font-size: 12px
              - padding-top: 4px
              - margin: 0
              - color: var(--secondary-text-color)
        custom_fields:
          color: |
            [[[
              const color = entity.state;
              let bgColor = '#CCCCCC';
              if (color === 'bleu') bgColor = '#1958C4';
              if (color === 'blanc') bgColor = '#F7F7F7';
              if (color === 'rouge') bgColor = '#E5543A';
              return `<div style="width: 100%; height: 100%; background-color: ${bgColor}; border-radius: 6px; border: 1px solid #777777; box-sizing: border-box;"></div>`;
            ]]]
          prob: |
            [[[ 
              const p = entity.attributes.probability;
              if (p === null || p === undefined || p === "") {
                return "?";
              }
              return Math.round(p * 100) + "%";
            ]]]
        tap_action:
          action: none
      - type: custom:button-card
        entity: sensor.opendpe_forecast_j7
        name: |
          [[[
            const days = ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'];
            const date = new Date(entity.attributes.date);
            return days[date.getDay()];
          ]]]
        show_state: false
        show_icon: false
        styles:
          card:
            - background-color: transparent
            - border: none
            - box-shadow: none
            - padding: 8px
            - margin-top: 10px
            - min-height: 90px
          grid:
            - grid-template-areas: "\"n\" \"color\" \"prob\""
            - grid-template-rows: auto 40px auto
            - gap: 4px
          name:
            - font-size: 14px
            - color: var(--primary-text-color)
            - padding-bottom: 4px
            - margin: 0
          custom_fields:
            color:
              - width: 40px
              - height: 40px
              - margin: 4px auto
            prob:
              - font-size: 12px
              - padding-top: 4px
              - margin: 0
              - color: var(--secondary-text-color)
        custom_fields:
          color: |
            [[[
              const color = entity.state;
              let bgColor = '#CCCCCC';
              if (color === 'bleu') bgColor = '#1958C4';
              if (color === 'blanc') bgColor = '#F7F7F7';
              if (color === 'rouge') bgColor = '#E5543A';
              return `<div style="width: 100%; height: 100%; background-color: ${bgColor}; border-radius: 6px; border: 1px solid #777777; box-sizing: border-box;"></div>`;
            ]]]
          prob: |
            [[[ 
              const p = entity.attributes.probability;
              if (p === null || p === undefined || p === "") {
                return "?";
              }
              return Math.round(p * 100) + "%";
            ]]]
        tap_action:
          action: none

1 « J'aime »