Animer un icône pendant une durée déterminée

Bonjour à tous,

Mon problème

Je contrôle l’ouverture d’un portail depuis un bouton simple. Je cherche à animer un icône supplémentaire pendant 45s, qui est la durée de mouvement du portail.

Dans mon idée, c’est lorsqu’on presse le bouton qu’on doit déclencher l’animation. Du côté des automatismes, on peut bien intercaler une durée dans une action, mais je n’ai pas trouvé le moyen de déclencher une animation. Ce n’est sans doute pas la bonne méthode.
Est ce que quelqu’un a déjà fait ce genre de chose ?

merci :slight_smile:

le code

     cards:
      - type: custom:mushroom-template-card
        primary: |-
          {% if is_state("sensor.light_intensity", "0") %}
              Le portail est fermé
          {% else %}
              Le portail est ouvert
          {% endif %}
        secondary: Appuyer pour actionner
        icon: |-
          {% if is_state("sensor.light_intensity", "0") %}
             mdi:boom-gate-outline
          {% else %}
             mdi:boom-gate-up
          {% endif %}
        layout: vertical
        icon_color: |-
          {% if is_state("sensor.light_intensity", "0") %}
              red
          {% else %}
              green
          {% endif %}
        badge_color: |-
          {% if is_state("sensor.light_intensity", "0") %}
              white
          {% else %}
              blue
          {% endif %}
        fill_container: true
        badge_icon: ''
        tap_action:
          action: call-service
          service: automation.trigger
          target:
            entity_id: automation.test
          data:
            skip_condition: true
        hold_action:
          action: none
        double_tap_action:
          action: none
        card_mod:
          style:
            mushroom-shape-icon$: |
              .shape {
              --icon-symbol-size: 50px;
              --icon-size: 80px;
              }
      - type: custom:mushroom-template-card
        primary: ''
        secondary: ''
        icon: mdi:ship-wheel
        badge_icon: ''
        icon_color: green
        card_mod:
          style: |
            ha-state-icon {
              animation: wobbling 1s linear infinite;
            }
            @keyframes wobbling {
              0% {transform: rotate(180deg);}
              100% {transform: rotate(360deg);}
            } 

Ma configuration


System Information

version core-2024.4.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 6.6.25-haos
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.34.0
Stage running
Available Repositories 1467
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 12.2
update_channel stable
supervisor_version supervisor-2024.04.0
agent_version 1.6.0
docker_version 25.0.5
disk_total 78.0 GB
disk_used 8.5 GB
healthy true
supported true
board generic-aarch64
supervisor_api ok
version_api ok
installed_addons File editor (5.8.0), Studio Code Server (5.15.0), NGINX Home Assistant SSL proxy (3.9.0), Samba share (12.3.1), ESPHome (2024.4.1), Terminal & SSH (9.13.0)
Dashboards
dashboards 4
resources 2
views 2
mode storage
Recorder
oldest_recorder_run 21 avril 2024 à 19:35
current_recorder_run 26 avril 2024 à 13:50
estimated_db_size 59.57 MiB
database_engine sqlite
database_version 3.44.2
___

Bonjour,

cela correspond certainement a ce que tu cherche.
un peu de recherche avec la loupe en haut du Forum et tu trouve en 2 secondes.
:wink:
Animation icône porte garage

ou encore :

Résultats de recherche pour « animation icone »

ou encore

Home Assistant Icons: Borders, Backgrounds and Advanced Animation

A mon sens, il faut associer un timer qui se met en route au clic et qui s’arrête au bout des 45 secondes et ajouter une condition à l’animation. Je devrais pouvoir le faire avec une cutom:button-card mais pas avec une mushroom

Merci pour ton retour. en effet j’avais deja trouvé certains de ces liens, mais il concernent surtout l’animation de bouton. Ce qui me pose problème, c’est le fait que l’animation doit etre déclenchée sur l’action d’un bouton, et durer 45s. et c’est ça que je ne parviens pas à faire.

@Cleya Je ne me suis pas encore intéressé au button-card mais il y a peut être plus de facilité à le faire. Je vais regarder de ce côté là. Avec la mushroom, je ne vois pas comment m’y prendre.

J’ai une demande identique d’un autre côté. Je regarde ça en fin d’aprèm :

