Home Assistant : DIY piloter ses portes de garage ou de portail avec un ESP32-POE

Après l’article sur les volets, nous abordons le sujet des portes de garage. En cas de clé égarée, si le petit a oublié ses clés, ou encore si belle-maman doit venir à l’imprévu, on pourra contrôler tout ceci avec Home Assistant. En plus de cela, nous pourrons bénéficier d’un retour d’état de la porte. C’est surtout pour cela que j’ai décidé de domotiser mes portes, car il arrive parfois qu’elles se réouvrent toutes seules. Il m’est déjà arrivé de partir sans avoir contrôlé la fermeture.
Je cherche encore la raison de ce souci, même après avoir réparé l’une des deux portes. Cela me permettra également d’avoir une surveillance en cas d’absence prolongée. Nous nous focaliserons principalement sur les portes de garage, bien que ce système puisse également être appliqué à un portail. Les prérequis et les besoins en matériel restent les mêmes.

Piloter porte de garage HA

Pré requis

Pour piloter les moteurs de vos portes ou portails, il est essentiel de vérifier que la carte électronique de contrôle dispose d’un contact sec (aussi appelé un contact libre de potentiel). Cela veut dire qu’il n’y a aucune tension sur les bornes, il faut juste que le circuit se ferme un court moment pour l’activer.
Pour obtenir cette information, il est nécessaire de consulter le manuel, car ce n’est pas toujours indiqué comme contact sec. Voici un exemple pour mes moteurs de garage Somfy GDK 3000, ainsi que 2 portails que des amis ont souhaités domotiser. L’un d’eux est un portail coulissant de chez Nice modèle SLH 400 et le second un SCS SG2 à double battant. Comme vous pouvez le constater, pour certains, il n’est pas clairement spécifié qu’il s’agit d’un contact sec. Dans le cas de mon garage, je m’en suis douté, car le système de clé va simplement faire un contact en tournant la clé pour fermer le circuit. Pour le portail Nice, il est indiqué « Contact normalement ouvert », et pour le SCS, c’est clairement spécifié.

Avant d’aller plus loin, il est facile de tester le fonctionnement. Une fois que vous avez identifié correctement les bornes, il suffit de créer un pont entre les deux avec un morceau de fil. Par exemple, pour Somfy, j’ai relié les bornes 3 et 1, et la porte s’est ouverte. Aucun besoin de visser le fil, un simple contact suffit… et on retire.

Quel matériel ?

Il existe plusieurs options, que ce soit les kits relais avec capteur de porte ou la fabrication maison.

Les kits

Les kits relais sont assez rares, et peu d’entre eux sont compatibles avec Home Assistant. Autant dire que, sur les sites français, je n’ai rien trouvé. Ce qui revient le plus souvent, c’est ce kit ZigBee sur Alixpress ou encore sur Amazon, qui comprend tout et fonctionne avec HA.

Un ami a pris ce kit, mais sur HA, il n’est pas reconnu comme un cover mais un switch. Il sera nécessaire de faire ce changement au préalable pour disposer des boutons « ouvrir » ou « fermer ». Nativement, HA peut effectuer cela sans ajouter un bout de code. Autre souci, si vous utilisez la télécommande originale de votre porte, l’état va bien se mettre à jour, mais pas les boutons. Sur un cover, les boutons se griseront en fonction de l’état ; si la porte est fermée, le bouton de fermeture deviendra grisé.

Le semi fait maison

Lors de mes recherches, j’ai trouvé le module Shelly Uni, compatible avec HA. Il fonctionne en Wi-Fi, il peut piloter 2 contact sec, relier les capteurs d’ouverture, mais aussi des capteurs de température. Par contre, je ne l’ai pas testé, il est possible qu’il remonte comme switch et non cover, mais comme pour le module ZigBee il sera possible de le convertir.
Il vous faudra ajouter un boitier, qui n’est pas en vente, voir pour l’imprimer vous-même avec ce modèle ou tout autre boitier comme ici.

