Commande de porte de garage avec Tasmota et détection ouvert/fermé

Introduction

Ce post discute des parties matérielle et logicielle de la conception d’un contrôleur domotique pour porte de garage motorisée.

Une porte motorisée standard possède un bouton poussoir pour déclencher soit l’ouverture, l’arrêt ou la fermeture de la porte.

Nous souhaitons simuler ce bouton mais aussi connaitre l’état de la porte:

  • Fermée : Complètement abaissée
  • Ouverte : Complètement levée
  • Entre-ouverte : Ni abaissée ni levée (en mouvement, levée de quelques centimètres pour aérer, mais aussi bloquée dans une position indéterminée)
  • Erreur : Les capteurs d’ouverture et de fermeture détectent tous les deux la porte, c’est impossible.

Tout cela doit remonter dans Home Assistant et donc piloter la porte depuis le réseau Wi-Fi (à la maison ou dans l’allée) ou un VPN (à distance pour une tierce personne).

Très important, la porte doit pouvoir continuer de fonctionner normalement avec les télécommandes et le bouton poussoir (panne de la domotique ou du réseau / internet par exemple).

Aussi, afin de garder un module le plus simple et stable possible, je ne souhaite pas avoir plusieurs modules (zigbee ou Z-Wave par exemple) pour chaque opération (2 détecteurs, une impulsion).

Vue d’ensemble

Pour mettre en oeuvre notre module, nous aurons besoin de capteurs de fermetures, d’un relais pour l’impulsion, d’un contrôleur Wi-Fi (très simple puisqu’une prise électrique est à proximité), d’un réseau Wi-Fi au garage et finalement de Home Assistant comme serveur domotique.

Ce post ne rentre pas dans le détail du logiciel du contrôleur, mais sachez que ma version utilise un ancien code basé sur Homie, j’envisage de le remplacer par Tasmota avec un template 2 switches + 1 relay avec configuration de la pulsion à 500ms.

Voici pour le détail du matériel:

Le module Wemos D1 Mini est construit autour d’une puce ESP8266 qui assure la connectivité Wi-Fi mais aussi la compatibilité avec Arduino. La puce est également nativement supportée par Tasmota, aucune programmation n’est alors requise grâce à Tasmotizer qui se charge de la programmation / du flash.Zoom sur le matériel

Pins

La connexion du Wemos D1 Mini est très simple car nous n’avons besoin que de 3 pins de contrôle, une pin par composant + GND & 3V3:

  • Détection « porte ouverte » : pin D1 + GND
  • Détection « porte fermée » : pin D2 + GND
  • Relais 3V : pin D8 + GND + 3V3

Composants

Détecteurs magnétiques

Ces détecteurs fonctionnent avec 2 fils et sont comme des boutons. Ils réagissent lorsqu’un aimant est placé devant :

  • Aimant absent = Circuit ouvert « bouton relâché »;
  • Aimant présent = Circuit fermé « bouton pressé ».

Relais 3V / 5V

L’utilisation d’un relais permet d’isoler le moteur du microcontrôleur. Nous utilisons un relais 3V connecté au 3V3 du Wemos D1 Mini mais il est tout à fait possible d’utiliser un relais 5V.

Ces modules ont 2 borniers de 3 fils de chaque côté, sur l’image ci-dessous on retrouve:

  • A gauche, côté relais : au centre le COM (commun) et sur les côté les positions « NO » (Normally Open, ouvert par défaut) et « NC » (Normally Closed, fermé par défaut). Nous avons besoin des pins NO et COM;
  • A droite, côté puce : au centre le contrôle avec IN et de part et d’autre VCC (arrivée +3V) et GND (terre). Ces trois pins doivent être connectées pour alimenter et contrôler le relais.

Assemblage

J’avais assemblé ma version initiale (en réalité la V2, la V1 utilisait une Raspberry Pi) sur une breadboard, c’est très rapide pour tester, mais pas trop pour une installation stable.

En voici la photo après un bon moment de fonctionnement, les détecteurs d’ouvertures sont les fils blancs (test sur table).

