Un jour, en rentrant chez moi, j’actionne la télécommande de la porte de garage. Rien. La loose. Me voilà enfermé dehors.
Après avoir enfin réussi à entrer, avec la seconde télécommande. J’ai procéder à quelques tests : la pile est bonne, l’automate n’est pas planté et le reprogrammation de la télécommande ne fonctionne pas mieux.
Une nouvelle télécommande ?
Après recherche sur Internet, il s’avère que la télécommande est au même prix (un poil plus cher) qu’un … Raspberry !
Alors on sort le fer à souder et on apprend sur le tas à faire une carte relais pour le Raspberry. J’ai avant vérifié que ma porte me permettait de la commander de manière simple : ce genre d’automates possèdent des contacteurs qu’il suffit de court-circuiter pour déclencher une action sur la porte de garage.
Un début de domotique ?
Voilà donc l’idée : Un téléphone servant de télécommande via Wifi (la couche sécurité étant assurée par le WPA), un Raspberry hébergeant une application Web et qui commande des relais qui vont déclencher des actions au niveau de la porte de garage.
Le circuit
Via un port GPIO, on actionne un transistor qui va lui même actionner le relai. Le GPIO n’étant pas assez péchu pour actionner la bobine du relai. Le relai permet d’isoler le Raspberry des 24V délivrés par le moteur de la porte de garage. L’alimentation des transistor ce fait via la pin 5V du Raspberry.
On ajoute une diode pour protéger le transistor (on dit une diode de roue libre, je vous laisse voir par là) ainsi qu’une résistance de 1 kOhms pour éviter de pomper tout le courant du Raspberry à travers le transistor, c’est inutile.
Des headers et des borniers et nous voilà prêt.
A noté pour le choix des pins GPIO : on ne peut pas tous les choisir. Certaines ont un état haut lors du boot du Raspberry : une coupure de courant (ou un simple reboot du Pi) entrainerait l’ouverture (ou la fermeture) de la porte. Par exemple le pin 14 est aussi le pin TX du Pi. Et se pin se mettre verbeux au boot … J’ai choisi arbitrairement le port 15 et 18.
Voilà ce qu’il va falloir faire :
Le code
Vraiment tout simple. Je m’appuie sur Flask pour la partie Web et sur RPi.GPIO pour la commande des ports.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import sys import time from flask import Flask from flask import render_template try: import RPi.GPIO as GPIO except ImportError: from unittest.mock import MagicMock GPIO = MagicMock() GPIO.setmode(GPIO.BCM) GPIO.setup(15, GPIO.OUT) GPIO.setup(18, GPIO.OUT) app = Flask(__name__) @app.route("/") def index(): return render_template('index.html') @app.route("/open", methods=['POST']) def open(): GPIO.output(15, GPIO.HIGH) time.sleep(1) GPIO.output(15, GPIO.LOW) return '200' @app.route("/close", methods=['POST']) def close(): GPIO.output(18, GPIO.HIGH) time.sleep(1) GPIO.output(18, GPIO.LOW) return '200' if __name__ == "__main__": try: app.run(host="0.0.0.0", port=80) except (KeyboardInterrupt, Exception) as e: print(e) finally: print("exiting") GPIO.cleanup() sys.exit() |
Ce qui nous donne une UI de folie :
Au cas où cela intéresse du monde : le projet github.
Et une porte de garage intelligente
Une IP fixe et voilà un début de domotisation :). J’oublie assez souvent de fermer cette porte, un Cron devrait résoudre le problème.
Ça claque moyen quand on regarde comme ça, mais ouvrir sa porte avec son smartphone, ça permet de se la péter un peu.