1 « J'aime »

Problème réglé pour ma part par les scripts déjà créé qui écrient l’état de ma porte de garage dans un input_text
J’ai pu via le script écrire un premier état de mouvement et indiquer le temps (30 secondes) à attendre pour écrire l’état final
Ensuite j’ai rajouté dans le code de ma carte les mouvement intermédiaire

type: custom:button-card
entity: input_text.etat_porte_garage
name: Garage
icon: |
  [[[
    if (states['input_text.etat_porte_garage'].state == 'Fermé')
      return 'mdi:garage';
    else if (states['input_text.etat_porte_garage'].state == 'Ouvert')
      return 'mdi:garage-open';
    else if (states['input_text.etat_porte_garage'].state == 'Fermeture')
      return 'mdi:garage-alert';
    else if (states['input_text.etat_porte_garage'].state == 'Ouverture')
      return 'mdi:garage-alert';
  ]]]
show_label: true
label: |
  [[[
    if (states['input_text.etat_porte_garage'].state == 'Fermé')
      return '<font color= "green"><b>Fermé</font>';
    else if (states['input_text.etat_porte_garage'].state == 'Ouvert')
      return '<font color= "red"><b>Ouvert</font>';
    else if (states['input_text.etat_porte_garage'].state == 'Fermeture')
      return '<font color= "orange"><b>Fermeture</font>';
    else if (states['input_text.etat_porte_garage'].state == 'Ouverture')
      return '<font color= "orange"><b>Ouverture</font>';
  ]]]
aspect_ratio: 3/1
styles:
  name:
    - font-size: 0.9em
    - justify-self: middle
    - align-self: end
  card:
    - box-shadow: 4px 4px 4px 0px rgba(32,32,32,0.5)
    - border: 2px rgba(211,211,211,1.0) outset
  icon:
    - border-radius: 50%
    - border: none
    - box-shadow: 0px 0px 5px 5px rgba(0,128,0,0.5)
    - box-shadow: |
        [[[
          if (states['input_text.etat_porte_garage'].state == 'Fermé')
            return '0px 0px 5px 5px rgba(0,128,0,0.5)';
          else if (states['input_text.etat_porte_garage'].state == 'Ouvert')
            return '0px 0px 5px 5px rgba(255,0,0,0.5)';
          else if (states['input_text.etat_porte_garage'].state == 'Fermeture')
            return '0px 0px 5px 5px rgba(255,140,0,0.5)';
          else if (states['input_text.etat_porte_garage'].state == 'Ouverture')
            return '0px 0px 5px 5px rgba(255,140,0,0.5)';
        ]]]
    - background-color: |
        [[[
          if (states['input_text.etat_porte_garage'].state == 'Fermé')
            return 'rgba(0,128,0,0.5)';
          else if (states['input_text.etat_porte_garage'].state == 'Ouvert')
            return 'rgba(255,0,0,0.5)';
          else if (states['input_text.etat_porte_garage'].state == 'Fermeture')
            return 'rgba(255,140,0,0.5)';
          else if (states['input_text.etat_porte_garage'].state == 'Ouverture')
            return 'rgba(255,140,0,0.5)';
        ]]]
    - width: 60px
    - height: 60px
    - color: |
        [[[
          if (states['input_text.etat_porte_garage'].state == 'Fermé')
            return 'rgba(0,255,0,1.0)';
          else if (states['input_text.etat_porte_garage'].state == 'Ouvert')
            return 'rgba(255,0,0,1.05)';
          else if (states['input_text.etat_porte_garage'].state == 'Fermeture')
            return 'rgba(255,140,0,0.5)';
          else if (states['input_text.etat_porte_garage'].state == 'Ouverture')
            return 'rgba(255,140,0,0.5)';
        ]]]
tap_action:
  action: call-service
  service: script.portail_fermer
hold_action:
  action: call-service
  service: script.portail_ouvert

Voilà ce que ça peut donner avec un timer et un script pour l’appui sur le bouton :

forum

Le code :

type: custom:button-card
aspect_ratio: 3/1
entity: input_boolean.position_garage
name: Garage
icon: |
  [[[
    if (states['input_boolean.position_garage'].state == 'off')
      return 'mdi:garage';
    else if (states['input_boolean.position_garage'].state == 'on')
      return 'mdi:garage-open';
  ]]]
