jeudi 9 janvier 2014

[RaspberryPI] Sécurité, un détecteur d'ouverture de porte qui alerte par email

Les sources qui m'ont permis de réaliser ce tuto :
lien1 : http://learn.adafruit.com/playing-sounds-and-using-buttons-with-raspberry-pi/overview
lien2 : http://www.cyberciti.biz/tips/linux-use-gmail-as-a-smarthost.html

Dans ce tuto, nous allons mettre en place un détecteur d'ouverture de porte qui alertera par mail à chaque ouverture de porte.

Pré-requis

1) Avoir une RaspberryPI fonctionnelle avec Raspbian Wheezy chargé sur la carte SD
2) La carte aura un accès internet configuré en Wifi ou Ethernet
3) Un accès SSH configuré

Matériel

On utilisera
- une RaspberryPI
- un dongle Wifi (ou un cable réseau si la box n'est pas loin),
- un bouton poussoir
- une résistance de 10KOhms
- des fils pour connecter le tout

Envoyer des emails depuis une RaspberryPI

Tout d'abord, il faut se créer une nouvelle adresse email qui servira à envoyer les emails. J'ai choisi d'utiliser gmail, mais vous pouvez utiliser n'importe quelle fournisseur (free, yahoo, etc...).
1) Une fois le compte créé, connectez vous sur la RaspberryPI en SSH.

On va mettre à jour le dépot avant toute chose :
sudo apt-get update

On va installer ssmtp pour envoyer des emails car c'est la solution la plus simple que j'ai trouvé...
sudo apt-get install ssmtp

Ensuite on va rentrer les paramètres du compte mail créé. Placez vous à la fin du fichier /etc/ssmtp/ssmtp.conf et ajoutez les lignes suivantes en modifiant les champs en fonction du compte créé :
AuthUser=[identifiant]@gmail.com
AuthPass=[pass]
FromLineOverride=YES
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
On va ensuite exécuter quelques commandes pour assurer à ssmtp de prendre en charge l'envoi des mails
1) Arrêt des services sendmails
service sendmail stop
2) Créer un dossier de backup de sendmail et y placer l'ancien sendmail
mkdir /root/.backup
mv /usr/sbin/sendmail /root/.backup
3) Créer un lien de sendmail vers le dossier ssmtp 
ln -s /usr/sbin/ssmtp /usr/sbin/sendmail

Il est temps de tester, lancer la commande suivante en entrant une adresse mail à la fin
echo "test" | mail -s "test" votreAdresse@mail.com
NB : ceci enverra un mail votreAdresse@mail.com

Le bouton et la gestion de l’événement sur la RaspberryPI

On va utiliser python pour surveiller le bouton et la librairie permettant de gérer les port GPIO via python.
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio

Branchement

Pour le branchement, c'est assez simple on va procéder comme sur une carte Arduino. On va utiliser un bouton poussoir et une résistance de rappel (pour ne pas générer d'erreurs).

Brancher de cette manière (désolé pour le schéma) :
5V --- bouton --|-- résistance 10KOhms --- GND
                          |
                   GPIO17

Code 

Place au code python!
Créez un fichier raspi_button.py dans un dossier dédié de votre home :
sudo nano raspi_button.py

et insérer le code suivant (en prenant soin de modifier l'adresse mail) :
#!/usr/bin/env python

from time import sleep
import os
import RPi.GPIO as GPIO

#On initialise la pin GPIO17
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN)

while True:
        #Si un événement push est relevé on rentre dans la boucle, si on veut l'inverse on remplace True par False
        if ( GPIO.input(17) == True ):
                print('open!')
                #on envoit un mail
                os.system('echo "La porte est ouverte" | mail -s "Ouverture" votreAdresse@mail.com
                #on attend 5 secondes avant de laisser le programme repartir
                sleep(5);
        sleep(0.1);

Test

Lancer le programme 
sudo python raspi-button.py

Et appuyer sur le bouton, un mail devrait arriver

Evolution

C'est un programme assez simple et qu'on peut facilement transformer. Evidemment à chaque fois qu'on appui, un mail est envoyé, il faudrait ajouter des créneaux horaires d'alerte.

Aucun commentaire:

Enregistrer un commentaire