Volets roulants inverser montée/descente

Vous venez d’installer un module pour contrôler la montée et la descente de vos volets roulants en suivant la documentation mais pas de chance, arrivé dans Home Assistant tout est inversé.

2 solutions : vous en avez fait qu’un est vous reprenez le câblage ou comme moi vous étiez sur un autre hub domotique et vous avez plusieurs volets roulants à modifier, pas de panique, quelques lignes dans Home Assistant et le problème sera réglé !

Pour dire vrai il n’est pas possible de modifier la montée/descente par contre on peut créer un volet virtuel qui va piloter le volet réel et tout ça simplement.

Tout se passe dans configuration.yaml :

cover: 
  - platform: template
    covers:
      volet_cuisine_invertiert:
        friendly_name: 'Volet Cuisine'
        unique_id: volet_cuisine_template
        position_template: "{{ 100 - (state_attr('cover.volet_cuisine_level_3', 'current_position') | int) }}"
        open_cover:
          service: cover.close_cover
          data:
            entity_id: cover.volet_cuisine_level_3
        close_cover:
          service: cover.open_cover
          data:
            entity_id: cover.volet_cuisine_level_3
        stop_cover:
          service: cover.stop_cover
          data:
            entity_id: cover.volet_cuisine_level_3
        set_cover_position:
          service: cover.set_cover_position
          data_template:
            entity_id: cover.volet_cuisine_level_3
            position: "{{ 100 - position }}"

Explication :
C’est un template pour le volet de la cuicine :p
On crée un nouveau cover, virtuel qui va s’appeler volet_cuisine_invertiert
On récupère ensuite la position du volet par rapport au volet réel qui se nomme dans cet exemple cover.volet_cuisine_level_3
ensuite on indique se qu’on fait pour les différents services :

  • open_cover : Pour ouvrir le volet virtuel il faut en fait fermer le volet physique, donc dans l’exemple en appel le service de fermeture : service: cover.close_cover et on spécifie pour quel entité (le volet physique) entity_id: cover.volet_cuisine_level_3
  • close_cover : Identique mise à part bien sur que là on ouvre le volet physique
  • stop_cover : pour arrêter le volet, là rien ne change
  • set_cover_position nous permet d’utiliser le slider pour les volets, les ouvrir au 3/4 par exemple

Une fois que c’est fait, redémarrer HA et vous devriez avoir un volet supplémentaire, Dans votre vue c’est celui ci qu’il faut utiliser : cover.volet_cuisine_invertiert (dans l’exemple)

voila la vue du volet virtuel et physique

Il faut faire cette manipulation pour chaque volet, un exemple avec 2 volets :

cover: 
  - platform: template
    covers:
      volet_cuisine_invertiert:
        friendly_name: 'Volet Cuisine'
        unique_id: volet_cuisine_template
        position_template: "{{ 100 - (state_attr('cover.volet_cuisine_level_3', 'current_position') | int) }}"
        open_cover:
          service: cover.close_cover
          data:
            entity_id: cover.volet_cuisine_level_3
        close_cover:
          service: cover.open_cover
          data:
            entity_id: cover.volet_cuisine_level_3
        stop_cover:
          service: cover.stop_cover
          data:
            entity_id: cover.volet_cuisine_level_3
        set_cover_position:
          service: cover.set_cover_position
          data_template:
            entity_id: cover.volet_cuisine_level_3
            position: "{{ 100 - position }}"
  - platform: template
    covers:
      volet_salon_invertiert:
        friendly_name: 'Volet Salon'
        unique_id: volet_salon_template
        position_template: "{{ 100 - (state_attr('cover.volet_salon_level_2', 'current_position') | int) }}"
        open_cover:
          service: cover.close_cover
          data:
            entity_id: cover.volet_salon_level_2
        close_cover:
          service: cover.open_cover
          data:
            entity_id: cover.volet_salon_level_2
        stop_cover:
          service: cover.stop_cover
          data:
            entity_id: cover.volet_salon_level_2
        set_cover_position:
          service: cover.set_cover_position
          data_template:
            entity_id: cover.volet_salon_level_2
            position: "{{ 100 - position }}"