show_label: true
label: |
  [[[
    if (states['input_boolean.position_garage'].state == 'off' && states['timer.essai_timer'].state == 'idle')
      return '<font color= "green"><b>fermé</font>';
    else if (states['input_boolean.position_garage'].state == 'off' && states['timer.essai_timer'].state == 'active')
      return '<font color= "orange"><b>fermeture</font>';
    else if (states['input_boolean.position_garage'].state == 'on' && states['timer.essai_timer'].state == 'idle')
      return '<font color= "red"><b>ouvert</font>';
    else if (states['input_boolean.position_garage'].state == 'on' && states['timer.essai_timer'].state == 'active')
      return '<font color= "orange"><b>ouverture</font>';
  ]]]
styles:
  name:
    - font-size: 0.9em
    - justify-self: middle
    - align-self: end
    - color: rgba(255,255,255,0.6)
  card:
    - background-color: rgba(64,64,64,0.8)
    - box-shadow: 4px 4px 4px 0px rgba(32,32,32,0.5)
    - border: 2px rgba(211,211,211,1.0) outset
  icon:
    - border-radius: 50%
    - border: none
    - box-shadow: 0px 0px 5px 5px rgba(0,128,0,0.5)
    - box-shadow: |
        [[[
          if (states['input_boolean.position_garage'].state == 'off' && states['timer.essai_timer'].state == 'idle')
            return '0px 0px 5px 5px rgba(0,128,0,0.5)';
          else if (states['input_boolean.position_garage'].state == 'off' && states['timer.essai_timer'].state == 'active')
            return '0px 0px 5px 5px rgba(255,140,0,0.5)';
          else if (states['input_boolean.position_garage'].state == 'on' && states['timer.essai_timer'].state == 'idle')
            return '0px 0px 5px 5px rgba(255,0,0,0.5)';
          else if (states['input_boolean.position_garage'].state == 'on' && states['timer.essai_timer'].state == 'active')
            return '0px 0px 5px 5px rgba(255,140,0,0.5)';
        ]]]
    - background-color: |
        [[[
          if (states['input_boolean.position_garage'].state == 'off' && states['timer.essai_timer'].state == 'idle')
            return 'rgba(0,128,0,0.5)';
          else if (states['input_boolean.position_garage'].state == 'off' && states['timer.essai_timer'].state == 'active')
            return 'rgba(255,140,0,0.5)';
          else if (states['input_boolean.position_garage'].state == 'on' && states['timer.essai_timer'].state == 'idle')
            return 'rgba(255,0,0,0.5)';
          else if (states['input_boolean.position_garage'].state == 'on' && states['timer.essai_timer'].state == 'active')
            return 'rgba(255,140,0,0.5)';
        ]]]
    - width: 60px
    - height: 60px
    - color: |
        [[[
          if (states['input_boolean.position_garage'].state == 'off' && states['timer.essai_timer'].state == 'idle')
            return 'rgba(0,255,0,1.0)';
          else if (states['input_boolean.position_garage'].state == 'off' && states['timer.essai_timer'].state == 'active')
            return 'rgba(255,140,0,1.0)';
          else if (states['input_boolean.position_garage'].state == 'on' && states['timer.essai_timer'].state == 'idle')
            return 'rgba(255,0,0,1.0)';
          else if (states['input_boolean.position_garage'].state == 'on' && states['timer.essai_timer'].state == 'active')
            return 'rgba(255,140,0,1.0)';
        ]]]
    - animation: |
        [[[
          if (states['timer.essai_timer'].state == 'active')
            return 'blink 2s ease infinite';
        ]]]
tap_action:
  action: call-service
  service: script.essai_garage
hold_action:
  action: none

Le script :

alias: essai_garage
sequence:
  - service: timer.start
    metadata: {}
    data: {}
    target:
      entity_id: timer.essai_timer
  - if:
      - condition: state
        entity_id: input_boolean.position_garage
        state: "on"
    then:
      - service: input_boolean.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.position_garage
    else:
      - service: input_boolean.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.position_garage
mode: single

