Entité Cover Porte de Garage - Sécurité portillon Problème Etat

Bonjour,
Je précise que je suis débutant dans HA et c’est la première entité que je personnalise par moi meme.

Mon problème

Je dispose de différentes entités pour gérer ma porte de garage et le portillon dans cette porte.
J’ai voulu tout intégrer dans un cover « Porte de Garage ».
Pour des raisons de sécurité, je voulais interdire l’ouverture de la porte de garage (basculante) si le portillon est ouvert.

J’ai donc entré le code suivant :

###########################################################
############ DECLARATION DE LA PORTE DE GARAGE ############
###########################################################
cover:
    - platform: template
      covers:
        porte_garage:
            device_class: garage
            friendly_name: "Porte de Garage"
            optimistic: false
            open_cover:
                service : |
                    {% if is_state('binary_sensor.ouv_portillon_garage_contact', 'off') %}
                        switch.turn_on
                    {% else %}
                        # NE RIEN FAIRE
                    {% endif %}
                target:
                    entity_id: switch.sonoff_porte_garage
            close_cover:
                service: switch.turn_on
                target:
                    entity_id: switch.sonoff_porte_garage
            position_template: >-
                {% if is_state('binary_sensor.ouv_portillon_garage_contact', 'on') %}
                    0
                {% elif is_state('binary_sensor.ouv_porte_garage_contact', 'on') %}
                    100
                {% else %}
                    0
                {% endif %}

Le problème est que si je clique sur la barre d’ouverture de la porte de garage avec le portillon ouvert, la barre passe tout de meme en position ouverte (les capteurs de position indiquent qu’elle est fermé). La porte de garage n’a pas été actionnée ce qui est correct.
Mais avec la barre en haut maintenant, en recliquant sur l’actionneur, la porte s’ouvre maintenant. Je pense qu’il y a un problème de correspondance entre l’état du cover et la position réelle de la porte.
Une des solutions est peut etre de mettre la condition du portillon ouvert si la porte de garage est ouverte mais c’est totalement dénué de sens physique.

Si vous avez une idée du fonctionnement de l’entité cover je suis preneur.

Pour info, pour repasser le curseur dans la bonne position, je dois fermer le portillon (avec fin de course), simuler une ouverture du garage (avec fin de course) puis simuler une fermeture du garage (avec fin de course).

C’est le seul moyen de mettre le curseur dans la bonne position

Merci d’avance pour votre aide.

Ma configuration

System Information

version core-2025.2.5
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.13.1
os_name Linux
os_version 6.6.62-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 1636
Downloaded Repositories 10
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 14.2
update_channel stable
supervisor_version supervisor-2025.03.2
agent_version 1.6.0
docker_version 27.2.0
disk_total 219.4 GB
disk_used 6.4 GB
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 File editor (5.8.0), Terminal & SSH (9.16.0), ZeroTier One (0.20.0), Mosquitto broker (6.5.0), Zigbee2MQTT (2.1.3-1), Matter Server (7.0.0)
Dashboards
dashboards 2
resources 4
views 3
mode storage
Network Configuration
adapters lo (disabled), end0 (enabled, default, auto), hassio (disabled), docker0 (disabled), zt6ntiz5fr (disabled), veth2e28e47 (disabled), veth7ea0a42 (disabled), veth3c24ff4 (disabled), veth37bd583 (disabled), veth9691c8c (disabled), vethc8c0e31 (disabled), veth86c9091 (disabled), veth783ddc5 (disabled), veth1810b14 (disabled), vethbeb5a8f (disabled)
ipv4_addresses lo (127.0.0.1/8), end0 (192.168.1.100/24), hassio (172.30.32.1/23), docker0 (172.30.232.1/23), zt6ntiz5fr (192.168.192.224/24), veth2e28e47 (), veth7ea0a42 (), veth3c24ff4 (), veth37bd583 (), veth9691c8c (), vethc8c0e31 (), veth86c9091 (), veth783ddc5 (), veth1810b14 (), vethbeb5a8f ()
ipv6_addresses lo (::1/128), end0 (2a01:e0a:ec1:6270:da00:481b:81f4:4228/64, fe80::1626:ab1e:3b3d:84ce/64), hassio (fe80::42:c7ff:fe1c:bb9f/64), docker0 (fe80::42:6aff:fe77:94b0/64), zt6ntiz5fr (fe80::e80a:a0ff:fe77:fef5/64), veth2e28e47 (fe80::1c05:24ff:fe8d:8682/64), veth7ea0a42 (fe80::603a:cbff:fe30:18c4/64), veth3c24ff4 (fe80::885c:ceff:fee4:560d/64), veth37bd583 (fe80::4c05:1eff:fe44:e7cf/64), veth9691c8c (fe80::8c50:a9ff:feca:3e/64), vethc8c0e31 (fe80::fc41:cdff:fec3:e812/64), veth86c9091 (fe80::40ea:dcff:fef2:6d1e/64), veth783ddc5 (fe80::6432:28ff:fe88:c315/64), veth1810b14 (fe80::a0c1:22ff:feda:ad7d/64), vethbeb5a8f (fe80::1d:61ff:fed3:b283/64)
announce_addresses 192.168.1.100, 2a01:e0a:ec1:6270:da00:481b:81f4:4228, fe80::1626:ab1e:3b3d:84ce
Recorder
oldest_recorder_run 23 février 2025 à 15:58
current_recorder_run 7 mars 2025 à 21:12
estimated_db_size 58.71 MiB
database_engine sqlite
database_version 3.47.1
Sonoff
version 3.8.2 (c4b6fda)
cloud_online 2 / 2
local_online 2 / 2
[/center]