25 Comments

  1. Michael COX

    Omg merci à vous car je devenais fou XD je viens d’installé un interrupteur pour tester, j’avais câblé dans le mauvais sens, mais l’invention sur l’application fonctionne mais les lampe sont totalement décalée après (bouton de droite allume celle de gauche par exemple –‘, mais fais la bonne action XD)

    J4ai recâblé convenablement et puis… baaa google home me fait pareil… mais la en inversant avec l’application la demande de descente et montée par HA fait la bonne action et allume les bonne lampe, puis arrive google home qui lui ferme quand je veux ouvrir…

    Votre solution va me sauver je vais tout de suite la mettre en place ^^

    • Tof

      Bonjour,
      C’est vrai que ce n’est pas facile quand on commence dans home Assistant.
      comme son nom l’indique configuration.yaml permet de configurer Home Assistant.

      Les développeurs font pas mal de mise à jour pour qu’on est de moins en moins besoin d’accéder directement à ce fichier mais pour le moment il faut faire avec.

      je vous propose d’aller voir ce tuto : https://les-tutos-du-tof.fr/ha-file-editor/ il permet d’installer File Editor qui permet de modifier les fichiers de HA directement depuis l’interface.

      Attention, avant de modifier configuration.yaml je préconise de faire un copier/coller du contenu et de le sauvegarder quelque part et après avoir modifier le fichier il faut aller dans « Outils de Développement » et cliquer sur vérifier la configuration !

      je viens de faire ce petit tuto, en espérant que ça vous aidera : https://les-tutos-du-tof.fr/modifier-configuration-yaml/

  2. phil

    Bonjour et merci pour ce tuto!
    par contre j’ai un soucis, j’ai modifié configuration.yaml suivant vos indications mais je n’arrive pas a voir mon volet virtuel ni dans appareils, ni dans Entités ( ni dans entrées d’ailleurs)
    je suis tout nouveau dans le monde HA
    pouvez vous me dire ce que j’ai loupé

    cover:
    – platform: template
    covers:
    mon_petit_volet:
    friendly_name: ‘Mon Petit Volet’
    position_template: « {{ 100 – (state_attr(‘cover.roller_shutter_2’, ‘current_position’) | int) }} »
    open_cover:
    service: cover.close_cover
    data:
    entity_id: cover.roller_shutter_2
    close_cover:
    service: cover.open_cover
    data:
    entity_id: cover.roller_shutter_2
    stop_cover:
    service: cover.stop_cover
    data:
    entity_id: cover.roller_shutter_2
    set_cover_position:
    service: cover.set_cover_position
    data_template:
    entity_id: cover.roller_shutter_2
    position: « {{ 100 – position }} »

  3. xavier

    Bonsoir, impossible pour moi de faire fonctionner tout cela ! je suis novice aussi …
    j’ai edité configuration.yaml et fait les modifs a la suite des quelques ligne de base mais rien ne se produit !!! meme apres reboot !
    voici le fichier config complet ! ca a l’air court non ?

    si un petit coup de main etait possible svp

    # Loads default set of integrations. Do not remove.
    default_config:

    # Load frontend themes from the themes folder
    frontend:
    themes: !include_dir_merge_named themes

    automation: !include automations.yaml
    script: !include scripts.yaml
    scene: !include scenes.yaml

    cover:
    platform: template
    covers:
    volet_salon_invertiert:
    friendly_name: 'Volet Salon'
    position_template: "{{ 100 - (state_attr('cover.volet_salon_level_2', 'current_position') | int) }}"
    open_cover:
    service: cover.close_cover
    data:
    entity_id: cover.volet_salon_level_2
    close_cover:
    service: cover.open_cover
    data:
    entity_id: cover.volet_salon_level_2
    stop_cover:
    service: cover.stop_cover
    data:
    entity_id: cover.volet_salon_level_2
    set_cover_position:
    service: cover.set_cover_position
    data_template:
    entity_id: cover.volet_salon_level_2
    position: "{{ 100 - position }}"

    • Tof

      Bonjour,
      Alors le copier/coller a du casser l’indentation mais il faut bien respecter les espaces en début de ligne !
      On est bien d’accord que cover.volet_salon_level_2 correspond au nom de l’interrupteur qui est physiquement au mur ?
      Et il te manque un tiret en seconde ligne :

      
      cover:
         - platform: template
          covers:
            volet_salon_invertiert:
              friendly_name: 'Volet Salon'
              position_template: "{{ 100 - (state_attr('cover.volet_salon_level_2', 'current_position') | int) }}"
              open_cover:
                service: cover.close_cover
                data:
                  entity_id: cover.volet_salon_level_2
              close_cover:
                service: cover.open_cover
                data:
                  entity_id: cover.volet_salon_level_2
              stop_cover:
                service: cover.stop_cover
                data:
                  entity_id: cover.volet_salon_level_2
              set_cover_position:
                service: cover.set_cover_position
                data_template:
                  entity_id: cover.volet_salon_level_2
                  position: "{{ 100 - position }}
      
  4. xavier

    Bonjour, merci de prendre le temps de me répondre …
    J’ai corrigé le fichier car je n’avais pas fait gaffe au nom qui est dans HA sur le cover d’origine (cover.volet_salon_volets) … mais rien ne change pour le moment !!! je ne comprends pas

    cover:
    – platform: template
    covers:
    volet_salon_virtuel:
    friendly_name: ‘Volet Saloon’
    position_template: « {{ 100 – (state_attr(‘cover.volet_salon_volets’, ‘current_position’) | int) }} »
    open_cover:
    service: cover.close_cover
    data:
    entity_id: cover.volet_salon_volets
    close_cover:
    service: cover.open_cover
    data:
    entity_id: cover.volet_salon_volets
    stop_cover:
    service: cover.stop_cover
    data:
    entity_id: cover.volet_salon_volets
    set_cover_position:
    service: cover.set_cover_position
    data_template:
    entity_id: cover.volet_salon_volets
    position: « {{ 100 – position }} »

  5. xavier

    re hello …
    Je viens de comprendre que je masquais les entité sans pièces !!!
    J’arrive a visualiser mes covers virtuels … merci beaucoup.

    Cependant cela ne règle pas mes problèmes avec mes inter de volets wiser intégré en zigbee natif sur HA.
    pas simple j’ai l’impression sans utiliser la passerelle wiser … que je possède et fonctionne très bien, mais je voulais m’affranchir de celle-ci.

    Encore merci pour ton aide précieuse et tes tutos.

    Amicalement Xavier.

  6. xavier

    Mon besoin étant avec ma config, car mes inter sont montés et câblés dans le bon sens j’ai juste besoin d’inverser juste leur état !
    Le bouton monté et descendre fonctionne bien (dans le bons sens d’origine), la position erronée du volet bloque la commande montée car il pense que le volet est déjà en position haute.

    Une idée ?

    • Tof

      Dans ce cas le problème n’est pas le même.
      Si les boutons montée descente sont dans le bon sens c’est que la position n’est pas connue au niveau du bouton.
      Il faut savoir que le matériel que tu as ne va pas forcément remonter les mêmes infos en fonction de si tu utilises la box prévue pour, si tu utilises une clé zigbee.
      Il y a même des différences avec la clé Zigbee si tu l’utilise avec ZHA ou Zigbee2mqtt.
      C’est un peu compliqué, je te l’accorde.
      Il existe des sites qui permettent de savoir quelle remontée il y’a en fonction de ZHA ou Zigbee2mqtt

  7. dimitri

    Bonjour,
    J’arrive à créer et afficher le volet roulant virtuel dans mon tableau de bord mais je n’arrive pas à le mettre dans le groupe cuisine, quand je clique sur les réglages du volet on me dit « Cette entité (« cover.volet_cuisine_bis ») n’a pas d’identifiant unique, par conséquent ses paramètres ne peuvent pas être gérés depuis l’interface utilisateur. »

    En vous remerciant

    • Tof

      Salut,

      Il faut ajouter la ligne unique_id: dans le template sous la ligne friendly_name par exemple.

      
      cover: 
        - platform: template
          covers:
            volet_cuisine_invertiert:
              friendly_name: 'Volet Cuisine'
              unique_id: volet_cuisine
      
  8. Romain

    Bonjour,
    Mes volets sont connectés à la base avec SmartLife / Tuya. et mes volets Loratap Zigbee étaient inversés.
    j’ai suivi à la lettre la configuration.
    Quand le volet est ouvert, et que j’appuie sur la descente, il descend pendant une demi seconde et remonte.
    Avec SmartLife, je referme le volet. Puis dans home assistant je le rouvre, il monte pendant une demi seconde et se referme.
    Selon la position du volet, il arrive qu’une montee ou une descente obéit à l’ordre mais jamais les 2.
    Par contre quand je joue avec le % d’ouverture du volet ca marche parfaitement.
    C’est donc les commandes open et close qui sont défectueuses.

    En position basse, l’etat donne:
    current_position: 0
    device_class: shutter
    friendly_name: Volet xxxxx new
    supported_features: 15

    en position haute:
    current_position: 100
    device_class: shutter
    friendly_name: Volet xxxxx new
    supported_features: 15


    cover:
    - platform: template
    covers:
    volet_xxxxx_inverse:
    friendly_name: 'Volet xxxxx new'
    unique_id: volet_cuisine_template
    position_template: "{{ 100 - (state_attr('cover.volet_bureau_xxxxx_rideau', 'current_position') | int) }}"
    open_cover:
    service: cover.close_cover
    data:
    entity_id: cover.volet_bureau_xxxxx_rideau
    close_cover:
    service: cover.open_cover
    data:
    entity_id: cover.volet_bureau_xxxxx_rideau

    stop_cover:
    service: cover.stop_cover
    data:
    entity_id: cover.volet_bureau_xxxxx_rideau
    set_cover_position:
    service: cover.set_cover_position
    data_template:
    entity_id: cover.volet_bureau_xxxxx_rideau
    position: "{{ 100 - position }}"

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Back to Top