Le fait maison

Finalement, j’ai opté pour la solution « fait maison ».
Après des recherches, j’ai découvert que les ESP32 ou 8266 sont vraiment capables de réaliser de nombreuses fonctions. Comme nous l’avons vu, un contact sec se résume à un simple fil en contact, donc un relais basique fera l’affaire.

Ayant 2 portes de garage, j’ai trouvé le code parfait pour ESPHome avec Home Assistant, disponible au lien suivant, accompagné du schéma de câblage.

La seule différence avec ce schéma, c’est que l’on ne va pas avoir besoin de relier le +3.3v à la place il sera pour le capteur de température, seules les sorties des relais seront nécessaires. A la différence des modules ZigBee ici, nous aurons besoin d’une seule alimentation électrique pour les 2 portes. Cependant, j’ai trouvé une solution encore meilleure.

En refaisant l’infrastructure réseau de ma maison et en procédant au tirage de câbles Ethernet, j’ai profité de l’occasion pour approfondir mes recherches pour avoir un ESP32 Ethernet et POE. J’ai fini par trouver la carte parfaite : Olimex ESP32-POE. En plus, elle est compatible avec ESPHome. Il existe plusieurs versions, mais pour mes autres projets, où le but est d’utiliser le port Ethernet, j’ai pris une ESP32-POE-EA.
J’ai acheté les cartes directement sur le site, la réception a été rapide.

Pour notre projet, il suffira alors que d’une prise RJ45… car la carte et les relais seront alimentés par le POE avec le 5V de la carte.

Liste du matériel nécessaire

  • Un ESP32 NodeMCU avec le code d’origine ou un ESP32-POE avec le code qui sera donné plus bas ;
  • Une carte avec un ou deux relais ;
  • Des capteurs d’ouverture de porte magnétique et filaire. Pour cela, je suis parti sur ce modèle très solide et étanche ;
  • Des PCB ;
  • Des bornier à visser si vous souhaiter un montage propre. Il sera tout à fait possible de vous connectez directement sur le relai ;
  • (Optionnel) Un capteur de température DHT11.

Programmation

Comme indiqué dans la liste du matériel, j’en ai profité pour ajouter un capteur de température pour mon garage. Antant profiter de la présence d’un ESP32 pour luiajouter des fonctionnalités. On va commencer par injecter le code dans l’ESP32. Sur Home Assistant, aller sur ESPHome puis sur New Device.

Cliquez sur Continuer et indiquer le nom que vous souhaitez.

Sélectionnez le modèle de votre ESP et dans la fenêtre suivante, cliquez sur Skip, nous n’avons pas besoin d’encrypter le projet.

Cliquez maintenant sur Edit.
Collez le code ci-dessous pour la version avec un ESP32-POE, sinon collez le code indiqué plus haut dans le projet originale.

Si vous ne souhaitez pas mettre un capteur de température, supprimez tout ce qui est en bas à partir de sensor (Ligne 115 sur un éditeur). Sur ce capteur, on peut remarquer que j’ai ajouté un offset de -2.0 (c’est en degré). En effet les capteurs DHT11 ou 22 ne sont pas très fiables. J’ai mesuré la température avec un autre capteur efficace et j’ai appliqué une correction automatiquement. Avec HA, vous aurez directement la bonne température. Pensez aussi à modifier les adresses IP de votre projet, comme la passerelle et le masque de sous réseau.

substitutions:
  disp_name: Porte-garage

esphome:
  name: porte-garage

esp32:
  board: esp32-poe
  framework:
    type: arduino
    
ethernet:
  type: LAN8720
  mdc_pin: GPIO23
  mdio_pin: GPIO18
  clk_mode: GPIO17_OUT
  phy_addr: 0
  power_pin: GPIO12
  manual_ip:
    static_ip: 192.168.1.31
    gateway: 192.168.1.1
    subnet: 255.255.255.0
    dns1: 1.1.1.1

