Loul1
Mars 30, 2026, 8:29
1
Bonjour,
Mon problème
Je me permets d’ouvrir ce sujet car je ne n’arrive pas à trouver une solution à mon problème, j’ai beau tourner mon code en vain.
J’ai installé un module zigbee (tuya TS0603) de porte de garage qui marche bien.
Maintenant je souhaite ajouter UN bouton à mon dashboard pour ouvrir, fermer et donner l’état.
Voici mon code, qui fonctionne pour ouvrir et donner l’état mai je n’arrive pas à fermer, il me manque une condition « si la capteur retourne une valeur off alors switch.turn_on ».
type: custom:button-card
entity: binary_sensor.garage_garage_door_contact
icon: mdi:garage-variant
show_icon: true
show_state: false
show_name: false
size: 20%
state:
- value: "off"
icon: mdi:garage-variant
- value: "on"
icon: mdi:garage-open-variant
color: red
tap_action:
action: call-service
service: switch.turn_off
target: null
entity_id: switch.garage_state
Merci d’avance pour votre aide.
Ma configuration
System Information
version
core-2026.3.4
installation_type
Home Assistant OS
dev
false
hassio
true
docker
true
container_arch
aarch64
user
root
virtualenv
false
python_version
3.14.2
os_name
Linux
os_version
6.12.47-haos-raspi
arch
aarch64
timezone
Europe/Paris
config_dir
/config
Home Assistant Community Store
GitHub API
ok
GitHub Content
ok
GitHub Web
ok
HACS Data
ok
GitHub API Calls Remaining
5000
Installed Version
2.0.5
Stage
running
Available Repositories
2931
Downloaded Repositories
19
Home Assistant Cloud
logged_in
false
can_reach_cert_server
ok
can_reach_cloud_auth
ok
can_reach_cloud
ok
Home Assistant Supervisor
host_os
Home Assistant OS 17.1
update_channel
stable
supervisor_version
supervisor-2026.03.2
agent_version
1.8.1
docker_version
29.1.3
disk_total
109.3 GB
disk_used
5.7 GB
nameservers
2001:861:4140:8b40:d627:ffff:fe0d:f644, 192.168.1.254
healthy
true
supported
true
host_connectivity
true
supervisor_connectivity
true
ntp_synchronized
true
virtualization
board
rpi4-64
supervisor_api
ok
version_api
ok
installed_addons
Terminal & SSH (10.0.2), File editor (5.8.0), Mosquitto broker (6.5.2), Zigbee2MQTT (2.9.1-1), eufy-security-ws (2.1.0), go2rtc (1.9.14)
Dashboards
dashboards
4
resources
15
views
5
mode
storage
Network Configuration
adapters
lo (disabled), end0 (enabled, default, auto), hassio (disabled), docker0 (disabled), veth06d2a1d (disabled), veth3f8ae30 (disabled), veth8ea32cf (disabled), veth07164ed (disabled), vethb257f73 (disabled), vethea3537b (disabled), veth3c7482f (disabled), vethfc71d71 (disabled), veth6d4c2de (disabled)
ipv4_addresses
lo (127.0.0.1/8), end0 (192.168.1.2/24), hassio (172.30.32.1/23), docker0 (172.30.232.1/23), veth06d2a1d (), veth3f8ae30 (), veth8ea32cf (), veth07164ed (), vethb257f73 (), vethea3537b (), veth3c7482f (), vethfc71d71 (), veth6d4c2de ()
ipv6_addresses
lo (::1/128), end0 (2001:861:4140:8b40:552d:c895:4a3c:4b6b/64, fe80::a3f8:b8ed:3ae8:e9bc/64), hassio (fe80::945d:eff:fe6f:b48d/64), docker0 (fe80::fce4:3dff:fe1f:f913/64), veth06d2a1d (fe80::e892:70ff:fe91:d817/64), veth3f8ae30 (fe80::a496:55ff:fe9e:ff6c/64), veth8ea32cf (fe80::409:4dff:fe18:6703/64), veth07164ed (fe80::68ac:b7ff:fe11:1957/64), vethb257f73 (fe80::6876:bfff:feb7:66d4/64), vethea3537b (fe80::461:64ff:feda:c68d/64), veth3c7482f (fe80::a46f:2cff:fe53:21eb/64), vethfc71d71 (fe80::d879:4eff:fe18:a3f5/64), veth6d4c2de (fe80::6431:13ff:fe80:17af/64)
announce_addresses
192.168.1.2, 2001:861:4140:8b40:552d:c895:4a3c:4b6b, fe80::a3f8:b8ed:3ae8:e9bc
Recorder
oldest_recorder_run
10 mars 2026 à 23:16
current_recorder_run
28 mars 2026 à 22:40
estimated_db_size
76.48 MiB
database_engine
sqlite
database_version
3.49.2
___
Salut,
Fais une automatisation qui vas gérer cela et appelle ton automatisation sur la tap_action
Loul1
Mars 30, 2026, 9:25
3
Merci pour ta réponse @ddfdom , mais je ne suis pas sur de savoir comment on appelle l’automatisation sur la tap_action.
Pa exemple je viens de créer l’automatisation ouvrir garage ci-dessous, j’ai fait pareil pour la fermeture aussi:
Tochy
Mars 30, 2026, 9:42
4
Salut
Si c’est un bouton, pourquoi faire un turn_off. Pour moi sur un bouton il n’y a que que du turn _on à faire.
par contre pardon c’est un script et pas une automatisation (ça ne change pas grand chose)
et j’utilise ce code dans custom buton card
tap_action:
action: call-service
service: script.lock_and_go
Hello,
Tu as tenté avec ? je ne connais pas le module
tap_action:
action: call-service
service: switch.toggle
cdt
salut ,
une simple carte button ne te conviendrais pas ?
show_name: true
show_icon: true
type: button
entity: switch.0xa4c138f6b1522d5f_l2
show_state: true
name: garage
tap_action:
action: more-info
hold_action:
action: toggle
uix:
style: |
:host {
--uix-icon-color:
{% if states('binary_sensor.capteur_ouverture_fin_de_course') == 'on' %}
lightskyblue;
{% else %}
grey;
{% endif %}
--secondary-text-color:
salmon;
--uix-icon:
{% if states('binary_sensor.capteur_ouverture_fin_de_course') == 'on' %}
mdi:garage-open-variant;
{% else %}
mdi:garage-variant;
{% endif %}
}
ha-card {
color: lightskyblue;
--ha-card-background: rgba(0,0,0,0);
}
Loul1
Avril 1, 2026, 8:37
8
Salut à tous, désolé petit soucis de santé du coup j’ai pas pu me connecter.
J’ai essayé toutes les solutions proposées et rien ne fonctionne pour l’instant. je suis sur que ça viens de moi. Voici les erreurs ou problème que je rencontre
@ddfdom : je n’ai pas réussi à faire le script du coup j’ai un peu abandonné.
@Tochy : Échec de l’exécution de l’action switch/turn_on. expected a dictionary for dictionary value @ data[‹ target ›]. Got None
@freetronic : Échec de l’exécution de l’action switch/toggle. must contain at least one of entity_id, device_id, area_id, floor_id, label_id.
@lopesmaxime : c’est exactement la solution que je cherche même le code uix ne semble pas fonctionner chez moi pourtant uix est bien installé (je viens de l’installer à la place de card-mod).
voici mon nouveau code
show_name: true
show_icon: true
type: button
entity: switch.garage_state
show_state: true
name: garage
tap_action:
action: more-info
hold_action:
action: toggle
uix:
style: |
:host {
--uix-icon-color:
{% if states('binary_sensor.garage_garage_door_contact) == 'on' %}
lightskyblue;
{% else %}
grey;
{% endif %}
--secondary-text-color:
salmon;
--uix-icon:
{% if states('binary_sensor.garage_garage_door_contact') == 'on' %}
mdi:garage-open-variant;
{% else %}
mdi:garage-variant;
{% endif %}
}
ha-card {
color: lightskyblue;
--ha-card-background: rgba(0,0,0,0);
}
Et tu as mis quoi dans ton script ?
Il y’a juste une condition
Lorsque tu déclenche le script si la porte est ouverte alors tu fermes sinon tu ouvres
Pas bien compliqué
Mais sinon module supporte le ronfle effectivement autant l’utiliser c’est bien plus simple
Si je compare avec le code de @lopesmaxime il manque l’apostrophe a la fin de binary_sensor.garage_garage_door_contact
Bonjour,
pas besoin de passer par la carte button et uix, tu peux tout faire avec button-card.
type: custom:button-card
entity: switch.garage_state
icon: |
[[[
return states['binary_sensor.garage_garage_door_contact'].state == "on" ? "mdi:garage-open-variant" : "mdi:garage-variant";
]]]
color: |
[[[
return states['binary_sensor.garage_garage_door_contact'].state == "on" ? "red" : "green";
]]]
show_icon: true
show_state: false
show_name: false
size: 20%
Loul1
Avril 2, 2026, 7:50
12
Merci beaucoup @WarC0zes , c’est exactement ce que je cherchais. Juste une petite question: avec ce code je suis obligé d’appuyer 2 fois pour fermer. Il y aurai un moyen pour améliorer ça?
Et aussi les couleurs restent blanche ou bleu, le rouge et vert comme demandé ne semblent pas être pris en compte.
Merci
Non, tu cliques sur la carte et ça toggle le switch. j’ai pas testé le code, mais ça devrait être bon, je vérifierai quand j’ai 5 min.
edit :
Voici le code corrigé.
type: custom:button-card
entity: switch.garage_state
icon: |
[[[
return states['binary_sensor.garage_garage_door_contact'].state == "on" ? "mdi:garage-open-variant" : "mdi:garage-variant";
]]]
show_icon: true
show_state: false
show_name: false
size: 20%
styles:
icon:
- color: |
[[[
return states['binary_sensor.garage_garage_door_contact'].state == "on" ? "red" : "green";
]]]
J’ai fait une automatisation pour ça :
alias: Basculer Bouton Porte Garage
description: ""
mode: single
triggers:
- type: turned_on
device_id: 9435c84d518b27aef2d31ceb799f48dd
entity_id: 14fb1d215a8d0c59d24b86751e89043f
domain: switch
trigger: device
conditions: []
actions:
- delay:
hours: 0
minutes: 0
seconds: 0
milliseconds: 50
- type: turn_off
device_id: 9435c84d518b27aef2d31ceb799f48dd
entity_id: 14fb1d215a8d0c59d24b86751e89043f
domain: switch
Si ça t’intérresse moi j’ai fais ça comme carte :
Loul1
Avril 2, 2026, 8:46
15
Nickel merci, la couleur est maintenant bon.
Mais je confirme bien que je dois appuyer 2 fois pour fermer.
Enfaite le switch fonctionne comme ceci dans zigbee2mqtt:
pour fermer il faut qu’il part de l’état « vrai » vers « faux » donc quand je l’ouvre il passe de vrai à faux donc ok, mais quand je ferme, j’appuie une 1ère fois Faux vers Vrai NOK et une 2ème fois de Vrai vers Faux donc OK.
Loul1:
pour fermer il faut qu’il part de l’état « vrai » vers « faux » donc quand je l’ouvre il passe de vrai à faux donc ok, mais quand je ferme, j’appuie une 1ère fois Faux vers Vrai NOK et une 2ème fois de Vrai vers Faux donc OK.
Ça, je ne saurais pas te dire. C’est plus un problème de ton module, pas de la carte.
surement passer par une automatisation comme utilise @Popoff
et tu utilises l’automatisation dans la carte avec un tap_action.
bonjour
normalement tu swich sur contact sec donc tu devrais avoir le reglage du inching que tu regle sur 1s comme sa il repasse a OFF automatiquement apres la durée defini .
Si il a le même type de module que moi il n’y a pas de réglages.
@Loul1 je n’ai pas été assez précis. Comme dit @WarC0zes mon automatisation permet de faire ce que tu souhaites je pense.
En fait ton module génère un interrupteur on/off sauf que le contact ne s’active uniquement quand tu passe de off à on.
L’automatisation sert du coup à basculer l’interrupteur sur off 50ms après qu’il ait été mis sur on.
Ainsi la fois suivante tu peus rappuyer dessus pour que le contact s’active.
Loul1
Avril 4, 2026, 8:41
19
Merci @WarC0zes et @popoff , les 2 solutions proposées fonctionnent très bien