Hello @Cleya
De retour après quelques déplacements: )
Merci pour l’exemple. Pour l’instant ça ne fonctionne pas encore chez moi mais je pense que j’ai dû me crayonner les pinceaux comme on dit :slight_smile:
Je résume :
J’ai crée un minuteur de 10s. (minuteur_portail)
J’ai crée un booleen d’état (etat_portail)
J’ai crée le script comme toi (scriptportail)

alias: scriptportail
sequence:
  - service: timer.start
    metadata: {}
    data: {}
    target:
      entity_id: timer.minuteur_portail
  - if:
      - condition: state
        entity_id: input_boolean.etat_portail
        state: "on"
    then:
      - service: input_boolean.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.etat_portail
    else:
      - service: input_boolean.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.etat_portail
mode: single

et enfin la carte

views:
  - title: TEST
    cards:
      - type: custom:button-card
        aspect_ratio: 3/1
        entity: input_boolean.etat_portail
        name: Portail
    icon: |
      [[[
        if (states['input_boolean.etat_portail'].state == 'off')
          return 'mdi:garage';
        else if (states['input_boolean.etat_portail'].state == 'on')
          return 'mdi:garage-open';
      ]]]
    show_label: true
    label: |
      [[[
        if (states['input_boolean.etat_portail'].state == 'off' && states['timer.timer_portail'].state == 'idle')
          return '<font color= "green"><b>fermé</font>';
        else if (states['input_boolean.etat_portail'].state == 'off' && states['timer.timer_portail'].state == 'active')
          return '<font color= "orange"><b>fermeture</font>';
        else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.timer_portail'].state == 'idle')
          return '<font color= "red"><b>ouvert</font>';
        else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.timer_portail'].state == 'active')
          return '<font color= "orange"><b>ouverture</font>';
      ]]]
    styles:
      name:
        - font-size: 0.9em
        - justify-self: middle
        - align-self: end
        - color: rgba(255,255,255,0.6)
      card:
        - background-color: rgba(64,64,64,0.8)
        - box-shadow: 4px 4px 4px 0px rgba(32,32,32,0.5)
        - border: 2px rgba(211,211,211,1.0) outset
      icon:
        - border-radius: 50%
        - border: none
        - box-shadow: 0px 0px 5px 5px rgba(0,128,0,0.5)
        - box-shadow: |
            [[[
              if (states['input_boolean.etat_portail'].state == 'off' && states['timer.timer_portail'].state == 'idle')
                return '0px 0px 5px 5px rgba(0,128,0,0.5)';
              else if (states['input_boolean.etat_portail'].state == 'off' && states['timer.timer_portail'].state == 'active')
                return '0px 0px 5px 5px rgba(255,140,0,0.5)';
              else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.timer_portail'].state == 'idle')
                return '0px 0px 5px 5px rgba(255,0,0,0.5)';
              else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.timer_portail'].state == 'active')
                return '0px 0px 5px 5px rgba(255,140,0,0.5)';
            ]]]
        - background-color: |
            [[[
              if (states['input_boolean.etat_portail'].state == 'off' && states['timer.timer_portail'].state == 'idle')
                return 'rgba(0,128,0,0.5)';
              else if (states['input_boolean.etat_portail'].state == 'off' && states['timer.timer_portail'].state == 'active')
                return 'rgba(255,140,0,0.5)';
              else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.timer_portail'].state == 'idle')
                return 'rgba(255,0,0,0.5)';
              else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.timer_portail'].state == 'active')
                return 'rgba(255,140,0,0.5)';
            ]]]
        - width: 60px
        - height: 60px
        - color: |
            [[[
              if (states['input_boolean.etat_portail'].state == 'off' && states['timer.timer_portail'].state == 'idle')
                return 'rgba(0,255,0,1.0)';
              else if (states['input_boolean.etat_portail'].state == 'off' && states['timer.timer_portail'].state == 'active')
                return 'rgba(255,140,0,1.0)';
              else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.timer_portail'].state == 'idle')
                return 'rgba(255,0,0,1.0)';
              else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.timer_portail'].state == 'active')
                return 'rgba(255,140,0,1.0)';
            ]]]
        - animation: |
            [[[
              if (states['timer.timer_portail'].state == 'active')
                return 'blink 2s ease infinite';
            ]]]
      tap_action:
        action: call-service
        service: script.1716210430263
      hold_action:
        action: none
        path: test
        cards: []