logger:
api:
ota:

switch:
  - platform: gpio
    name: ${disp_name} Relay1
    pin:
      number: GPIO5
      inverted: True
    id: relay1
    restore_mode: ALWAYS_OFF 
  - platform: gpio
    name: ${disp_name} Relay2
    pin:
      number: GPIO15
      inverted: True
    id: relay2
    restore_mode: ALWAYS_OFF 
  - platform: restart
    name: ${disp_name} Restart

binary_sensor:
  - platform: gpio
    name: ${disp_name} Reed1
    pin: 
      number: GPIO16
      mode: INPUT_PULLUP
    filters:
      - delayed_on: 100ms
      - delayed_off: 100ms
    id: reed_switch1
    internal: true
  - platform: gpio
    name: ${disp_name} Reed2
    pin: 
      number: GPIO13
      mode: INPUT_PULLUP
    filters:
      - delayed_on: 100ms
      - delayed_off: 100ms
    id: reed_switch2
    internal: true

    
cover:
  - platform: template
    device_class: garage
    name: ${disp_name} Porte 1
    id: template_cover1
    lambda: |-
      if (id(reed_switch1).state) {
        return COVER_OPEN;
      } else {
        return COVER_CLOSED;
      }
    open_action:
      - switch.turn_on: relay1
      - delay: 0.5s
      - switch.turn_off: relay1
    close_action:
      - switch.turn_on: relay1
      - delay: 0.5s
      - switch.turn_off: relay1      
    stop_action:
      - switch.turn_on: relay1
      - delay: 0.5s
      - switch.turn_off: relay1      
  - platform: template
    device_class: garage
    name: ${disp_name} Porte 2
    id: template_cover2
    lambda: |-
      if (id(reed_switch2).state) {
        return COVER_OPEN;
      } else {
        return COVER_CLOSED;
      }
    open_action:
      - switch.turn_on: relay2
      - delay: 0.5s
      - switch.turn_off: relay2
    close_action:
      - switch.turn_on: relay2
      - delay: 0.5s
      - switch.turn_off: relay2
    stop_action:
      - switch.turn_on: relay2
      - delay: 0.5s
      - switch.turn_off: relay2
sensor:
  - platform: dht
    pin: 
      number: GPIO2
    model: DHT11  
    temperature:
      name: "Temperature Garage"
      filters: 
        - offset: -2.0
    update_interval: 60s

Avant d’injecter le code, vérifiez-le en cliquant sur les 3 points puis Validate. Le code est validé et vous saurez sûr qu’il sera bon.

Maintenant, branchez en USB votre ESP32 sur votre serveur HA. Si vous utilisé Proxmox, il faudra ajouter le port USB dans le matériel, connectez l’ESP32 et il faudra éteindre et relancez HA pour qu’il soit détecté. Cliquez sur les 3 points et Install, choisissez Plug into the computer running ESPHome.

Patientez le temps de la compilation et de l’injection de celui-ci. Vous aurez une erreur si le capteur DHT n’est pas branché, rien de bloquant. Une fois cela fait, allez sur Paramètre et Appareil et Service. Vous devriez avoir une proposition pour configurer votre projet.

Voilà, notre ESP32 est programmé et nous avons nos boutons pour piloter les portes et le capteur de température.

Assemblage

Voici un schéma pour tout relier. Le 5v sera pour les relais et le 3,3v pour le capteur de température.
Plan montage garage

Comme indiqué plus haut, j’ai souhaité faire un montage propre avec des borniers à viser. Avec un PCB, j’ai monté 4 borniers pour y relier les capteurs d’ouverture et les sorties pour le contact sec des 2 portes.