Salut,

je pense que ton souci vient du fait que tu ne contrôles pas l’état du cover.
Il va falloir voir quelle logique y mettre, mais en gros là comme tu appuies sur « ouvrir » même si le garage ne s’ouvre pas, le template prends en compte le fait avoir lancé l’action, pas ce que l’action a faite. Et comme il n’y a pas de capteur pour dire si la porte est vraiment ouverte ou pas, il part du principe qu’elle est ouverte…vu que tu as cliqué sur ouvrir…

En ajoutant un « value_template » basé au minimum sur ton capteur d’ouverture, ça pourrait aider… mais l’idéal aurait été d’avoir 2 capteurs un pour garage ouvert l’autre pour garage fermé et là plus de questions à se poser…

Salut ,

Le problème vient du fait que ton cover de type template ne reflète pas correctement l’état réel de la porte de garage. Home Assistant pense que la porte s’ouvre quand tu cliques, même si l’action n’a pas été exécuté à cause de la condition du portillon. Ici position_template ne prend pas en compte l’état réel du switch.sonoff_porte_garage.
Dans ton cas utiliser value_template au lieu de position_template pour gérer et t’assurer que l’état du cover reflète toujours la réalité.

Tu peux tester cette solution .
Code corrigé :

cover:
  - platform: template
    covers:
      porte_garage:
        device_class: garage
        friendly_name: "Porte de Garage"
        value_template: >-
          {% if is_state('binary_sensor.ouv_porte_garage_contact', 'on') %}
            open
          {% else %}
            closed
          {% endif %}
        open_cover:
          - condition: state
            entity_id: binary_sensor.ouv_portillon_garage_contact
            state: "off"
          - service: switch.turn_on
            target:
              entity_id: switch.sonoff_porte_garage
        close_cover:
          - service: switch.turn_on
            target:
              entity_id: switch.sonoff_porte_garage
        icon_template: |-
          {% if is_state('binary_sensor.ouv_porte_garage_contact','off') %}
            mdi:garage-open-variant
          {% else %}
            mdi:garage-variant
          {% endif %}

Merci @hackdiy pour ton code, j’ai modifié la partie value_template car elle n’était pas cohérente avec la partie icon template

value_template: >-
           {% if is_state('binary_sensor.ouv_porte_garage_contact', 'off') %}
             open
           {% else %}
             closed
           {% endif %}

Cependant le problème reste le même, en cliquant sur le curseur, même portillon ouvert, le curseur change de position.
L’état de la porte est correcte par rapport au capteur d’ouverture (que ce soit le texte ou l’icone)

La seule solution que je vois est de mettre la condition pour l’ouverture et la fermeture de la porte pour sécuriser cette action et que le bouton d’action soit décorrélé de la position de la porte.

Merci pour ton retour.
Je laisse ouvert le sujet si quelqu’un a la solution.

Correction de icon_template

Code YAML amélioré avec des informations supplémentaires

cover:
  - platform: template
    covers:
      porte_garage:
        device_class: garage
        friendly_name: "Porte de Garage"
        
        # Vérifie si les capteurs sont disponibles
        availability_template: >-
          {{ states('binary_sensor.ouv_porte_garage_contact') not in ['unknown', 'unavailable'] 
             and states('binary_sensor.ouv_portillon_garage_contact') not in ['unknown', 'unavailable'] }}

        # État du cover basé sur le capteur d'ouverture de la porte
        value_template: >-
          {% if is_state('binary_sensor.ouv_porte_garage_contact', 'on') %}
            open
          {% else %}
            closed
          {% endif %}

        # Action d'ouverture : uniquement si le portillon est fermé
        open_cover:
          - condition: state
            entity_id: binary_sensor.ouv_portillon_garage_contact
            state: "off"
          - service: switch.turn_on
            target:
              entity_id: switch.sonoff_porte_garage

        # Action de fermeture
        close_cover:
          - service: switch.turn_on
            target:
              entity_id: switch.sonoff_porte_garage

        # Ajout de l'action d'arrêt (si applicable)
        stop_cover:
          - service: switch.turn_off
            target:
              entity_id: switch.sonoff_porte_garage

        # Icône dynamique
        icon_template: >-
          {% if is_state('binary_sensor.ouv_porte_garage_contact', 'on') %}
            mdi:garage-open-variant
          {% else %}
            mdi:garage-variant
          {% endif %}

availability_template
:arrow_right: Évite que le cover devienne inutilisable si les capteurs sont indisponibles.

stop_cover
:arrow_right: Permet d’envoyer un arrêt si le relais supporte cette fonction (sinon, peut être supprimé).

Icône correcte
:arrow_right: Affiche l’icône garage-open-variant lorsque la porte est ouverte et garage-variant lorsqu’elle est fermée.

Effet attendu :

  • Le cover ne changera plus d’état si l’ouverture est bloquée par le portillon.
  • L’icône sera toujours correcte.
  • Si un capteur est en erreur (unavailable), le cover sera marqué comme indisponible.

@hackdiy
Super Merci beaucoup pour ton aide. La représentation du cover est parfaite et très claire pour l’ouverture et la fermeture.

Il n’y a plus de problème pour la gestion du portillon, je vais devoir étudier en détail le code pour le comprendre et comparer avec les autres codes échangés.

Encore merci pour ton aide.

Cdlt

1 « J'aime »