PROJET AUTOBLOG


Idleman

source: Idleman

⇐ retour index

Mise à jour

Mise à jour de la base de données, veuillez patienter...

Raspberry PI ~ 23 : Créer une porte domotique (Partie 2)

lundi 28 juillet 2014 à 07:13

Ce post est le vingt troisième d’une liste de tutoriels sur le raspberry PI et l’arduino, cliquez ici pour accéder au sommaire ! :D

Salut bande de bras cassés syndiqués !!

Vu le temps j’espère que vous glandez sur les plages de rio (ou au minimum dans un petit bar à tapas de lacanau) mais je vais quand même tenter ma chance d’attraper un ou deux lecteurs désœuvrés pour la lecture de ce 23em tuto.

Aujourd’hui nous allons reprendre notre porte bluetooth du tuto 22 et en faire une vrai porte domotique.

Pour cela il vas nous falloir faire communiquer l’arduino de la porte et le raspberry pi de manière simple, rapide et sécurisée (on parles d’une porte, donc évitons qu’elle ne s’ouvre trop souvent ou pour de mauvaises raisons).

Une fois la porte relié à yana, tout devient possible :

Commençons par le traditionnel quart d’heure de honte (8 min en fait).

Dans la vidéo je suis un peu vague sur le “pourquoi ça marche dans un sens pas dans l’autre” il faut dire que c’est assez vague pour moi également (et aussi que je m’en fou un peu tant que j’arrive à mes fins :) ).

Le rpi accepte au maximum du 3.3v sur ses pins, or l’ardui envoi du 5v, pour faire communiquer les deux il faudrait donc normalement utiliser un convertisseur i2c (qu’on peux voir sur ma vidéo mais qui n’est pas obligatoire grâce a notre montage) mais une histoire de résistance de pull up manquante d’un côté permet de faire communiquer du rpi vers l’arduino sans qu’il n’y ai de dégâts (j’ai testé pour vous :p)

Je parle également vite fait de “channels” j’ignore si c’est le terme en vogue, en gros c’est une adresse de communication choisie (dans ce tuto 0x12) qui permet de superposer plusieurs communications sur des adresse différentes, le rpi peut ainsi communiquer avec plusieurs portes en communiquant sur le canal de chacune.

Le matériel

Le matériel est le même que pour le tuto précédent, il vous faut bien entendu votre porte (avec son atmega328 ou son arduino inclus) un rpi à brancher à votre porte et trois fils électriques standard (de préférence un bleu, un vert et un noir), c’est tout.

Le montage

Encore une fois, le branchement est similaire au tuto précédent, il vous faudra simplement relier le port I2C du raspberry PI au port I2C de l’arduino.

Comme je suis une grosse quiche, il se peut que j’ai inversé le sda et le scl sur le rpi, si c’est le cas, n’hésitez pas à intervertir (ça n’explosera pas dans tout les cas, au pire ça ne communiquera pas)

Pour cela suivez le schéma suivant :

Untitled Sketch 2_bb_faux

Le code du raspberry PI

Avant de mettre en place le code pour le rpi, il y a quelques manipulation à faire pour “activer”
la gestion i2c sur le rpi (désactivée par défaut, certainement pour un gain de perfs).

Ouvrez le fichier /etc/modprobe.d/raspi-blacklist.conf en édition

nano /etc/modprobe.d/raspi-blacklist.conf
commentez la ligne
blacklist i2c-bcm2708
en placant un # devant

Enregistrez et fermez ce fichier, puis ouvrez le fichier /etc/modules
nano /etc/modules
ajoutez y la ligne
i2c-dev

Fermez et enregistrez, installez ensuite l’utilitaire i2c
apt-get install i2c-tools
et enfin relancer votre rpi avec la commande
reboot

Mettez a jour votre yana, le plugin se trouve en natif dans le script

Puis dans l’interface web yana, allez dans configurations–>pluging–>activez le plugin

Le code de l’arduino

Comme d’habitude, branchez l’arduino (ou l’atmega) au pc et transférez via l’IDE arduino le code suivant sur la puce.

L’application android

L’application android est un peu excessivement merdoyante, c’est toujours la même et je n’ai pas eu le temps de la débugger,
elle est dispo ici :
http://idleman.fr/ressources/ANDROID/YanaBluetooth.apk