Pour tout rassembler dans un même boitier, j’ai modélisé et imprimé celui-ci. Le boitier est disponible au lien suivant. Celui de la photo est différent, j’avais oublié de faire les ouïes d’aération et j’avais déjà imprimé le boitier. Donc, j’ai les faites sur le couvercle. Cependant, l’ESP32-POE chauffe un peu et a légèrement déformé le haut de ma boîte. Il aurait donc été préférable d’avoir les ouïes en haut plutôt que sur le couvercle. De plus, le passage pour le port Ethernet a été corrigé, car il était initialement trop grand.
Voici le tout assemblé dans la boite. Pour le montage des différentes cartes, j’ai utilisé les vis suivante.

Pour le raccordement, le P indique porte et le C le capteur d’ouverture.

Installation dans le garage

Pour les capteurs de portes, ils ont été positionnés en haut. Pensez à faire un test afin de vous assurer que l’aimant ne sera pas trop loin du capteur. Sur la seconde photo, on peut voir ma gaine qui va vers les 2 portes pour les capteurs et fini en Y.

Pour le raccordement du contact sec sur le moteur, là aussi, on va devoir passer un tube jusqu’aux 2 moteurs.
Montage pour piloter garage avec HAPour terminer, j’ai installé une prise RJ45 au centre de mes 2 portes pour installer le boitier et raccorder le tout.
Boitier pour piloter garage avec HA

Les petits plus

Vous avis pris l’habitude sur les derniers articles de Home Assistant, je vous ai partagé des petites plus. Ici, je vais vous fournir un code complet pour avoir un Lovelace avec les icônes qui change de couleur selon l’état du capteur. Pour cela il vous faudra le module Card-Mod que vous pouvez installer depuis HACS. Dans le code ci-dessous il faudra juste remplacer le champ name par ce que vous souhaitez.

type: vertical-stack
cards:
  - square: false
    type: grid
    cards:
      - features:
          - type: cover-open-close
        type: tile
        entity: cover.porte_garage_porte_2
        vertical: false
        show_entity_picture: false
        name: Porte1
        card_mod:
          style: |
            .tile {
              {% if is_state(config.entity, 'closed') %}
                --tile-color: var(--green-color);
              {% else %}  
                --tile-color: var(--red-color);
              {% endif %}  
            }
      - features:
          - type: cover-open-close
        type: tile
        entity: cover.porte_garage_porte_1
        vertical: false
        show_entity_picture: false
        name: Porte2
        card_mod:
          style: |
            .tile {
              {% if is_state(config.entity, 'closed') %}
                --tile-color: var(--green-color);
              {% else %}  
                --tile-color: var(--red-color);
              {% endif %}  
            }
    columns: 2

Pour le deuxième petit plus, je ne l’ai pas testé, mais je souhaite partager une astuce proposée par un utilisateur. De nombreux utilisateurs intègrent Frigate à leur système de vidéosurveillance, et Home Assistant dispose d’un plugin pour les interconnecter, permettant la création d’automatisations entre les deux. Frigate propose une reconnaissance de personne ou d’objet. Par exemple, lorsqu’un utilisateur rentre chez lui, Frigate peut reconnaître une moto. Pour plus de sécurité, l’utilisateur a ajouté une seconde condition : si son smartphone est dans la zone définie dans Home Assistant, la porte de garage s’ouvre automatiquement. C’est particulièrement pratique pour les motards, et je parle en connaissance de cause.

Grâce à mon petit écran de contrôle, je peux maintenant piloter les portes depuis la maison sans avoir besoin de chercher mes clés.

HA et garage

Si vous avez une alarme avec Home Assistant, vous pouvez ajouter ces capteurs dans la détection. Sur mon HA (comme vu dans un article précédent), j’ai créé un bouton absent pour mon chauffage. Ce bouton me sert aussi de détection avec mes capteurs de fenêtre et j’ai ajouté les capteurs de porte de garage. Dans une nouvelle automatisation, j’ai créé une notification sur mon portable si l’un des capteurs passe en ouvert si le mode absent est activé.

Voila, c’est terminé pour aujourd’hui.