Pour le moment, j’ai l’impression que le script n’est jamais déclenché quand je clique sur le bouton alors que le nom du service me semble ok (l’auto-completion remplace le nom par l’ID du script je pense).
Je vais laisser refroidir un peu et m’y remettre demain… peut etre que je trouverai mon erreur.

Bonjour,

Pour moi c’est vraiment le nom du script qui coince. Tu devrais avoir ça :

      tap_action:
        action: call-service
        service: script.scriptportail
      hold_action:
        action: none

Je te remets le script utilisé pour mon exemple :

alias: essai_portail
sequence:
  - service: timer.start
    metadata: {}
    data: {}
    target:
      entity_id: timer.essai_timer
  - if:
      - condition: state
        entity_id: input_boolean.position_portail
        state: "on"
    then:
      - service: input_boolean.turn_off
        metadata: {}
        data: {}
        target:
          entity_id:
            - input_boolean.position_portail
    else:
      - service: input_boolean.turn_on
        metadata: {}
        data: {}
        target:
          entity_id:
            - input_boolean.position_portail
mode: single

Sinon, là tu as fait un copié-collé du tableau de bord et l’indentation n’est pas correcte. Tu devrais supprimer complétement la carte ajoutée et recommencer en ajoutant une carte manuelle et en copiant le code directement dans cette carte manuelle :



1 « J'aime »

@Cleya En effet j’avais un problème d’indentation, mais je ne sais pas où car mon fichier était correct. Cette fois je l’ai passé dans un yaml checker avant de coller le code.
Pour le nom du script, lorsque j’utilise script.scriptportail, ça ne fonctionne pas. Lorsque j’utilise l’ID oui. Et je crois savoir pourquoi. A un moment ou un autre, j’ai eu un doublon entre un nom de script et un nom d’entité et je pense que c’est pour ça que l’auto completion me suggère d’utiliser l’ID et pas le nom.
Donc maintenant, si je comprends bien, il me reste à modifier les actions du script pour actionner mon portail et ce sera bon ?

Il faudrait que tu mettes une copie du code de la carte. Pour le script, supprime le et refais en un en le nommant « script_portail »

la carte

views:
  - title: TEST
    cards:
      - type: custom:button-card
        aspect_ratio: 3/1
        entity: input_boolean.position_garage
        name: Garage
        icon: |
          [[[
            if (states['input_boolean.etat_portail'].state == 'off')
              return 'mdi:garage';
            else if (states['input_boolean.etat_portail'].state == 'on')
              return 'mdi:garage-open';
          ]]]
        show_label: true
        label: |
          [[[
            if (states['input_boolean.etat_portail'].state == 'off' && states['timer.minuteur_portail'].state == 'idle')
              return '<font color= "green"><b>fermé</font>';
            else if (states['input_boolean.etat_portail'].state == 'off' && states['timer.minuteur_portail'].state == 'active')
              return '<font color= "orange"><b>fermeture</font>';
            else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.minuteur_portail'].state == 'idle')
              return '<font color= "red"><b>ouvert</font>';
            else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.minuteur_portail'].state == 'active')
              return '<font color= "orange"><b>ouverture</font>';
          ]]]
        styles:
          name:
            - font-size: 0.9em
            - justify-self: middle
            - align-self: end
            - color: rgba(255,255,255,0.6)
          card:
            - background-color: rgba(64,64,64,0.8)
            - box-shadow: 4px 4px 4px 0px rgba(32,32,32,0.5)
            - border: 2px rgba(211,211,211,1.0) outset
          icon:
            - border-radius: 50%
            - border: none
            - box-shadow: 0px 0px 5px 5px rgba(0,128,0,0.5)
            - box-shadow: |
                [[[
                  if (states['input_boolean.etat_portail'].state == 'off' && states['timer.minuteur_portail'].state == 'idle')
                    return '0px 0px 5px 5px rgba(0,128,0,0.5)';
                  else if (states['input_boolean.etat_portail'].state == 'off' && states['timer.minuteur_portail'].state == 'active')
                    return '0px 0px 5px 5px rgba(255,140,0,0.5)';
                  else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.minuteur_portail'].state == 'idle')
                    return '0px 0px 5px 5px rgba(255,0,0,0.5)';
                  else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.minuteur_portail'].state == 'active')
                    return '0px 0px 5px 5px rgba(255,140,0,0.5)';
                ]]]
            - background-color: |
                [[[
                  if (states['input_boolean.etat_portail'].state == 'off' && states['timer.minuteur_portail'].state == 'idle')
                    return 'rgba(0,128,0,0.5)';
                  else if (states['input_boolean.etat_portail'].state == 'off' && states['timer.minuteur_portail'].state == 'active')
                    return 'rgba(255,140,0,0.5)';
                  else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.minuteur_portail'].state == 'idle')
                    return 'rgba(255,0,0,0.5)';
                  else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.minuteur_portail'].state == 'active')
                    return 'rgba(255,140,0,0.5)';
                ]]]
            - width: 60px
            - height: 60px
            - color: |
                [[[
                  if (states['input_boolean.etat_portail'].state == 'off' && states['timer.minuteur_portail'].state == 'idle')
                    return 'rgba(0,255,0,1.0)';
                  else if (states['input_boolean.etat_portail'].state == 'off' && states['timer.minuteur_portail'].state == 'active')
                    return 'rgba(255,140,0,1.0)';
                  else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.minuteur_portail'].state == 'idle')
                    return 'rgba(255,0,0,1.0)';
                  else if (states['input_boolean.etat_portail'].state == 'on' && states['timer.minuteur_portail'].state == 'active')
                    return 'rgba(255,140,0,1.0)';
                ]]]
            - animation: |
                [[[
                  if (states['timer.minuteur_portail'].state == 'active')
                    return 'blink 2s ease infinite';
                ]]]
        tap_action:
          action: call-service
          service: script.script_portail
        hold_action:
          action: none

