Modification template cover (porte de garage)

Bonjour à tous,

C’est mon premier post sur le forum alors je me présente :
Je suis un ancien utilisateur de jeedom et j’ai migré très récemment sur HA.
Après quelques manip j’ai compris la logique de l’outil mais j’ai encore du mal sur pas mal de chose. Le code notamment (je suis un peut allergique au code …). Mais j’essaie de m’y mettre ! :slight_smile:

Mon problème

J’ai configurer un module zigbee contact sec pour piloter ma porte de garage (ref : TUYA PJ-ZGD01).
J’ai créé un template cover pour avoir une présentation correcte sur mon dash. Tout fonctionne correctement.

Capture d'écran 2024-09-19 231035

J’ai le retour d’état de ma porte (via capteur).
Si la porte est fermé, le bouton « descendre » n’a aucun effet et inversement.

Ce que je voudrait ajouter c’est que le bouton « descendre » soit grisé et non « cliquable » si la porte est fermée et idem pour le bouton « monter » si la porte est ouverte.

Voici le code de mon template :

cover:
  - platform: template
    covers:
      garage_door:
        unique_id: porte_garage_template
        device_class: garage
        friendly_name: "Porte garage"
        position_template: "{{ states('binary_sensor.porte_garage_garage_door_contact') }}"
        open_cover:
          - condition: state
            entity_id: binary_sensor.porte_garage_garage_door_contact
            state: "off"
          - action: script.impulsion_porte_garage
            target:
              entity_id: switch.garage_door
        close_cover:
          - condition: state
            entity_id: binary_sensor.porte_garage_garage_door_contact
            state: "on"
          - action: script.impulsion_porte_garage
            target:
              entity_id: switch.garage_door
        stop_cover:
          action: script.impulsion_porte_garage
          target:
            entity_id: switch.garage_door
        value_template: "{{is_state('binary_sensor.porte_garage_garage_door_contact', 'on')}}"
        icon_template: >-
          {% if is_state('binary_sensor.porte_garage_garage_door_contact', 'on') %}
            mdi:garage-open
          {% else %}
            mdi:garage
          {% endif %}

Pourriez vous m’aider ?

Bien cordialement,

Ma configuration


System Information

version core-2024.9.2
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.4
os_name Linux
os_version 6.6.46-haos
arch x86_64
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.1
Stage running
Available Repositories 1411
Downloaded Repositories 1
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 13.1
update_channel stable
supervisor_version supervisor-2024.09.1
agent_version 1.6.0
docker_version 26.1.4
disk_total 30.8 GB
disk_used 5.9 GB
healthy true
supported true
host_connectivity true
supervisor_connectivity true
ntp_synchronized true
virtualization kvm
board ova
supervisor_api ok
version_api ok
installed_addons File editor (5.8.0), Mosquitto broker (6.4.1), Zigbee2MQTT (1.40.1-1), Z-Wave JS (0.6.2), Get HACS (1.3.1), Linky (1.5.0)
Dashboards
dashboards 4
resources 0
views 2
mode storage
Recorder
oldest_recorder_run 9 septembre 2024 à 10:00
current_recorder_run 17 septembre 2024 à 11:58
estimated_db_size 82.73 MiB
database_engine sqlite
database_version 3.45.3
___

salut Loic
pour quelqu’un qui n’aime pas le code tu te débrouilles très bien !
Tu as paramétré quasi impeccablement ton template. Et le « quasi » manquant c’est ce qui empêche tes boutons de se griser.

Tu as juste confondu la position et l’état. La position peut varier de 0 à 100 % en passant par toutes ses valeurs. Alors que l’état sera dans ton cas soit « ouvert » soit « fermé ».
Essaie plutôt ça à la place :
position_template: "{% if is_state('binary_sensor.porte_garage_garage_door_contact', 'on') %} 100 {% else %} 0 {% endif %}"

Par contre tu peux noter que ce code là n’est pas non plus tout à fait parfait. Mais pour l’améliorer il te faudrait deux capteurs. L’un qui détecte la position « fermé » et l’autre qui détecte la position « totalement ouvert »
Avec ce que tu as là, si tu stop l’ouverture de ta porte à mi-chemin, tu ne pourras plus continuer à l’ouvrir après. Tu seras obligé de la fermer pour pouvoir l’ouvrir totalement ensuite

Edit:
je viens de relire ton code et je me rends compte qu’il y a la même commande pour l’action ouvrir fermer et stop. Ce qui signifie que ton bouton STOP ne sert certainement à rien
Je te conseille de le retirer les lignes concerne le stop et du coup ton code sera :+1:

Salut Selecus,

merci pour ta réponse :slight_smile:
J’ai testé avec ta correction, ça marche parfaitement. Merci bcp :slight_smile:

Par contre j’avoue ne pas être sur de comprendre. Cela ne revient pas au même d’utiliser un état (0 ou 1) et une position à 0% ou 100%?

Pour ce qui est de continuer l’ouverture après une ouverture stoppée à mi-chemin, mon moteur ne le permet pas. Chaque déclenchement du contact sec lance l’action inverse de l’action précédente.

Je te rejoins pour le bouton stop, c’est purement esthétique :slight_smile:

Dans ton cas ça revient au même mais tu utilises le modèle covers qui est conçu pour des équipements différents : des rideaux, stores, volets, portes et portails.

Prenons l’exemple d’un portail coulissant.

Utilité Ouvert (état) Position
Fermé Faux 0 %
Passage piéton Vrai 20 %
Passage véhicule Vrai 100 %

Imaginons que tu fasses une automatisation qui détecte quand le portail est ouvert. Si tu le fais grâce à l’état, dès que la position sera différente de zéro, alors ton portail sera ouvert, mais tu ne pourras pas passer.

Pour aller plus loin, l’état est égale à Faux ou Vrai et oui c’est enregistré en 0 et 1. Mais Vrai n’est pas égale à 100. Il est juste égale à la valeur 1 qui ne prend qu’un bit en mémoire. Alors que la valeur 100 prend 7 bits en mémoire.

Valeur (décimale) binaire
0 00000000
1 00000001
4 00000100
100 01100100
Booléen (binaire) binaire
Faux 0
Vrai 1

La valeur 100 ne peut pas entré dans un état binaire

Je comprends :slight_smile:

Merci d’avoir pris le temps de me répondre.

Je passe le sujet en résolu.

Peut etre a bientot sur le forum !

1 « J'aime »

Bonsoir,

Au passage la solution est à cocher sur la réponse de @selecus et non sur ton dernier post :wink:

1 « J'aime »