Je cherche à customiser l’affichage d’un input.datetime pour que dans le label, je puisse avoir le nombre de jours restant avant de faire une action et la date ou je devrais effectuer cette action. Tous cela au format FR bien entendu.
Voici un exemple visuel:
Il faudrait que l’icone passe au rouge si la date est passée.
Voici mon input.datetime:
pool_filter_date:
name: Dernier nettoyage
has_date: true
has_time: false
Les deux sensors qui calculent le nombre de jours restant et la date:
- platform: template
sensors:
pool_filtre_time:
friendly_name: "Prochain nettoyage"
value_template: >
{% set date_dans_un_an = strptime(states('input_datetime.pool_filter_date'),'%Y-%m-%d') + timedelta(days=15)%}
le {{ '{:02d}'.format(date_dans_un_an.day)}}/{{ '{:02d}'.format(date_dans_un_an.month) }}/{{ '{:04d}'.format(date_dans_un_an.year) }}
- platform: template
sensors:
pool_filtre_time_rest:
friendly_name: "Nettoyage du filtre dans"
unit_of_measurement: "jours"
value_template: >
{% set date = strptime(states('input_datetime.pool_filter_date'),'%Y-%m-%d') %}
{% set date_dans_un_an = strptime(states('input_datetime.pool_filter_date'),'%Y-%m-%d')+ timedelta(days=15) %}
{{(date_dans_un_an - now().replace(tzinfo=None)).days}}
Il faudrait que a l’appui du bouton, cela entre la date d’aujourd’hui pour relancer le « compte a rebours ».
Je sais pas si je suis très clair sur ma demande ^^
Merci d’avance pour votre aide.
Je vais utiliser la custom_card « Elapsed Time » qui correspond a quelque chose pret a ce que je veux faire mais il y a un pb d’affichage que je n’arrive pas a regler:
[[[
let endDate = new Date();
let today = new Date();
if(entity.attributes.has_date) {
today = new Date(entity.state.replace(" ", "T"));
} else {
today = new Date().setHours(entity.attributes.hour,entity.attributes.minute,entity.attributes.second);
}
const days = parseInt((endDate - today) / (1000 * 60 * 60 * 24));
const hours = parseInt(Math.abs(endDate - today) / (1000 * 60 * 60) % 24);
const minutes = parseInt(Math.abs(endDate - today) / (1000 * 60) % 60);
let text = '';
if(entity.attributes.has_date) {
text += days > 0 ? days + ' ' + (days > 1 ? variables.custom_card_eraycetinay_elapsed_time_days : variables.custom_card_eraycetinay_elapsed_time_day) +' ' : '';
}
if(entity.attributes.has_time) {
text += hours > 0 ? hours + ' ' + (hours > 1 ? variables.custom_card_eraycetinay_elapsed_time_hours : variables.custom_card_eraycetinay_elapsed_time_hour) +' ' : '';
}
if(entity.attributes.has_time && !entity.attributes.has_date) {
text += minutes > 0 ? minutes + ' ' + (minutes > 1 ? variables.custom_card_eraycetinay_elapsed_time_minutes : variables.custom_card_eraycetinay_elapsed_time_minute) +' ' : '';
}
text = text.length ? text += variables.custom_card_eraycetinay_elapsed_time_ago : variables.custom_card_eraycetinay_elapsed_time_justnow;
return text;
]]]
En effet, c’est inverser… je trouve pas dans le code ou changer cela…