Il y a bientôt deux ans, peu après mes débuts sous Home Assistant, j'ai mis en place un scénario de confort pour la douche. En gros la salle de bain est toujours en mode ECO et quand je souhaite prendre une douche j'appuie sur un bouton, ça lance le chauffage et un radiateur soufflant et ça l'éteint au bout d'un moment.
Aujourd'hui j'ai voulut l'améliorer afin de le lancer quand je dois me lever à une heure fixe, ce qui heureusement est plutôt rare. J'ai donc fait une automation qui se déclenche à partir d'un input_datetime:
qui va chauffer la salle de bain, lancer la clim en mode chauffage via un script de dérogation de Schedy, éclairer quelques lampes et ouvrir quelques volets. Rien d'extraordinaire à ce stade et il faudrait y ajouter de la musique et allumer la bouilloire pour le thé....
automation:
- id: 'fab3sdfty-bgg6-4ddc-a23f-ee589300012c'
alias: "RC : Réveil + douche"
description: ''
trigger:
platform: time
at: input_datetime.alarm_clock_date_time
condition:
action:
- service: timer.start # On lance le chauffage de la SdB
data:
duration: 00:25:30
target:
entity_id: timer.shower
- service: input_boolean.turn_off # On passe en mode jour (utile pour le chauffage)
target:
entity_id: input_boolean.to_sleep
- service: script.heating_ac_boost
- delay: 00:10:00 # On se prélasse encore un peu au lit...
- service: cover.set_cover_position # On entreouvre le volet de la chambre
data:
position: 22
target:
entity_id:
- cover.vr_lionel
- service: cover.set_cover_position # On ouvre le volet de la cuisine
data:
position: 60
target:
entity_id:
- cover.vr_cuisine
- service: light.turn_on # On allume quelques lampes
data:
color_name: yellowgreen
target:
entity_id: light.groupe_d_ampoules_led
Là ou ça va devenir intéressant c'est que j'ai refondu mes automations de douche en une seule qui va utiliser un timer:
et la fonction choose:
. Je n'avais jamais utilisé de timer et encore moins le chooser, j'ai donc un peu galéré, mais voici le résultat, largement simplifié avec les trigger_id:
, ce qui évite des templates...
automation:
- id : 'c88f056d-8bbc-40ff-a044-a3b1b733e3c8'
alias: "RC : Boost SdB"
description: "Boost SdB by chooser"
trigger:
- platform: numeric_state
entity_id: sensor.rpi_mi_t_sdb
above: input_number.sdb_boost_good
id: "t_good"
- platform: numeric_state
entity_id: sensor.rpi_mi_t_sdb
above: input_number.sdb_boost_max
id: "tmax"
- platform: event
event_type: timer.finished
event_data:
entity_id: timer.shower
id: "timer.finished"
- platform: event
event_type: timer.started
event_data:
entity_id: timer.shower
id: "timer.started"
condition: []
action:
- choose:
- conditions:
- condition: trigger
id: "timer.started" # Mode ON sur la base su timer qui est lancé depuis une télécommande ou une autre automation
sequence:
- service: climate.set_preset_mode
data:
preset_mode: boost
target:
entity_id: climate.thermostat_salle_de_bain
- service: switch.turn_on
entity_id: switch.plug_bw_01
- service: notify.slack_hass_canaletto
data:
message: "{{now().strftime('%d/%m/%Y, %H:%M')}} > BOOST | START | Salle de bain | Température : {{ states('sensor.rpi_mi_t_sdb') }}°"
- service: tts.cloud_say
entity_id: media_player.sonos_cloud_hall
data_template:
message: "Préparation de la salle de bain. Je vous dirait quand vous pourrez vous doucher !"
cache: 'false'
- conditions:
- condition: trigger
id: "t_good" # On annonce que la température de confort+ est atteinte
sequence:
- service: tts.cloud_say
entity_id: media_player.sonos_cloud_hall
data_template:
message: "La température de la salle de bain est de {{states('sensor.rpi_mi_t_sdb')}}°, vous pouvez vous doucher !"
cache: 'false'
- service: notify.slack_hass_canaletto
data:
message: "{{now().strftime('%d/%m/%Y, %H:%M')}} > BOOST | READY | Salle de bain | Température : {{ states('sensor.rpi_mi_t_sdb') }}°"
- conditions:
- condition: or
conditions:
- condition: trigger
id: "timer.finished" # On arrete de chauffage à la fin du timer
- condition: trigger
id: "t_max" # On arrete le chauffage si la température max est atteinte.
sequence:
- service: switch.turn_off
entity_id: switch.plug_bw_01
- service: climate.set_preset_mode
data:
preset_mode: eco
target:
entity_id: climate.thermostat_salle_de_bain
- service: notify.slack_hass_canaletto
data:
message: "{{now().strftime('%d/%m/%Y, %H:%M')}} > BOOST | END | Salle de bain | Température : {{ states('sensor.rpi_mi_t_sdb') }}°"
- service: tts.cloud_say
entity_id: media_player.sonos_cloud_hall
data_template:
message: "Fin du chauffage de la salle de bain. A bientôt !"
cache: 'false'
default:
Le log dans Slack me sert au debug. Le TTS via l'intégration Sonos Cloud permet de baisser la musique et de la réactiver une fois l'annonce terminée.
On notera également que par défaut les conditions du chooser son and
et qu'il est possible de les passer en or
.
Si aucun trigger n'est utilisé on peut également définir une action par défaut. J'ai fait le choix de ne pas l'utiliser et d'activer ou désactiver le chauffage en lançant le timer pour une certaine durée, depuis un bouton (via ControlerX ou un BluePrint) ou l'automation du réveil :
- service: timer.start
data:
duration: 00:25:30
target:
entity_id: timer.shower
ou en forçant sa fin...
- service: timer.finish
target:
entity_id: timer.shower
Et pour paramétrer une ligne sur Lovelace, à noter que j'ai oublié d'intégrer un template pour la durée dans les commandes ci dessus.