je n’arrive à formater mon sensor.ecsheuredeb_template pour avoir 00:15 comme le sensor.time.state
donc pour une comparaison dans un déclencheur ça marche pas les heures < 12:00 …
merci de votre aide
cordialement
C’est toi ta mécanique et ton idée au final ?
Un sensor qui contient un timestamp c’est pas forcément le plus facile et la meilleure solution pour un déclencheur
Bonjour et merci pour ta réponse,
En fait je souhaite déclencher mon chauffe eau en fonction du temps de chauffe (calcul avec l’écart de température actuelle et la consigne) par rapport à une heure de fin déterminée par un input_time (l’heure de mise à dispo). Le but est de calculer l’heure de départ.
Tout fonctionne le calcul du temps, le calcul de l’heur de départ mon sensor.ecsheuredeb_template. et je voudrais déclencher par un automatisme :
mais voilà j’arrive pas à avoir le bon format pour mon sensor à savoir HH:MM comme celui du sensor.time.state.
Je ne sais pas si je suis assez clair ? En fait je reprends l’idée du plugin Chauufe eau de Jeedom, eh oui je viens de jeedom et je galére un peu à migrer mais je suis séduit par HA même s’il faut mettre les mains dans le cambouis …
Ceci dit je fais les calculs avec des sensor template mais je ne suis peut
être pas dans le bon chemin … du moins le plus efficient. J’ai un peu honte mais voilà ma stratégie, mon fichier sensor_template.yaml :
sensors:
conso_daikin:
friendly_name: "conso_daikin_kwh"
unique_id: uniqueid_conso_daikin
unit_of_measurement: "kWh"
value_template: "{{ ((states('sensor.conso_daikin_wh') | float / 1000) | round(3)) }}"
date_template:
friendly_name: "Date du jour"
entity_id: sensor.date
value_template: '{{ as_timestamp(now()) | timestamp_custom("%d.%m.%y", True) }}'
#calcul du temps de chauffe ECS
# Formule : 4186 * volume en litres * élévation de température en degrés / puissance en Watts = temps en secondes
ecscalculch_template:
friendly_name: "ECS Calcul Chauffe"
entity_id: sensor.ecs_calculchauffe
value_template: "{{ (((150*(4180*((states('input_number.ecs_valeur') | float)-(states('sensor.temperature_ecs') |float))))/1200))| round(2) }}"
ecstempsch_template:
friendly_name: "ECS Temps Chauffe"
entity_id: sensor.ecs_tempschauffe
value_template: "{% set Secondes = states('sensor.ecscalculch_template') | int(0)%}
{% set FormatTime = timedelta(seconds=Secondes) %} {{ FormatTime }}"
#calcul de l'heure de début
ecsheuredeb_template:
friendly_name: "ECS Heure Debut"
entity_id: sensor.ecs_heuredebut
value_template: "{{((strptime(states('input_datetime.ecs_stop'),'%H:%M:%S' ))-(strptime(states('sensor.ecstempsch_template'),'%H:%M:%S' )))}}"
binary_sensor:
- name: "PAC Power On"
delay_on:
minutes: 1
delay_off:
minutes: 1
state: >
{{ states('sensor.daikin_w')|float > 60 }}
au passage pourquoi studio code server me dit ? :
sensors: Property sensors is not allowed
En regardant vite fait, je vois un calcul de durée en secondes mais il n’y a pas input_datetime.ecs_stop
J’ai compris que tu savais faire une simple évaluation de ton temps de chauffe
Perso je ferai tous les calculs à base timestamps (plutôt qu’un format date/heure) , quitte à convertir tout à la fin ou dans les cartes juste pour l’affichage
je comprends pas le split ?
en fait je pars d’un calcul arithmétique dont le résultat est un nombre de secondes, je souhaite le retrancher à une heure de fin qui est input_datetime.ecs_stop donc bien une heure sous la forme HH:MM:SS … comment obtenir simplement le résultat de cette soustraction sous le même format HH:MM:SS et de cette façon le comparer à sensor.time ??? il me semble être parti sur quelquechose de trop alambiqué … et je tourne en rond
En fait c’est quand même bien plus simple que tout ça :
Pour faire des calculs, il faut choisir ce qui est le plus simple soustraires de secondes ou faire des calculs sur des formats horraires… De toutes façon il y a un mix des 2 en entrée)
tous les calculs intermédiaires ne sont pas indispensables (date du jour par exemple, ecsheuredeb_template sans doute aussi)
sans les valeurs initiales input_datetime.ecs_stop, c’est moins facile de donner un exemple.
Bref, en tout état de cause
Partons du principe que :
sensor.ecscalculch_template = 12378 secondes
input_datetime.ecs_stop = 7:00:00 (on va supposer que quitte à se simplifer la vie, l’input-date est défini sur un format HH:MM et se passe de date, cf la doc)
On se fiche de calculer l’heure du début à la seconde prêt, de toute façon les triggers (et les templates) sont évalués à la minute
Donc
{% set ecscalculch_template = 12378 %}
{{ ecscalculch_template }}
{{ states('input_datetime.ecs_stop') }}
# input_datetime permet tout un tas de conversion, dispo dans ses attributs
{% set ecs_start = state_attr('input_datetime.ecs_stop','timestamp') - ecscalculch_template %}
{{ ecs_start }}
{% set ecs_start = strptime(states('input_datetime.ecs_stop'), '%H:%M:%S') - timedelta(minutes=(ecscalculch_template/60)|int(0)) %}
{% set ecs_start_hm = ecs_start.strftime("%H:%M") %}
{{ ecs_start_hm }}
Donc pour avoir une fin de chauffage à 7H00 avec 12378 secondes de temps nécessaire, il faut partir à 3:34
Et tout ça ça tiendrait dans 2, voire 1 template
Du coup dans ton code pour ecscalculch_template tu as une variable anciensensordate qui vaut la même chose que sensor.date
La principale différence, c’est que sensor.date embarque la gestion des historique dans la base de données. C’est consommer de la place pour un truc qui ne sert qu’une fois de temps en temps