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 ${isCheckedhp ? '✔' : ''}
<br>HC ${hcprixLabel} c€/kWh ${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
