Gestion porte de garage avec template COVER problème état

Bonjour,
J’ai une porte de garage sectionnelle motorisée. J’ai un contact qui remonte via un ESP32 qui indique si la porte est fermée

J’utilise un template COVER, le code:

  porte_garage:
        device_class: garage
        friendly_name: "Commande porte garage"
        value_template: "{{ is_state('binary_sensor.porte_garage', 'on') }}"
        open_cover:
          - service: switch.turn_on
            target:
              entity_id: switch.sonoff_100173bbc2
        close_cover:
          - service: switch.turn_on
            target:
              entity_id: switch.sonoff_100173bbc2

Pour déclencher l’ouverture ou la fermeture de la porte le SWITCH sonoff envoi une impulsion de 0.5 Seconde.

Coté interfaçe :

Jusqu’ici rien d’exceptionnel, lorsque la porte est fermée et que je clique sur l’ouverture, le switch de détection de fermeture change d’état immédiatement et de ce fait l’icone passe en vert (garage ouvert).
Par contre lorsque la porte est ouverte, (vu que je n’ai pas un switch qui indique la fin de course d’ouverture), la porte se referme bien sauf que tant qu’elle n’arrive pas en fin de course de fermeture je ne sais pas si la commande a été prise en compte ! Je visualise au bout d’environ 20 secondes que l’état est bien « fermé ».
Ce que je souhaiterais faire, c’est que le statut fermé/ouvert soit « en mouvement » ou bien que l’icone fermeture s’affiche 20 secondes en rouge lorsque j’appuis sur l’icone de fermeture ce qui validerait le fait que la commande est bien prise en compte.
Je ne sais absolument pas comment faire, si vous pouvez m’aider !
merci par avance.

Salut @Ricky11
Regarde ce post, il me semble que ça correspond à ce que tu recherches

Message supprimé par son auteur

Ceci dit, si ton problème est de savoir si la commande de fermeture a été prise en compte

, je ne vois pas d’autre solution que d’installer un contact de détection de la position ouverte. Toute les autres solution proposées ne peuvent pas créer une information qui n’existe pas dans le système.

1 « J'aime »

OK, merci pour ton retour, il y a beaucoup de notions (timer, liste déroulante…) que je ne connais pas encore, mais je m’attèle au truc, …

aller c’est parti…

1 - Créer une entrée « Minuteur » (timer) et la définir sur 20 secondes

2 - créer une entrée « Liste déroulante » et ajouter 3 éléments à la liste : « Fermé », « Ouvert », « Fermeture »

2 - modifier le script utilisé lors de l’appui sur le bouton « Fermeture » en ajoutant le démarrage du timer

==> Là je bloque sur cette partie je ne sais pas comment faire !!

3 - créer une automatisation avec en déclencheur le passage du timer de « Inactif » à « Actif » avec en action définir l’input_select (liste déroulante) sur « Fermeture »

alias: Fermeture porte garage
description: ""
triggers:
  - trigger: state
    entity_id:
      - timer.minuteur_porte_garage
    from: idle
    to: active
conditions: []
actions:
  - action: input_select.select_option
    metadata: {}
    data:
      option: Fermeture
    target:
      entity_id: input_select.etats_porte_garage
mode: single

4 - créer une automatisation vec en déclencheur le passage du timer de « Actif » à « Inactif » avec en action définir l’input_select (liste déroulante) sur « Fermé »
etc.

alias: Porte garage fermée
description: ""
triggers:
  - trigger: state
    entity_id:
      - timer.minuteur_porte_garage
    from: active
    to: idle
conditions: []
actions:
  - action: input_select.select_option
    metadata: {}
    data:
      option: Fermé
    target:
      entity_id: input_select.etats_porte_garage
mode: single

Message supprimé par son auteur

Oui effectivement c’est le bouton de droite…
le code Yaml

type: custom:mushroom-cover-card
entity: cover.porte_garage
show_buttons_control: true
name: "porte Garage "
tap_action:
  action: perform-action
  perform_action: timer.start
  target:
    entity_id: timer.minuteur_porte_garage
card_mod:
  style: |
    ha-state-icon {
     {% set state = states('cover.porte_garage') %}
     {% if state == 'open' %}
       color: green;
       --card-mod-icon: mdi:window-shutter-open;
     {% else %}
       color: red;
       --card-mod-icon: mdi:window-shutter;
     {% endif %}  
    }

merci pour ton aide car je patine dans la semoule… :woozy_face:

Message supprimé par son auteur

J’ai refais un test ça déclenche bien la fermeture de la porte de garage, mais je ne vois pas l’indication « fermeture »…

sinon le template dans le fichier configuration.yaml

      porte_garage:
        device_class: garage
        friendly_name: "Commande porte garage"
        value_template: "{{ is_state('binary_sensor.porte_garage', 'on') }}"
        open_cover:
          - service: switch.turn_on
            target:
              entity_id: switch.sonoff_100173bbc2
        close_cover:
          - service: switch.turn_on
            target:
              entity_id: switch.sonoff_100173bbc2

Bonjour. Merci pour ton retour, mais j’ai essayé de comprendre comment ça fonctionne et je n’y suis pas parvenu. :woozy_face:

Message supprimé par son auteur

