Non ce n’est pas ça qui est fait.
Explications :
Situation
Prenons l’exemple suivant : Nous avons 3 interrupteurs et nous voulons que si l’un d’eux est activé, qu’il se désactive au bout de 2 secondes. Cela peut se faire par une automatisation (automation
en anglais).
Automatisation
Déclencheur(s)
En premier lieu, il faut récupérer l’information qu’un des interrupteurs est activé. Cela se passe par la plateforme state
(documentation):
- platform: state #Surveillance de l'état
entity_id: switch.interrupteur_01 #Entité à surveiller
to: 'on' #Déclenché l'automation si l'entité passe à cet état
Ce bout de code permet de définir le déclenchement des actions de l’automatisation si l’entité switch.interrupteur_01
passe à l’état on
.
Action(s)
Une fois que tu as défini tous tes déclencheurs, il faut maintenant indiquer quelles sont les actions que tu souhaites réaliser :
action:
###################################################################################################
## Temporisation suivant l'état de l'entité input_datetime.desactivation_automatique_temps
## Si tu veux, tu peux coder en 'dure' le delai (https://www.home-assistant.io/docs/scripts/#delay)
- delay: "{{ states('input_datetime.desactivation_automatique_temps') }}"
###################################################################################################
#############################################
## Utilisation de la fonction 'choose' (https://www.home-assistant.io/docs/scripts/#choose-a-group-of-actions)
- choose:
- conditions: #Premiere condition vérifiéee
#interrupteur_01
- condition: state
entity_id: switch.interrupteur_01
state: "on"
sequence:
- service: switch.turn_off
entity_id: switch.interrupteur_01
- conditions:#Deuxième condition vérifiée (si vérification de la première échouée)
#interrupteur_02
- condition: state
entity_id: switch.interrupteur_02
state: "on"
sequence:
- service: switch.turn_off
entity_id: switch.interrupteur_02
- conditions:#Troisième condition vérifiée (si vérification de la deuxième échouée)
#interrupteur_03
- condition: state
entity_id: switch.interrupteur_03
state: "on"
sequence:
- service: switch.turn_off
entity_id: switch.interrupteur_03
L’interprétation de la fonction choose
est la suivante :
Comme on ne sait pas quel interrupteur à déclenché l’automatisation, on va vérifier un par un leur état.
La fonction choose
est séquentielle, c’est à dire qu’elle vérifie un par un tous les interrupteurs.
Si elle vérifie la condition, elle exécute la ou les actions définies puis s’interrompt.
dans ton cas, la fonction choose
ne vérifiera pas le deuxième interrupteur si et seulement si le premier est à l’état on
.
Au final
Voici donc le code complet, contenant l’automatisation et l’heure (pour la définition de la temporisation)
input_datetime:
desactivation_automatique_temps:
name: Temporisation avant désactivation des interrupteurs
has_date: false
has_time: true
automation:
- id: 'desactivation_automatique_automatisation' #identifiant unique
alias: desactivation_automatique_automatisation # Nom présent dans l'interface Lovelace
mode: parallel #Permet l'appel multiple à cette automatisation
max: 3 #Le nombre de tes interrupteurs
trigger: #Défintion des déclencheurs
###############################################################
- platform: state #Surveillance de l'état
entity_id: switch.interrupteur_01 #Entité à surveiller
to: 'on' #Déclenché l'automation si l'entité passe à cet état
################################################################
################################################################
- platform: state
entity_id: switch.interrupteur_02
to: 'on'
################################################################
################################################################
- platform: state
entity_id: switch.interrupteur_03
to: 'on'
################################################################
condition: [] #Pas de conditions dans ton cas
action:
###################################################################################################
## Temporisation suivant l'état de l'entité input_datetime.desactivation_automatique_temps
## Si tu veux, tu peux coder en 'dure' le delai (https://www.home-assistant.io/docs/scripts/#delay)
- delay: "{{ states('input_datetime.desactivation_automatique_temps') }}"
###################################################################################################
#############################################
## Utilisation de la fonction 'choose' (https://www.home-assistant.io/docs/scripts/#choose-a-group-of-actions)
- choose:
- conditions: #Premiere condition vérifiéee
#interrupteur_01
- condition: state
entity_id: switch.interrupteur_01
state: "on"
sequence:
- service: switch.turn_off
entity_id: switch.interrupteur_01
- conditions:#Deuxième condition vérifiée (si vérification de la première échouée)
#interrupteur_02
- condition: state
entity_id: switch.interrupteur_02
state: "on"
sequence:
- service: switch.turn_off
entity_id: switch.interrupteur_02
- conditions:#Troisième condition vérifiée (si vérification de la deuxième échouée)
#interrupteur_03
- condition: state
entity_id: switch.interrupteur_03
state: "on"
sequence:
- service: switch.turn_off
entity_id: switch.interrupteur_03
Et voici un aperçu du résultat dans Lovelace (peut être les boutons bascule que tu voulais ?) :
Code de la carte (utilisation de card-mod)
type: vertical-stack
cards:
- type: horizontal-stack
title: Définition de la temporisation
cards:
- type: button
tap_action:
action: call-service
service: input_datetime.set_datetime
service_data:
entity_id: input_datetime.desactivation_automatique_temps
time: '00:00:02'
name: Secondes
icon: 'mdi:numeric-2-box-outline'
icon_height: 100px
hold_action:
action: none
entity: input_datetime.desactivation_automatique_temps
style: |
ha-card{
opacity:
{% if states(config.entity) == "00:00:02" %}
1
{% else %}
0.33
{% endif %}
;
}
- type: button
tap_action:
action: call-service
service: input_datetime.set_datetime
service_data:
entity_id: input_datetime.desactivation_automatique_temps
time: '00:00:05'
name: Secondes
icon: 'mdi:numeric-5-box-outline'
icon_height: 100px
hold_action:
action: none
entity: input_datetime.desactivation_automatique_temps
style: |
ha-card{
opacity:
{% if states(config.entity) == "00:00:05" %}
1
{% else %}
0.33
{% endif %}
;
}
- type: button
tap_action:
action: call-service
service: input_datetime.set_datetime
service_data:
entity_id: input_datetime.desactivation_automatique_temps
time: '00:00:10'
name: Secondes
icon: 'mdi:numeric-10-box-outline'
icon_height: 100px
hold_action:
action: none
entity: input_datetime.desactivation_automatique_temps
style: |
ha-card{
opacity:
{% if states(config.entity) == "00:00:10" %}
1
{% else %}
0.33
{% endif %}
;
}
- type: horizontal-stack
title: Interrupteurs
cards:
- type: button
tap_action:
action: toggle
entity: switch.interrupteur_01
icon: 'mdi:alpha-a-circle-outline'
show_name: false
show_icon: true
icon_height: 100px
- type: button
tap_action:
action: toggle
entity: switch.interrupteur_02
icon: 'mdi:alpha-b-circle-outline'
show_name: false
show_icon: true
icon_height: 100px
- type: button
tap_action:
action: toggle
entity: switch.interrupteur_03
icon: 'mdi:alpha-c-circle-outline'
show_name: false
show_icon: true
icon_height: 100px
Bonus
Et si j’ai 14 interrupteurs ? L’automation va comporter énormément de ligne !
C’est vrai ! Mais ce n’est pas grave, une automation peux comporter autant de ligne que nécessaire. Mais au delà d’un certain nombre (à la convenance du codeur), il est peut être utile d’exécuter des scripts
depuis l’automatisation.
Mais après avoir lu la documentation, on se rend compte que l’on peux tout de même améliorer cette automatisation (et gagner énormément de lignes) avec l’utilisation du modèle
(comprendre , balise remplacée par HA, lors de l’exécution de la commande. Template en anglais)
automation:
- id: 'desactivation_automatique_automatisation_avec_trigger'
alias: desactivation_automatique_automatisation_avec_trigger
mode: parallel #Permet l'appel multiple à cette automatisation
max: 3 #Le nombre de tes interrupteurs
trigger:
- platform: state
entity_id: switch.interrupteur_01
to: 'on'
- platform: state
entity_id: switch.interrupteur_02
to: 'on'
- platform: state
entity_id: switch.interrupteur_03
to: 'on'
condition: []
action:
- delay: "{{ states('input_datetime.desactivation_automatique_temps') }}"
- service: switch.turn_off
data:
entity_id: "{{ trigger.entity_id }}"
#trigger contient l'objet qui a déclenché l'automatisation
# On souhaite ici, remettre à zéro l'entité est passée à 'on'
Dans cette automatisation, tu définis tous tes déclencheurs, et une seule action.
Voilà, si tu as des questions, n’hésite pas.
n’hésitez pas à mettre un si vous avez appris quelque chose
Ce petit bout de code est à mettre soit dans le fichier
automations.yaml
, soit en accord avec votre méthode de configuration partagée