L’utilisation :

Dans votre application androïde, allez dans “configuration”, mettez un code à 4 chiffres/lettres de votre choix
Vérifiez que le nom du périphérique correspond bien a celui de la carte bluetooth votre porte
Vérifiez que la carte bluetooth de votre porte (normalement “bolutek” est bien enregistrée dans vos périphériques bluetooth
(si la première fois la carte vous demande un code, c’est généralement 1234 ou 0000).

Ouvrez le plugin domodoor dans le menu des configurations, et ajoutez un utilisateur à la porte (si vous voulez ajouter un autre utilisateur a la porte, il faudra d’abord l’ajouter aux utilisateurs généraux de yana)
et attribuez le même code à 4 chiffre à l’utilisateur que celui que vous avez sur votre téléphone.

Vérifiez que votre montage est bon et qu’il est sous tension

lancez la commande :
sudo python /var/www/yana-server/plugins/domodoor/i2c.py

Testez en lançant l’application android.

Par la suite, il peux être bon de lancer automatiquement le programme /var/www/yana-server/plugins/domodoor/i2c.py en tache de fond au démarrage, pour cela vous pouvez utiliser les CRON (taches planifiées) de linux, ou encore créer un petit script dans /etc/init.d
(cf la doc d’ubuntu par exemple).

Comme je suis un type fichtrement cool je vous donne même le script pour lancer ça au démarrage

tapez

sudo nano /etc/init.d/domodoor

Dedans, ecrivez votre commande :

#!/bin/sh
python /var/www/yana-server/plugins/domodoor/i2c.py

Enregistrez/fermez (ctrl+x puis “y”)

Rendez le script executable

sudo chmod +x /etc/init.d/domodoor

Ajoutez le script au boot

sudo update-rc.d domodoor defaults 80

Le programme se lancera maintenant à chaque démarrage.

Notez bien que seul l’utilisateur “root” a le droit d’utiliser l’i2c, vous devrez donc lancer le programme i2c.py avec l’utilisateur root au démarrage.

Explications sur le fonctionnement

Lors de son lancement, le programme (en python car il existe une très bonne librairie sous ce langage pour gérer l’i2c et aussi parce que je me suis fait engueuler par les pro-python comme quoi j’était un sale sectaire de communiste droggué du PHP :D ) i2c.py lance une boucle qui, toutes les 0.5 secondes vas interroger l’arduino en lui envoyant le texte “ping”, si il reçoit un numero de badge, il lance un fichier php du plugin yana.

Le fichier php  vas verifier dans la base de donnée si le code existe pour un utilisateur, si c’est le cas il vas tracer l’entrée dans le log, puis ils retourne la réponse (code coorecte ou pas) au script python.

De son coté l’arduino interroge en temps réel le capteur blutooth,  si un téléphone se connecte au capteur et lui envois un code, l’arduino vas stoquer ce code dans une file d’attente de “badge a verifier” et retournera ce code lors du prochain “ping” du script python.

Si le script python lui retourne une commande d’ouverture, l’arduino vas ouvrir un certain temps (2/3 secondes) son pin relié au relais (qui vas donc s’ouvrir aussi) ce qui coupe l’alimentation de la gâche électrique et qui déverrouille la porte.

Les améliorations

L’essentiel des améliorations a faire maintenant se situe du coté de l’appli android, celle ci étant un peu bugguée et pas encore très pertinente.

L’idéal serait qu’elle inclue un “timer” qui se connecte au bluetooth une fois par minute, cherche sur le périphérique de la porte est disponible, et ouvre la porte automatiquement si c’est le cas.

On ouvre qu’une fois la porte afin d’éviter qu’elle s’ouvre non stop qu’on on est dans l’appart, mais on continue a checker toutes les minutes la présence de la porte.

Si la porte est indisponible pendant plus de 3 min, on part du principe qu’on est sortis de l’appart, la prochaine détection de porte l’ouvrira donc de nouveau.

Le must du must sera aussi d’ajouter une serrure RFID a la porte en cas de perte du portable ou de portable déchargé, je ferais peut être une troisième
partie la dessus un de ces 4.