le script nommé comme demandé

alias: script_portail
sequence:
  - service: timer.start
    metadata: {}
    data: {}
    target:
      entity_id: timer.minuteur_portail
  - if:
      - condition: state
        entity_id: input_boolean.etat_portail
        state: "on"
    then:
      - service: input_boolean.turn_off
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.etat_portail
    else:
      - service: input_boolean.turn_on
        metadata: {}
        data: {}
        target:
          entity_id: input_boolean.etat_portail
mode: single

A priori l’indentation est maintenant OK (sur ton ancien code tout était décalé à partir de la 8ème ligne : icon: |…)
Tu fais toujours une copie du tableau de bord et pas juste une copie du code de la carte. Là c’est pas génant car il n’y a qu’une seule carte sur ton tableau de bord TEST mais ça risque de devenir plus problématique si d’autres cartes sont ajoutées.
Pour copier le code d’une carte (et pas celui du tableau de bord), il faut cliquer sur le crayon en haut à droite et ensuite cliquer sur « MODIFIER » (en bleu) en dessous de la carte dont tu souhaites copier le code (c’est la même chose pour faire des modifications sur le code). Toi, tu cliques sur le crayon puis ensuite sur les trois points en haut à droite puis tu choisi « Editeur de configuration ». Ca c’est fait pour modifier le tableau de bord et pas une carte. Tes problèmes d’indentation viennent de là.

En principe, avec les modifications faites, la carte devrait fonctionner correctement.

Yes; Il n’y a que cette carte donc je n’ai pas selectionné uniquement le code de la carte, de sorte à tout montrer justement.

Il me reste à déclencher l’action du contact sec du portail, car dans l’état je ne joue que l’animation de l’icone et le changement de son état.

Effectivement, le but étant de piloter le portail (à priori) :grin: il te faut donc modifier le script en ajoutant dans les actions l’impulsion sur ton relai.

Je ferai un test ce soir avec les composants connectés et je ferai un retour ici :slight_smile: Merci

Ca devrait bien se passer normalement, il faudra aussi que tu chronomètres le temps que met ton portail pour s’ouvrir de façon à adapter ton timer

oui ça va le faire je n’ai pas de doute. J’ai deja le temps d’ouverture du portail (45s) vu que j’utilise déjà une application qui me permet de le piloter. Mais elle n’est plus maintenue et c’est ce qui m’a poussé vers HA :slight_smile:

Bonjour, ça fonctionne, la carte de ton côté ?