La vache… Sacré boulot…je suis absent quelques jours mais je suis impatient de pouvoir tester ça dès mon retour !
Un grand merci.

Message supprimé par son auteur

J’ai commencé a me mettre sur le truc, mais déjà des questions, mon capteur (contact de fermeture) c’est binary_sensor.porte_garage il faut que je le transforme en boolean ?

Message supprimé par son auteur

ok alors je continu…en tapant le code j’ai déjà ça !!


le code en mettant mes entités

type: custom:button-card
name: Porte Garage
label: |
  [[[
    if (states['timer.timergarage'].state === 'active') return 'Fermeture';
    if (states['binary_sensor.porte_garage'].state === 'off') return 'Ouverte';
    if (states['binary_sensor.porte_garage'].state === 'on') return 'Fermée';
    return 'État inconnu';
  ]]]
show_label: true
custom_fields:
  my_icon:
    card:
      type: custom:button-card
      icon: |
        [[[
          if (states['timer.timergarage'].state === 'active') return 'mdi:window-shutter-cog';
          if (states['binary_sensor.porte_garage'].state === 'off') return 'mdi:window-shutter-open';
          if (states['binary_sensor.porte_garage'].state === 'on') return 'mdi:window-shutter';
          return 'mdi:window-shutter-alert';
        ]]]
      styles:
        card:
          - background-color: rgba(44,44,44,1)
          - border-radius: 50%
          - width: 60px
          - height: 60px
          - display: flex
          - align-items: center
          - justify-content: center
          - pointer-events: none
          - cursor: default
        icon:
          - color: |
              [[[
                if (states['timer.timergarage'].state === 'active') return 'orange';
                if (states['binary_sensor.porte_garage'].state === 'off') return 'red';
                if (states['binary_sensor.porte_garage'].state === 'on') return 'green';
                return 'lightgray';
              ]]]
          - animation: |
              [[[
                return states['timer.timergarage'].state === 'active' ? 'blink 1.5s infinite' : 'none';
              ]]]
          - width: 40px
  button_up:
    card:
      type: custom:button-card
      icon: mdi:arrow-up
      tap_action:
        action: call-service
        service: script.essai_garage_ouverture
      styles:
        card:
          - background-color: rgba(44,44,44,1)
          - width: 105px
          - height: 42px
          - pointer-events: |
              [[[
                return states['binary_sensor.porte_garage'].state === 'on' ? 'auto' : 'none';
              ]]]
          - cursor: |
              [[[
                return states['binary_sensor.porte_garage'].state === 'on' ? 'pointer' : 'default';
              ]]]
        icon:
          - color: |
              [[[
                return states['binary_sensor.porte_garage'].state === 'on' ? 'rgba(255,255,255,0.8)' : 'rgba(255,255,255,0.1)';
              ]]]
  button_down:
    card:
      type: custom:button-card
      icon: mdi:arrow-down
      tap_action:
        action: call-service
        service: script.essai_garage_fermeture
      styles:
        card:
          - background-color: rgba(44,44,44,1)
          - width: 105px
          - height: 42px
          - pointer-events: |
              [[[
                return states['binary_sensor.porte_garage'].state === 'off' ? 'auto' : 'none';
              ]]]
          - cursor: |
              [[[
                return states['binary_sensor.porte_garage'].state === 'off' ? 'pointer' : 'default';
              ]]]
        icon:
          - color: |
              [[[
                return states['binary_sensor.porte_garage'].state === 'off' ? 'rgba(255,255,255,0.8)' : 'rgba(255,255,255,0.1)';
              ]]]
styles:
  card:
    - height: 130px
    - width: 250px
    - background-color: rgba(28, 28, 28, 1)
    - border-radius: 12px
    - box-shadow: none
    - border: 1px solid rgba(44,44,44,1)
    - pointer-events: |
        [[[
          return (['Ouverte', 'Fermée'].includes(states['input_select.etatportegarage'].state)) ? 'none' : 'auto';
        ]]]
    - cursor: |
        [[[
          return (['Ouverte', 'Fermée'].includes(states['input_select.etatportegarage'].state)) ? 'default' : 'pointer';
        ]]]
  grid:
    - grid-template-areas: >-
        "my_icon n" "my_icon l" "button_up button_down" "timer_status
        timer_status"
    - grid-template-columns: 70px auto
    - grid-template-rows: 30px 40px 42px 42px
    - align-items: flex-start
    - padding-left: 10px
  name:
    - font-size: 14px
    - font-weight: bold
    - color: rgba(255,255,255,0.8)
    - justify-self: start
    - text-align: left
  label:
    - font-size: 12px
    - color: |
        [[[
          const s = states['timer.timergarage'].state;
          return s === 'active' ? 'orange' : 'rgba(255,255,255,0.8)';
        ]]]
    - justify-self: start
    - text-align: left
    - margin-top: 4px
  custom_fields:
    button_up:
      - position: absolute
      - top: 80px
      - left: 15px
    button_down:
      - position: absolute
      - top: 80px
      - right: 15px

j’attaque les scripts :grinning:

Message supprimé par son auteur

Avant d’avoir la 4G j’avais une connexion STARLINK, c’est ultra stable et ça fonctionne feu de dieu, mais c’est cher ! 50€ par mois