Bonjour,
L’objectif de ce 3e post est de permettre la programmation d’un préchauffage le plus simple possible.
On utilise à nouveau des conditions de visibilité des boutons pour avoir ces 4 affichages possibles :
Initial

Prêt à être programmer ou démarrer immédiatement

Une fois programmée

En route (C’est alors exactement comme le mode forçage du 1e post)

Le code est alors simple pour la partie automatisation.
- On stocke les heures
input_datetime
input_datetime:
heure_retour:
name: "Heure de retour"
has_time: true
has_date: false
heure_prechauffage:
name: "Heure de préchauffage"
has_time: true
has_date: false
- On prévoit les différents états et le timer
input_boolean
input_boolean:
configurer_prechauffage:
name: "Préchauffage : Configurer"
initial: off
prechauffage_programmee:
name: "Prechauffage : Programmée"
initial: off
force_prechauffage:
name: "Force la présence dans la maison pour préchauffer"
initial: off
timer:
timer_prechauffage:
name: "Timer préchauffage"
duration: '00:30:00'
- Les automatismes sont similaires au forçage de la présence.
On remarquera l’usage de Jinja2 entre doubles accolades pour prévoir l’heure de préchauffade 30 minutes avant l’heure de retour. Je dis Jinja2, mais c’est en fait du python en accolages pour rendre le code dynamique (C’est ma définition du Jinja2)
automation
automation:
- alias: "Définir heure préchauffage"
triggers:
- platform: state
entity_id: input_datetime.heure_retour
actions:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.heure_prechauffage
data:
time: "{{ (strptime(states('input_datetime.heure_retour'),'%H:%M:%S' ) - timedelta(minutes=30)).strftime('%H:%M:%S') }}"
- alias: "Préchauffage : Activer"
triggers:
platform: time
at: input_datetime.heure_prechauffage
condition:
- condition: state
entity_id: input_boolean.prechauffage_programmee
state: 'on'
actions:
- action: timer.start
target:
entity_id: timer.timer_prechauffage
- action: input_boolean.turn_on
target:
entity_id: input_boolean.force_prechauffage
- action: input_boolean.turn_off
target:
entity_id: input_boolean.prechauffage_programmee
- alias: "Préchauffage : Arrêt"
triggers:
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.timer_prechauffage
actions:
- action: input_boolean.turn_off
target:
entity_id:
- input_boolean.force_prechauffage
- input_boolean.configurer_prechauffage
- input_boolean.prechauffage_programmee
La partie réglage de l’heure de retour est plus spécifique.
L’objectif est de permettre le réglage le plus facile possible, avec des boutons incrémentant de 15 minutes (le réglages précis de l’heure restant possible en cliquant de dessus)
On utilise un script qui sera lancé par action sur le tableau de bord

script:
incrementer_heure_retour:
sequence:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.heure_retour
data:
time: "{{ (strptime(states('input_datetime.heure_retour'),'%H:%M:%S' ) + timedelta(minutes=15)).strftime('%H:%M:%S') }}"
decrementer_heure_retour:
sequence:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.heure_retour
data:
time: "{{ (strptime(states('input_datetime.heure_retour'),'%H:%M:%S' ) - timedelta(minutes=15)).strftime('%H:%M:%S') }}"
Ce script peut être adapté à d’autres réglages de l’heure par exemple pour un réveil.
Il doit exister d’autres méthodes plus élégantes.
Pour finir, il faut un bon placement des entités dans le tableau de bord en mode section, des interactions et des règles de visibilité adaptées permettent un jolie bouton paramétrage pas trop gros.
Je mets la configuration en yaml
- type: grid
cards:
- type: tile
entity: input_boolean.configurer_prechauffage
hide_state: true
icon: mdi:thermometer-chevron-up
layout_options:
grid_columns: 4
grid_rows: 2
color: indigo
show_entity_picture: false
tap_action:
action: toggle
icon_tap_action:
action: toggle
visibility:
- condition: state
entity: input_boolean.configurer_prechauffage
state: 'off'
- type: tile
entity: input_datetime.heure_retour
visibility:
- condition: state
entity: input_boolean.configurer_prechauffage
state: 'on'
- condition: state
entity: timer.timer_prechauffage
state: idle
- condition: state
entity: input_boolean.prechauffage_programmee
state: 'off'
- type: tile
entity: script.lancer_immediatement_prechauffage
icon: mdi:thermometer-check
hide_state: true
name: Préchauffage direct
tap_action:
action: toggle
icon_tap_action:
action: toggle
visibility:
- condition: state
entity: input_boolean.configurer_prechauffage
state: 'on'
- condition: state
entity: timer.timer_prechauffage
state: idle
- condition: state
entity: input_boolean.prechauffage_programmee
state: 'off'
- show_name: false
show_icon: true
type: button
tap_action:
action: toggle
entity: script.decrementer_heure_retour
icon: mdi:clock-minus
hold_action:
action: toggle
visibility:
- condition: state
entity: input_boolean.configurer_prechauffage
state: 'on'
- condition: state
entity: timer.timer_prechauffage
state: idle
- condition: state
entity: input_boolean.prechauffage_programmee
state: 'off'
- show_name: false
show_icon: true
type: button
tap_action:
action: toggle
entity: script.incrementer_heure_retour
icon: mdi:clock-plus
visibility:
- condition: state
entity: input_boolean.configurer_prechauffage
state: 'on'
- condition: state
entity: timer.timer_prechauffage
state: idle
- condition: state
entity: input_boolean.prechauffage_programmee
state: 'off'
- type: tile
entity: input_boolean.prechauffage_programmee
tap_action:
action: toggle
icon_tap_action:
action: toggle
icon: mdi:thermometer-lines
name: 'Programme préchauffage '
hide_state: true
visibility:
- condition: state
entity: input_boolean.configurer_prechauffage
state: 'on'
- condition: state
entity: timer.timer_prechauffage
state: idle
- condition: state
entity: input_boolean.prechauffage_programmee
state: 'off'
- type: tile
entity: input_datetime.heure_prechauffage
layout_options:
grid_columns: 4
grid_rows: 2
tap_action:
action: perform-action
perform_action: automation.trigger
target:
entity_id: automation.prechauffage_arret
data:
skip_condition: true
visibility:
- condition: state
entity: input_boolean.prechauffage_programmee
state: 'on'
- condition: state
entity: timer.timer_prechauffage
state: idle
- type: tile
entity: timer.timer_prechauffage
tap_action:
action: perform-action
perform_action: timer.finish
target:
entity_id: timer.timer_prechauffage
data: {}
layout_options:
grid_columns: 4
grid_rows: 2
icon_tap_action:
action: perform-action
perform_action: timer.finish
target:
entity_id: timer.timer_prechauffage
visibility:
- condition: state
entity: timer.timer_prechauffage
state: active