Trouvez ci-dessous la version actuelle « V3 », à savoir basé sur un Wemos D1 Mini mais monté sur une perfboard. Le tout est soudé et câblé, à part le relais 3V qui est fixé par des colliers de serrage.

Le bornier bleu à 3 pins est pour les câbles des détecteurs d’ouvertures.

Voici les codes couleur, le seul câblage masqué est le GND qui est partagé par 2 fils :

Et le tout mis en place (pas top avec le tape de masquage mais ca fait le job).

 

Zoom sur le micrologiciel

Mon module utilise actuellement Homie for ESP8266 : https://homieiot.github.io/homie-esp8266/

Il s’agit d’un framework supportant nativement le MQTT et qui permet de développer ses propres firmware. La difficulté est donc assez haute pour débuter car il faut coder la logique. Pour ces raisons, je préfère ne pas documenter outre mesure mon existant, je préfère cibler à moyen terme Tasmota.

Tasmota

https://github.com/tasmota/tasmotizer/releases

https://tasmota.github.io/docs/devices/Wemos-D1-Mini/

Paramétrage du module

https://tasmota.github.io/docs/Buttons-and-Switches/

https://tasmota.github.io/docs/Commands/

https://tasmota.github.io/docs/Templates/

Template

Je partagerai ici mon template pour les 2 détecteurs magnétiques et le relais 3V.

 

Zoom  sur Home assistant

Côté Home Assistant, la configuration se fait au travers du serveur MQTT, nous déclarons donc :

Les 2 capteurs ouvert/fermé:

# Binary sensors (on / off) : Garage Opener
binary_sensor:
  - platform: mqtt # Garage Ouvert
    name: "Garage Ouvert"
    state_topic: "devices/5ccf7fd3b7d5/door-open/open"
    device_class: opening
  - platform: mqtt # Garage Fermé
    name: "Garage Fermé"
    state_topic: "devices/5ccf7fd3b7d5/door-close/open"
    device_class: opening

Le bouton:

# Switches : Garage opener, Furnace HASSIO, Eclairages
switch:
  - platform: mqtt # Garage - Door switch
    name: "Garage - Door switch"
    optimistic: false
    command_topic: "devices/5ccf7fd3b7d5/switch-door/on/set"

Pour l’affichage dans l’interface, un statut calculé sur base des 2 capteurs permet de connaitre le statut Ouvert / Fermé / Entre-ouvert / Erreur.

sensor:
  - platform: template
    sensors:
      # Garage door : Compute state based on open/close sensors
      # If both sensors are closed, that's impossible and raises an error
      calc_garage_state:
        friendly_name: "Porte de garage"
        value_template: >
          {% if (is_state('binary_sensor.garage_ferme', 'off') and is_state('binary_sensor.garage_ouvert', 'on')) %}
          Fermé
          {% elif (is_state('binary_sensor.garage_ferme', 'on') and is_state('binary_sensor.garage_ouvert', 'off')) %}
          Ouvert
          {% elif (is_state('binary_sensor.garage_ferme', 'on') and is_state('binary_sensor.garage_ouvert', 'on')) %}
          Entrouvert
          {% else %}
          Erreur
          {% endif %}
        icon_template: >
          {% if is_state('sensor.calc_garage_state', 'Fermé') %}
            mdi:garage
          {% elif is_state('sensor.calc_garage_state', 'Ouvert') %}
            mdi:garage-open
          {% elif is_state('sensor.calc_garage_state', 'Entrouvert') %}
            mdi:garage-alert
          {% else %}
            mdi:alert
          {% endif %}

Pour chaque statut une icône différente illustre le-dit statut.

 

Conclusion

Ce module s’est avéré très stable, l’utilisation à l’époque d’Homie a été grandement simplifiée avec l’arrivée (ou la découverte 😅) de Tasmota.

La partie Home Assistant est un peu plus délicate, mais cela dépend du résultat final que vous souhaitez.

TODOs:

  • Migrate from Homie to Tasmota
    • https://tasmota.github.io/docs/Commands/#pulsetime
  • Extend over I2C to detect cars in garage?
  • Translate to English

Post Author: Shut

Laisser un commentaire

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