Secutiry Alert Notifier

Bijour bijour!
Aujourd’hui je vous présenterai mon nouveau joujou Arduino: un notificateur d’alerte de securité notifiant aussi la réception d’un nouveau mail. En effet je suis tombé sur ce tuto que j’ai ensuite adapté à ma sauce:
http://www.semageek.com/tuto-comment-fabriquer-un-notificateur-de-mails-avec-un-arduino/

Le principe est d’avoir une petite box avec un drapeau + led + alarme pour pouvoir notifier la réception d’un nouveau mail. Sachant qu’il y a pas mal d’attaques en ce moment sur le site (qui jusqu’à aujourd’hui ont tous été des échecs heureusement), je me suis dis que je pouvais l’utiliser de telle sorte que:

– Lorsque je reçois un nouveau mail quelconque, le drapeau de la box se lève
– Lorsque je reçois une alerte / rapport de sécurité (mail envoyé par un plugin de mon site), le drapeau se lève et une led plus un buzzer s’allume!

Pour vous donner une idée du résultat, voici une petite vidéo (de qualité bien dégueu) en fonctionnement:

Je suis d’accord que la tête de ce bricolage est une honte, mais bon j’avais pas forcément envie de passer beaucoup de temps à faire du découpage / collage…

Je vous donne aussi les contraintes de ce type de montage, histoire que vous ne vous en aperceviez pas à la fin:
– Il faut un ordi connecté au montage Arduino
– Une connexion internet (ben oui…)
– L’IDE Arduino lancé pour que l’échange pc / board fonctionne

Pour le matériel:
– Une carte Aruino Uno (sans blague!)
– Un servo-moteur
– Une led + résistance
– Un piezzo buzzer

Fonctionnement

Nous allons coder un script python qui ira récupérer les flux RSS de nos mails, puis enverra au raspberry pi “m” pour un nouveau message, “w” pour une alerte sécurité, “n” sinon. La carte Arduino effectuera les actions en conséquences.

Le montage

Pour connecter le moteur:
fil noir –> GND
fil rouge –> 5V
fil blanc –> pin 9
Il se peut que votre moteur soit un peu différent, voici un tableau qui pourrait vous aider:
(Source: http://www.pobot.org)

Rôle Masse Tension Signal
Arduino GND 5V DIGITAL 9
type 1 noir rouge blanc
type 2 marron rouge orange

Led connectée sur le pin 11
Buzzer sur le pin 10

Le code Arduino

logo_arduino_150

#include <Servo.h>
#define outPin 11
#define HIGHFLAG 95 
#define LOWFLAG 5
#define SON 175
#define BUZZER 10

Servo drapeau;
void setup()
{
    pinMode(BUZZER, OUTPUT);
    pinMode(outPin, OUTPUT); // sets the digital pin as output
    Serial.begin(9600);
    Serial.flush();
    drapeau.attach(9); // servo sur la pin 9
    drapeau.write(0);

        // Tests
        drapeau.write(HIGHFLAG);
        digitalWrite(outPin, HIGH);
        tone(BUZZER, SON);
        delay(500);
        noTone(10);
        delay(1500);
        drapeau.write(LOWFLAG);
        digitalWrite(outPin, LOW);
}

int buzz = 0;
void loop()
{        
    char val;
    // Read from serial port
    if (Serial.available())
    {
        val = Serial.read();
        delay(1);
        if (val == 'w')
        {

            digitalWrite(outPin, HIGH); // On allume la led
            drapeau.write(HIGHFLAG); // On leve le drapeau
                        if (buzz == 0)
                        {
                          buzz = 1;
                          for(int i = 0; i < 3; i++)
                          {   
                             tone(BUZZER, SON);
                             delay(500);
                             noTone(BUZZER);
                             delay(500);
                          }
                        }
                }
                else if (val == 'm')
                {
                  digitalWrite(outPin, LOW); //On eteint la lampe si allumee
                  drapeau.write(HIGHFLAG); // On leve le drapeau
                }
        else if (val == 'n')
        {
                        buzz = 0;
            digitalWrite(outPin, LOW); // On eteint la led
            drapeau.write(LOWFLAG); // On baisse le drapeau
        }
    }
}

Bricolage en cours:

2013-11-06 19.20.52 2013-11-06 19.21.13


Le Script Python

python-logo-glassy

Pour le script, il va falloir télécharger les paquets python-feedparser et python-pyserial avec apt-get ou zypper ou autre selon votre distrib (pour opensuse, les paquets étaient déjà installés!). Pensez à modifier votre nom d’utilisateur / mot de passe Gmail.

import serial, sys, feedparser, time, re
print "Checking..."

#Changez les informations suivantes en fonction de votre compte
USERNAME="username"
PASSWORD="password"
PROTO="https://"
SERVER="mail.google.com"
PATH="/mail/feed/atom"
SERIALPORT = "/dev/ttyACM0" # Changez le port en fonction du votre
SERIALPORT2 = "/dev/ttyACM1"

# Set up serial port
try:
    ser = serial.Serial(SERIALPORT, 9600) # Definit la connexion avec arduino
except serial.SerialException:
    print "no device on /dev/ttyACM0 - trying /dev/ttyACM1"
    try: 
        ser = serial.Serial(SERIALPORT1, 9600) # Definit la connexion avec arduino
    except:
        print "no device on /dev/ttyACM1 - exiting"
        sys.exit()

newmails = int(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" +
SERVER + PATH)["feed"]["fullcount"]) #se connecte a votre compte gmail et retourne 0 si il n y a pas de nouveaux mails, 1 s il y en a.
print "Mails non lues: " + str(newmails)
# Output data to serial port
if newmails > 0:
    #On doit checker si il y a des alertes de securite
    feed = str(feedparser.parse(PROTO + USERNAME + ":" + PASSWORD + "@" +
    SERVER + PATH)) #Recupere les donnees du flux rss
    if re.compile('valou-tweak.com').search(feed): #Remplacez l expression 'valou-tweak.com' par ce que vous voulez (ca doit apparaître dans le mail, objet ou contenu)
        print "Alerte securite!"
        ser.write('w') #envoie warning a arduino = messages    
    else:
                print "Aucune alerte!"
        ser.write('m')
else:
    ser.write('n') #envoie n a arduino = no messages

# Ferme le port
ser.close()
Automatisation

boucle

Pour lancer le script, il suffit de taper python pi_script.pi mais il ne vérifiera qu’une seule fois votre boîte mail. J’ai donc crée un petit script bash pour automatiser le tout. Avant de le lancer, n’oubliez pas de lancer la fenêtre de communication sérial Arduino dans l’IDE.

#!/bin/bash

# Check les alert de security par un script python
while [ 1 == 1 ]
do
    python2.7 pi_script.py
    wait
done

Et voilà le travail est finie! Il ne vous reste plus qu’à faire une petite boîte pour en faire quelque chose de jolie (pas le mien quoi…). Si vous rencontrez des problèmes, n’hésitez pas à laisser un commentaire!

Tagués avec :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.