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 contrôleur choisi est un Wemos D1 Mini (Wi-Fi et seulement quelques euros);
- Les détections d’ouverture / fermeture se font avec des détecteurs magnétiques « reed » (comme pour les alarmes ou les volets de magasin);
- Le bouton est simulé par un relais 3V qui envoie une impulsion de 500ms.
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 :
- Noir : GND;
- Rouge : VCC (3V3 dans ce cas);
- Vert : Commande relais (D8);
- Mauve clair : Détecteur « fermé » (D1);
- Jaune : Détecteur « ouvert » (D2).
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