Bouton poussoir

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

:information_source: 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 ?) :
switch_désactivation_automatique

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. :+1:

n’hésitez pas à mettre un :heart: si vous avez appris quelque chose

:warning: Ce petit bout de code est à mettre soit dans le fichier automations.yaml, soit en accord avec votre méthode de configuration partagée

11 « J'aime »