blog i69

pense-bête, contre la perte de données de mes sites favoris...

Raspberry Pi - Envoyer des mails en ligne de commande

Jeudi 05 février 2015 - Aucun commentaire

Installation de SSMTP :
sudo apt-get update
sudo apt-get install ssmtp

Configure SMTP
sudo nano /etc/ssmtp/ssmtp.conf

Ajouter ces lignes :
root=username@gmail.com
mailhub=smtp.gmail.com:465
rewriteDomain=gmail.com
AuthUser=username
AuthPass=password
FromLineOverride=YES
UseTLS=YES

Pour envoyer un mail :
ssmtp mail.address@example.com
subject: this is a test
hellow world!

Envoyer une pièce jointe :
Installation de Mpack
sudo apt-get install mpack
mpack -s subject picture.png mail.address@example.com

Tags de l'article : , ,

Raspberry Pi - Détection, photo, mail

Jeudi 05 février 2015 - Aucun commentaire

Suite de nos expérimentations avec le Raspberry Pi, cette fois-ci sur un modèle B+ :


Nous avons donc équipé la Framboise de quelques éléments très simples :

une caméra HD
un détecteur de mouvement (PIR)
une broche de sortie

L’idée pour ce projet est de réaliser un système allumant une lampe ou une alarme sur détection de mouvement, avec capture d’une image et envoi immédiat par mail.
On peut naturellement envisager tout un tas d’applications :

vérifier qui s’est présenté à la porte de votre domicile
surprendre les animaux nocturnes dans une forêt, un champ
surveiller une habitation
surveiller un véhicule, un garage


Pour une surveillance intérieure, on peut prévoir d’ajouter une entrée sur le Raspberry Pi, une entrée qui va détecter si le module doit être activé ou pas (une clé, un clavier extérieur, etc), selon votre présence ou votre absence.
Fermée, l’entrée indiquera au système que le script peut détecter le mouvement.
Ouverte par contre, le script n’ira pas plus loin.

Le montage est très simple, il suffit de connecter les ports du détecteur directement au GPIOs du Raspberry Pi en suivant le schéma suivant :


Vous remarquerez deux vis oranges sur le capteur :
- La première sert à régler la sensibilité du capteur ( la valeur par défaut est 50% )
- La deuxième sert à ajuster la durée pendant laquelle le capteur va monter à 3V en sortie quand il a détecté un mouvement.
(Par défaut, quelques secondes)

Le script en Python 3 est relativement simple, je me suis inspiré d’un exemple obtenu ici :

wget http://www.raspberrypi-spy.co.uk/archive/python/pir_1.py

#!/usr/bin/python
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#|R|a|s|p|b|e|r|r|y|P|i|-|S|p|y|.|c|o|.|u|k|
#+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
#
# pir_1.py
# Detect movement using a PIR module
#
# Author : Matt Hawkins
# Date   : 21/01/2013

# Import required Python libraries
import RPi.GPIO as GPIO
import time
import urllib

# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)

# Define GPIO to use on Pi
GPIO_PIR = 7

print "PIR Module Test (CTRL-C pour quitter)"

# Set pin as input
GPIO.setup(GPIO_PIR,GPIO.IN)      # Echo

Current_State  = 0
Previous_State = 0

try:

  print "Waiting for PIR to settle ..."

  # Tourne en boucle jusqu a ce que la sortie du capteur soit 0
  while GPIO.input(GPIO_PIR)==1:
    Current_State  = 0    

  print "  Ready"     
    
  # Loop until users quits with CTRL-C
  while True :
   
    # Read PIR state
    Current_State = GPIO.input(GPIO_PIR)
   
    if Current_State==1 and Previous_State==0:
      # PIR is triggered
      print "  Mouvement detecte !"
      test = urllib.urlopen("http://127.0.0.1/action.controller.php?action=motion")
      # On attend 80 secondes
      time.sleep(80) 
      # On enregistre l'ancien etat
      Previous_State=1
    elif Current_State==0 and Previous_State==1:
      # Le capteur est a nouveau pret
      print "  Ready"
      Previous_State=0
      
    # On attend 10 millisecondes
    time.sleep(0.01)      
      
except KeyboardInterrupt:
  print "  Quit" 
  # Reinitialisation des parametres GPIOs
  GPIO.cleanup()

Pour lancer le script vous n'avez qu'à taper la commande suivante :
sudo python pir.py


Voici donc le PHP qui va être appelé quand un mouvement est détecté.
Dès qu'un mouvement est détecté, on enregistre dans un fichier l'heure et la date du mouvement, et on la compare avec l'heure du dernier mouvement, pour en déduire des informations.

"action.controller.php" :
<?php
public function motion()
{
	$fichier_motion = fopen("motion_history.txt","r+");
	$old_date = fgets($fichier_motion);
	fclose($fichier_motion);
	unlink("motion_history.txt");
	$fichier_motion = fopen("motion_history.txt","a");
	fputs($fichier_motion,date('Y-m-d H:i:s'));
	fclose($fichier_motion);
	// Si l'utilisateur est entrain de dormir
	// CAD si un mouvement a été détecté il y a moins de 8 heures ET qu'il est encore nuit ( heure < l'heure de levé maximum)
	if((time() - strtotime($old_date)) < 8*60*60 && intval(date("H")) < $this->time_wake_up_max )
	{
		// ne rien faire
	}
	else if((time() - strtotime($old_date)) > 60*40)
	{
		// Sinon, si il y n'a pas eu de mouvement depuis 40minutes, c'est que l'utilsateur était parti
		// Donc => on l'accueil avec la fonction bienvenue()
		$this->bienvenue();
	}
}
?>


Pour la configuration de l’envoi de mails via le service smtp, je me suis inspiré de ce site et de ses exemples de configuration.
Une simple ligne ajoutée dans le script Python 3 et l’image est transmise sur un compte gmail :

os.system (‘sudo mpack -s ALERTE /var/www/alerte.jpg monemail@gmail.com’)

La capture d’images se fait en important le module picamera en tout début de script et en l’utilisant de façon extrêmement simple :

#
# CAPTURE D IMAGE
# sauvegarde dans /var/www/alerte.jpg
#
      with picamera.PiCamera() as camera:
        camera.vflip = True
        camera.hflip = False
        camera.resolution = (1024, 768)
        camera.start_preview()
        camera.capture(‘/var/www/alerte.jpg’)
        camera.stop_preview()

La sauvegarde se fait donc dans le fichier alerte.jpg, situé dans le répertoire /var/www.
Vous l’aurez donc compris, il vous faudra installer un serveur Apache2 au préalable, par exemple pour venir consulter l’image ainsi capturée en vous rendant directement sur l’ip de votre Raspberry au moyen du navigateur.

Tags de l'article : , , ,