# Création d'un bouton sous Lovelace (switch)

**URL:** <https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981>\
**Category:** Entraide Home Assistant\
**Tags:** switch, interface-lovelace\
**Created:** [Janvier 4, 2025, 10:27 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981 "2025-01-04T10:27:15Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Sylvain\_G](https://forum.hacf.fr/user_avatar/forum.hacf.fr/sylvain_g/32/1528_2.png) [@Sylvain\_G](https://forum.hacf.fr/u/Sylvain_G)\
**Post date:** [Janvier 4, 2025, 10:27 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981/1 "2025-01-04T10:27:15Z")

</div>

Bonjour,  
Bonne et heureuse année à vous tous que Home Assistant vous apporte de nouvelles aides dans votre vie de 2025 😉

## Mon problème

J'ai utilisé une ancienne télécommande Nice 2 boutons reliée à un ESP32 que je pilote via un script ESPHome. Ça fonctionne à merveille, et j'ai donc 2 switch possible :

- switch.portail\_pieton
- switch.portail\_voiture

Maintenant, je souhaiterais intégrer ces 2 switchs dans un dashboard lovelace de ce type :

 ![image](https://forum.hacf.fr/uploads/default/original/3X/0/4/042eaa2f8c42da32e57bdd28f8615df56d945be9.png)

avec ce fonctionnement :

1. Je clique sur le bouton `Ouverture piéton`
2. l'information secondaire passe de `Fermé` à `En mouvement` et le switch ESPHome `switch.portail_pieton` est activé (_dans ESPHome, il bascule de off à on durant 3s pour éviter de rester trop longtemps "appuyé" sur le bouton de la télécommande_)
3. L'appui sur le bouton de la télécommande va ouvrir le portail. cette ouverture dure un certain temps `<temps_ouverture_portail>`
4. Un tempo de `<temps_ouverture_portail>` bloque l'appui sur ces 2 boutons `Ouverture piéton` et `Ouverture voiture`
5. Après ce `<temps_ouverture_portail>`, l'information secondaire passe de `En mouvement` à `Ouvert`

Et inversement pour la fermeture :

1. Je clique sur le bouton `Ouverture piéton`
2. l'information secondaire passe de `Ouvert` à `En mouvement`
3. Un tempo de `<temps_ouverture_portail>` bloque l'appui sur ces 2 boutons `Ouverture piéton` et `Ouverture voiture`
4. Après ce `<temps_ouverture_portail>`, l'information secondaire passe de `En mouvement` à `Fermé`

Comment faire pour associer le clic du bouton `Ouverture piéton` à un script qui :

- inactiverait les 2 boutons durant `<temps_ouverture_portail>`
- déclencherait le `switch.portail_pieton`
- changerait les options de l'input select `portail_pieton_state`

## L'état actuel de ce que j'ai pu faire

### ESPHome

> **Voici le code de l'ESP qui pilote la télécommande :**
>
> ```yaml
> # Module Definition
> 
> switch:
> - platform: gpio
> pin: 26
> id: relay_pieton
> inverted: True
> interlock: [relay_voiture]
> name: "Portail piéton"
> icon: "mdi:gate"
> on_turn_on:
> - delay: 3000ms
> - switch.turn_off: relay_pieton
> - platform: gpio
> pin: 25
> id: relay_voiture
> inverted: True
> interlock: [relay_pieton]
> name: "Portail voiture"
> icon: "mdi:gate"
> on_turn_on:
> - delay: 3000ms
> - switch.turn_off: relay_voiture
> 
> ```

Ces 2 switchs me permette de piloter le portail via la page ESPHome :

 ![image](https://forum.hacf.fr/uploads/default/original/3X/f/9/f98cc3ffb5836c8a735d9be9d50d52d1fb8a4487.png)

### Lovelace

J'ai créé deux input select pour les états des ouvertures piéton et voiture (_voici celui de l'ouverture piéton_) :

 ![image](https://forum.hacf.fr/uploads/default/original/3X/1/2/1225e7b9410c7eddeb4d816f1ffeaca45eccde88.png)

J'ai créé 2 scripts qui permettent de passer d'un état à un autre et d'actionner le "bouton de la télécommande" via `switch.portail_xxxxxx` :

> **Gestion portail piéton**
>
> ```yaml
> alias: Gestion portail piéton
> sequence:
> - choose:
> - conditions:
> - condition: state
> entity_id: input_select.portail_pieton_state
> state: closed
> sequence:
> - action: input_select.select_option
> metadata: {}
> data:
> option: moving
> target:
> entity_id: input_select.portail_pieton_state
> - action: switch.toggle
> metadata: {}
> data: {}
> target:
> entity_id: switch.portail_pieton
> - delay:
> hours: 0
> minutes: 0
> seconds: 25
> milliseconds: 0
> - action: input_select.select_option
> metadata: {}
> data:
> option: opened
> target:
> entity_id: input_select.portail_pieton_state
> - conditions:
> - condition: state
> entity_id: input_select.portail_pieton_state
> state: opened
> sequence:
> - action: input_select.select_option
> metadata: {}
> data:
> option: moving
> target:
> entity_id: input_select.portail_pieton_state
> - action: switch.toggle
> metadata: {}
> data: {}
> target:
> entity_id: switch.portail_pieton
> - delay:
> hours: 0
> minutes: 0
> seconds: 30
> milliseconds: 0
> - action: input_select.select_option
> metadata: {}
> data:
> option: closed
> target:
> entity_id: input_select.portail_pieton_state
> description: ""
> 
> ```

> **Gestion portail voiture**
>
> ```yaml
> alias: Gestion portail voiture
> sequence:
> - choose:
> - conditions:
> - condition: state
> entity_id: input_select.portail_voiture_state
> state: closed
> sequence:
> - action: input_select.select_option
> metadata: {}
> data:
> option: moving
> target:
> entity_id: input_select.portail_voiture_state
> - action: switch.toggle
> metadata: {}
> data: {}
> target:
> entity_id: switch.portail_voiture
> - delay:
> hours: 0
> minutes: 0
> seconds: 36
> milliseconds: 0
> - action: input_select.select_option
> metadata: {}
> data:
> option: opened
> target:
> entity_id: input_select.portail_voiture_state
> - conditions:
> - condition: state
> entity_id: input_select.portail_voiture_state
> state: opened
> sequence:
> - action: input_select.select_option
> metadata: {}
> data:
> option: moving
> target:
> entity_id: input_select.portail_voiture_state
> - action: switch.toggle
> metadata: {}
> data: {}
> target:
> entity_id: switch.portail_voiture
> - delay:
> hours: 0
> minutes: 0
> seconds: 36
> milliseconds: 0
> - action: input_select.select_option
> metadata: {}
> data:
> option: closed
> target:
> entity_id: input_select.portail_voiture_state
> description: ""
> 
> ```

Et mon code de la carte qui contient les boutons :

> **code carte lovelace**
>
> ```yaml
> type: conditional
> conditions: []
> card:
> type: horizontal-stack
> cards:
> - type: custom:mushroom-template-card
> primary: Ouverture Piéton
> secondary: |-
> {% if is_state('input_select.portail_pieton_state', 'closed') %}
> Fermé
> {% elif is_state('input_select.portail_pieton_state', 'moving') %}
> En mouvement
> {% elif is_state('input_select.portail_pieton_state', 'opened') %}
> Ouvert
> {% endif %}
> icon: |-
> {% if is_state('input_select.portail_pieton_state', 'closed') %}
> mdi:power-on
> {% elif is_state('input_select.portail_pieton_state', 'moving') %}
> mdi:power-cycle
> {% elif is_state('input_select.portail_pieton_state', 'opened') %}
> mdi:power-off
> {% endif %}
> icon_color: |-
> {% if is_state('input_select.portail_pieton_state', 'closed') %}
> green
> {% elif is_state('input_select.portail_pieton_state', 'moving') %}
> grey
> {% elif is_state('input_select.portail_pieton_state', 'opened') %}
> red
> {% endif %}
> tap_action:
> action: perform-action
> perform_action: script.gestion_portail_pieton
> target: {}
> - type: custom:mushroom-template-card
> primary: Ouverture voiture
> secondary: |-
> {% if is_state('input_select.portail_voiture_state', 'closed') %}
> Fermé
> {% elif is_state('input_select.portail_voiture_state', 'moving') %}
> En mouvement
> {% elif is_state('input_select.portail_voiture_state', 'opened') %}
> Ouvert
> {% endif %}
> icon: |-
> {% if is_state('input_select.portail_voiture_state', 'closed') %}
> mdi:power-on
> {% elif is_state('input_select.portail_voiture_state', 'moving') %}
> mdi:power-cycle
> {% elif is_state('input_select.portail_voiture_state', 'opened') %}
> mdi:power-off
> {% endif %}
> tap_action:
> action: perform-action
> perform_action: script.gestion_portail_voiture
> target: {}
> icon_color: |-
> {% if is_state('input_select.portail_voiture_state', 'closed') %}
> green
> {% elif is_state('input_select.portail_voiture_state', 'moving') %}
> grey
> {% elif is_state('input_select.portail_voiture_state', 'opened') %}
> red
> {% endif %}
> 
> ```

En cliquant sur le bouton `Ouverture Piéton`, je vois bien le bouton `Ouverture Piéton` évoluer comme prévu et le portail s'ouvre bien.

Par contre je n'arrive pas à "bloquer" un nouvel appui sur le même ou l'autre bouton pendant le délai d'ouverture du portail.  
Des idées 🤔 ?

---

<div class="post-metadata">

**Author:** ![armavi](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/a/e5b9ba/32.png) [@armavi](https://forum.hacf.fr/u/armavi)\
**Post date:** [Janvier 4, 2025, 12:53 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981/2 "2025-01-04T12:53:11Z")

</div>

Bonjour,

> [@Sylvain\_G](#):
>
> - switch.portail\_pieton
> - switch.portail\_voiture

sont deux entités qui ont pour effet de réélement faire ouvrir chacun des portails.

Tu as eu la bonne idée de rajouter 2 input pour te souvenir de l’état (ouvert/fermé/mouvement)

Il faut créer **2 [edit] input\_boolean (entrée\>interrupteur)** qui activeront des automatimes (et pas des scripts) je les nomme inter.

Exemple pour le portailvoiture  
déclencheur : interportailvoiture change d’état  
condition : si etatportailpieton n’est pas mouvement  
action :  
etat portailvoiture = mouvement  
si interportailvoiture=«&nbsp;on&nbsp;» alors switch.portail\_voiture = ouvrir  
si interportailvoiture=«&nbsp;off&nbsp;» alors switch.portail\_voiture = fermer  
attendre 30s  
si interportailvoiture=«&nbsp;on&nbsp;» alors etatportailvoiture = ouvert  
si interportailvoiture=«&nbsp;off&nbsp;» alors etatportailvoiture = fermé

---

<div class="post-metadata">

**Author:** ![Sylvain\_G](https://forum.hacf.fr/user_avatar/forum.hacf.fr/sylvain_g/32/1528_2.png) [@Sylvain\_G](https://forum.hacf.fr/u/Sylvain_G)\
**Post date:** [Janvier 4, 2025, 5:34 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981/3 "2025-01-04T17:34:14Z")

</div>

Merci pour l’info mais impossible de créer un switch via l’UI, je cherche dans `Paramètres` \> `Appareils et services` \> `Entrées` mais je trouve pas de `switch` 😭

Et j’essaie de basculer ma configuration sur Lovelace au maximum donc c’est pas pour rebidouiller dans mon fichier `configuration.yaml`

---

<div class="post-metadata">

**Author:** ![Tochy](https://forum.hacf.fr/user_avatar/forum.hacf.fr/tochy/32/41667_2.png) [@Tochy](https://forum.hacf.fr/u/Tochy)\
**Post date:** [Janvier 4, 2025, 5:38 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981/4 "2025-01-04T17:38:09Z")

</div>

Salut  
Fait la traduction de switch en français tu vas trouver 😉

---

<div class="post-metadata">

**Author:** ![Sylvain\_G](https://forum.hacf.fr/user_avatar/forum.hacf.fr/sylvain_g/32/1528_2.png) [@Sylvain\_G](https://forum.hacf.fr/u/Sylvain_G)\
**Post date:** [Janvier 4, 2025, 5:45 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981/5 "2025-01-04T17:45:20Z")

</div>

La traduction de `switch` est `commutateur` mais je ne le trouve pas dans la liste des entrées que l'on peut créée :

 ![image](https://forum.hacf.fr/uploads/default/original/3X/2/3/230011a3d837c448fc975e97980345034fb46387.png)  
 ![image](https://forum.hacf.fr/uploads/default/original/3X/3/f/3ff83a4b6b21f6116e1a634485802feb4569c1af.png)

J'ai essayé avec `Template` puis `Modéliser un commutateur`, c'est qui se rapproche le plus de la traduction `switch` mais comment le renseigner avec ce que me propose @armavi :

 ![image](https://forum.hacf.fr/uploads/default/original/3X/9/a/9a479a891c0e3ad02a429929ef067a26e5f96065.png)

---

<div class="post-metadata">

**Author:** ![Tochy](https://forum.hacf.fr/user_avatar/forum.hacf.fr/tochy/32/41667_2.png) [@Tochy](https://forum.hacf.fr/u/Tochy)\
**Post date:** [Janvier 4, 2025, 5:46 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981/6 "2025-01-04T17:46:27Z")

</div>

switch → commutateur/interrupteur

---

<div class="post-metadata">

**Author:** ![armavi](https://forum.hacf.fr/letter_avatar_proxy/v4/letter/a/e5b9ba/32.png) [@armavi](https://forum.hacf.fr/u/armavi)\
**Post date:** [Janvier 4, 2025, 7:13 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981/7 "2025-01-04T19:13:48Z")

</div>

J’ai édité ma réponse initiale pour préciser.  
On aurait pu mettre un sélecteur input\_select  
Voire 2 boutons en changeant les automatismes

Tu as compris le tout est de désolidariser l’action (réalisé par l’ESP) et la commande.

Il est probable, qu’on pourrait faire plus propre avec un template cover.

---

<div class="post-metadata">

**Author:** ![Sylvain\_G](https://forum.hacf.fr/user_avatar/forum.hacf.fr/sylvain_g/32/1528_2.png) [@Sylvain\_G](https://forum.hacf.fr/u/Sylvain_G)\
**Post date:** [Janvier 5, 2025, 10:13 UTC](https://forum.hacf.fr/t/creation-dun-bouton-sous-lovelace-switch/54981/8 "2025-01-05T10:13:12Z")

</div>

Merci pour ta réponse @armavi , je n’ai pas utilisé de `input_boolean` car je ne maitrisais pas assez la façon de les utiliser mais ton algo m’a fait réfléchir et j’ai trouver une solution pour bloquer l’utilisation des boutons le temps du mouvement.

Dans mes 2 scripts, j’ai utilisé une condition `ET` sur les 2 `input_select` pour qu’ils ne soient pas en position `moving`.

Et voici ce que cela donne :

> **Gestion portail piéton**
>
> ```yaml
> alias: Gestion portail piéton
> sequence:
> - choose:
> - conditions:
> // Vérifie qu'aucune demande d'ouverture n'est en cours (état moving)
> - condition: and
> conditions:
> - condition: not
> conditions:
> - condition: state
> entity_id: input_select.portail_pieton_state
> state: moving
> - condition: not
> conditions:
> - condition: state
> entity_id: input_select.portail_voiture_state
> state: moving
> sequence:
> - choose:
> // Séquence pour ouvrir le portail piéton (état précédent closed)
> - conditions:
> - condition: state
> entity_id: input_select.portail_pieton_state
> state: closed
> sequence:
> // Défini l'état à moving
> - action: input_select.select_option
> metadata: {}
> data:
> option: moving
> target:
> entity_id: input_select.portail_pieton_state
> // Appuie sur le bouton de la télécommande d'ouverture piéton
> - action: switch.toggle
> metadata: {}
> data: {}
> target:
> entity_id: switch.portail_pieton
> // Attend le délai d'ouverture du portail piéton
> - delay:
> hours: 0
> minutes: 0
> seconds: 25
> milliseconds: 0
> // Défini l'état à opened
> - action: input_select.select_option
> metadata: {}
> data:
> option: opened
> target:
> entity_id: input_select.portail_pieton_state
> // Séquence pour fermer le portail piéton (état précédent opened)
> - conditions:
> - condition: state
> entity_id: input_select.portail_pieton_state
> state: opened
> sequence:
> // Défini l'état à moving
> - action: input_select.select_option
> metadata: {}
> data:
> option: moving
> target:
> entity_id: input_select.portail_pieton_state
> // Appuie sur le bouton de la télécommande d'ouverture piéton
> - action: switch.toggle
> metadata: {}
> data: {}
> target:
> entity_id: switch.portail_pieton
> // Attend le délai de fermeture du portail piéton
> - delay:
> hours: 0
> minutes: 0
> seconds: 30
> milliseconds: 0
> // Défini l'état à closed
> - action: input_select.select_option
> metadata: {}
> data:
> option: closed
> target:
> entity_id: input_select.portail_pieton_state
> description: ""
> 
> ```

> **Gestion portail voiture**
>
> ```yaml
> alias: Gestion portail voiture
> sequence:
> - choose:
> - conditions:
> // Vérifie qu'aucune demande d'ouverture n'est en cours (état moving)
> - condition: and
> conditions:
> - condition: not
> conditions:
> - condition: state
> entity_id: input_select.portail_pieton_state
> state: moving
> - condition: not
> conditions:
> - condition: state
> entity_id: input_select.portail_voiture_state
> state: moving
> sequence:
> - choose:
> // Séquence pour ouvrir le portail voiture (état précédent closed)
> - conditions:
> - condition: state
> entity_id: input_select.portail_voiture_state
> state: closed
> sequence:
> // Défini l'état à moving
> - action: input_select.select_option
> metadata: {}
> data:
> option: moving
> target:
> entity_id: input_select.portail_voiture_state
> // Appuie sur le bouton de la télécommande d'ouverture voiture
> - action: switch.toggle
> metadata: {}
> data: {}
> target:
> entity_id: switch.portail_voiture
> // Attend le délai d'ouverture du portail voiture
> - delay:
> hours: 0
> minutes: 0
> seconds: 36
> milliseconds: 0
> // Défini l'état à opened
> - action: input_select.select_option
> metadata: {}
> data:
> option: opened
> target:
> entity_id: input_select.portail_voiture_state
> // Séquence pour fermer le portail voiture (état précédent opened)
> - conditions:
> - condition: state
> entity_id: input_select.portail_voiture_state
> state: opened
> sequence:
> // Défini l'état à moving
> - action: input_select.select_option
> metadata: {}
> data:
> option: moving
> target:
> entity_id: input_select.portail_voiture_state
> // Appuie sur le bouton de la télécommande d'ouverture voiture
> - action: switch.toggle
> metadata: {}
> data: {}
> target:
> entity_id: switch.portail_voiture
> // Attend le délai de fermeture du portail voiture
> - delay:
> hours: 0
> minutes: 0
> seconds: 36
> milliseconds: 0
> // Défini l'état à closed
> - action: input_select.select_option
> metadata: {}
> data:
> option: closed
> target:
> entity_id: input_select.portail_voiture_state
> description: ""
> 
> ```

Merci beaucoup @armavi pour ta réponse qui m’a aidé à résoudre mon problème, même si je n’ai pas réussi à appliqué ta solution, ta réponse a été constructive pour la résolution de mon problème.  
C’est ce que j’aime sur ce forum, toujours quelqu’un pour aider !!
