Garage Ouvre Toi!

Hello @lilian76 ,

J’imagine que tu veux faire ce type de chose ?
image

Pour l’interface, le plus simple pour cela est d’utiliser une custom card appelée button-card. Il faut l’installer via le community store.

Ensuite, tu pourra afficher une couleur différente, un logo différent en fonction de l’état de la porte. Tu peux même faire clignoter lors de l’ouverture et la fermeture de la porte.

  - type: 'custom:button-card'
    entity: sensor.etat-porte-garage
    show_state: true
    show_name: false
    layout: icon_state
    state:
      - value: Ouverte
        icon: 'mdi:window-shutter-open'
      - value: Fermée
        icon: 'mdi:window-shutter'
      - value: Entre-ouverte
        icon: 'mdi:window-shutter-alert'
        color: red
      - value: Ouverture...
        icon: 'mdi:window-shutter-open'
        styles:
          card:
            - animation: blink 2s ease infinite
      - value: Fermeture...
        icon: 'mdi:window-shutter'
        styles:
          card:
            - animation: blink 2s ease infinite

Pour ramener l’état de la porte dans une seule entité et l’utilisée dans le button-card, le plus simple est d’utiliser un template sensor.

Puis adapté le code suivant, en testant la valeur de tes 2 capteurs et ton actionneur.

sensor:
  - platform: template
    sensors:
      etat-porte-garage:
        friendly_name: "Etat Porte Garage"
        value_template: >-
          {% if is_state('moncapteur', 'xxx') %}
            ouvert
          {% elif is_state('moncapteur', 'yyy') %}
            fermé
          {% else %}
            entre-ouvert
          {% endif %}

Pour aller plus loin, je rajouterai donc 2 états à ouvert, fermé et entre-ouvert : ouverture… et fermeture…
Pour cela, tu peux créer des boutons qui appel des scripts plutôt que directement des services, et gérer le temps d’ouverture dans les scripts. J’ai rajouté un bouton pour mettre à jour l’état de la porte dans le cas ou tu ne veux pas que le capteur le lise en permanence quand la porte est ouverte ou fermée (la mise à jour de l’état est alors à rajouter dans les scripts).

Voila un exemple de code des boutons qui appellent les scripts :

  - type: horizontal-stack
    cards:
      - type: button
        tap_action:
          action: call-service
          service: script.ouvre_porte
        name: Ouvre
        icon: 'mdi:window-shutter-open'
        icon_height: 30px
      - type: button
        tap_action:
          action: call-service
          service: script.stop_porte
        name: Stop
        icon: 'mdi:stop'
        icon_height: 30px
      - type: button
        tap_action:
          action: call-service
          service: script.ferme_porte
        name: Ferme
        icon: 'mdi:window-shutter'
        icon_height: 30px
      - type: button
        tap_action:
          action: call-service
          service: homeassistant.update_entity
          target:
            entity_id: sensor.porte_etat
        icon_height: 30px
        name: Etat
        icon: 'mdi:sync'

Une alternative est d’utiliser à la place du template sensor et des boutons directement un template cover, fait pour cela. Il permettra à la fois de gérer l’état et appeler les services. Pertinent si le visuel du template cover te convient. Perso, je préfère des boutons dessinés spécifiquement.

Enfin, tu remarquera que l’état de la porte et les boutons sont dans la même carte. Pour cela, je te propose d’utiliser une autre custom card : stack-in-card.

Cette carte s’utilises à la place de vertical-stack, sous laquelle tu aura mis le button card et les boutons, mais permettra de tout avoir dans une seule carte.

type: 'custom:vertical-stack-in-card'
cards:
  - type: 'custom:button-card'
    entity: sensor.etat-porte-garage
    show_state: true
    show_name: false
    layout: icon_state
    state:
      - value: Ouverte
        icon: 'mdi:window-shutter-open'
      - value: Fermée
        icon: 'mdi:window-shutter'
      - value: Entre-ouverte
        icon: 'mdi:window-shutter-alert'
        color: red
      - value: Ouverture...
        icon: 'mdi:window-shutter-open'
        styles:
          card:
            - animation: blink 2s ease infinite
      - value: Fermeture...
        icon: 'mdi:window-shutter'
        styles:
          card:
            - animation: blink 2s ease infinite
  - type: horizontal-stack
    cards:
      - type: button
        tap_action:
          action: call-service
          service: script.ouvre_porte
        name: Ouvre
        icon: 'mdi:window-shutter-open'
        icon_height: 30px
      - type: button
        tap_action:
          action: call-service
          service: script.stop_porte
        name: Stop
        icon: 'mdi:stop'
        icon_height: 30px
      - type: button
        tap_action:
          action: call-service
          service: script.ferme_porte
        name: Ferme
        icon: 'mdi:window-shutter'
        icon_height: 30px
      - type: button
        tap_action:
          action: call-service
          service: homeassistant.update_entity
          target:
            entity_id: sensor.porte_etat
        icon_height: 30px
        name: Etat
        icon: 'mdi:sync'

Je n’ai pas peaufiné et il faudra bien entendu adapter tout ça…
En espérant aider.

1 « J'aime »