Indicateur de Mail – John Schulman

Indicateur de Mail

 

Table des Matières

 

Introduction :

 

  1. Brancher votre Raspberry Pi et sense-hat 

 

  1. Démarrer l’informateur email avec le Rapsberry Pi

 

  1. Les bibliothèques de l’informateur d’email

 

  1. Les variables utilisées

 

     5. La première condition « try/except »

 

     6. La deuxième condition « try/except »

 

  1. Les conditions « if/elif »

 

  1. Le « switch-case »

 

  1. Le script final

 

L’Exécution / Conclusion : 

 

 

Ressources :

 

 

Introduction

 

L’objectif de cette rapport est la mise en place d’un petit programme qui permettra, grâce au LED du sense-hat connecté au Raspberry Pi, de créer un informateur d’email. Dans le but d’y arriver nous avons programmé un script que nous avons élaboré en python.

 

Ce projet utilisera un compte qui se sert de IMAP. IMAP une abréviation pour « Internet Message Access Protocol » et qui est un outil permettant de classifier vos mails directement à partir du serveur. Plus concrètement on peut créer ses propres répertoires avec l’affichage des « en-têtes ». Grâce à IMAP on peut exécuter des actions de « recherche » et de « trie » même sur des ordinateurs à faible puissance car on travaille non sur le disque dur mais sur le serveur. Ce projet cherchera à faire une connexion sur ce serveur d’email. Pour que cette connexion marche le compte mail doit pouvoir intégrer le paramètre IMAP.

 

  1. Brancher votre Raspberry Pi et sense-hat

 

La première étape de ce projet consiste à installer Putty. Ceci peut être accompli en faisant une recherche, « guide on installing Raspian », sur l’internet.

 

 

Dans le but de télécharger les dernières mises à jour nous devons périodiquement faire ces deux commandes.

 

sudo apt-get update

sudo apt-get upgrade

 

Par la suite, nous devons aussi installer le nécessaire pour le sense-hat. Le sense-hat est une périphérie complémentaire du micro-ordinateur du Raspberry Pi. Ces fonctions consistent à mesurer l’humidité, la pression, la température, l’orientation et d’autres informations grâce à ses LED intégrés. Le Raspberry Pi avec le sense-hat fut originellement conçu pour la mission Astro Pi afin d’accomplir des investigations en espace à bord de la station spatiale internationale.

 

sudo apt-get install sense-hat

 

 

On peut créer un test affichant « Bonjour ». Pour créer un fichier, on doit taper une commande telle que 1. Ensuite on va insérer une ligne de code qui permet d’interagir avec le sense-hat. Pour commencer à l’utiliser dans notre programme on crée ensuite ce lien. Enfin on affiche notre test dans une forme RGB. Pour tester on écrit ces  4eme et 5eme lignes de code.

 

1.      sudo nano ~/sensehat_test.py

2.      from sense_hat import SenseHat

3.      sense = SenseHat()

4.      sense.show_message("Bonjour")

5.      sudo python ~/sensehat_test.py

 

Ceci fait, on doit normalement voir « bonjour » se défiler sur le sense-hat. Si vous rencontrez des problèmes vérifiez les commandes et sense-hat ou grâce à la commande sudo reboot pour redémarrer putty.

2.      Démarrer l’informateur email avec le Rapsberry Pi

 

La version des PIP, des paquets de fichiers spécifiques pour python, rencontrent des problèmes avec l’installation du imapclient. Pour y arriver on le supprime et puis on installe une version nouvelle en tapant le code suivant.

sudo apt-get remove python-pip

sudo wget https://bootstrap.pypa.io/get-pip.py

sudo python get-pip.py

sudo apt-get install python-pip

 

Pour le code en python nous allons servir du IMAP client grâce à une enveloppe déjà faite qui gère les connexions via le serveur de mail. Ce script est le suivant :

sudo apt-get install build-essential libssl-dev libffi-dev python-dev

sudo pip install imapclient

 

On peut ensuite créer un annuaire où on mettra les images au lieu de mettre tout dans le home directory. Cela se fait a partir de la commande mkdir (make directory = créer un nouveau répertoire) et cd (change directory = changer le répertoire de travail.)

sudo mkdir ~/ indicateurmail

cd ~/ indicateurmail

 

Nous utiliserons 7 images : done, error, hello, mail, mailFew, mailLot, nomail qui sont de taille 8×8 LED

Pour télécharger cet annuaire d’images, on se sert de la commande curl :

curl -L https://go.pimylifeup.com/v3pcgz/sensehatfileimages sudo tar xvz

 

Ensuite on peut commencer à écrire le script lui-même grâce à la création du fichier indicateurmail

sudo nano indicateurmail.py

 

3.      Les Bibliothèques de l’informateur d’email

 

D’abord on doit importer les bibliothèques qu’on utilisera dans notre script. Celles-ci sont les suivantes : la bibliothèque sense_hat (pour que le sense-hat avec ces LEDS puissent interagir avec le programme) , la bibliothèque du imapclient (permet d’agir avec les serveurs de mails), la bibliothèque de temps (permet une panoplie de fonctionnalités avec l’heure mais nous l’utiliserons simplement pour mettre le programme en veille) et la bibliothèque sys (permet d’arrêter le script si besoin)

 

#!/usr/bin/python

from sense_hat import SenseHat

from imapclient import IMAPClient

import timeimport sys

 

4.      Les Variables utilisées

 

On définit ensuite les variables qui doivent être utilisées dans le script sachant que pour chaque utilisateur il doit correspondre au bon pseudo et service mail. Ces variables sont les suivantes

1.      HOSTNAME: le service de mail : i.e. Hotmail : imap-mail.outlook.com  ou Google : imap.google.com

2.      USERNAME: l’adresse mail spécifique i.e. John_schulman@hotmail.com

 

3.      PASSWORD : mot de passe du mail choisi

 

4.      MAILBOX : l’endroit que l’on cherche pour choisir et pour vérifier des nouveaux mails : i.e. Inbox ou un autre fichier

 

5.      NEWMAIL_OFFSET : la valeur qui correspond au seuil de mails pour que le programme le déclare nouveau. Si on a 300 mails non lues on mettra donc la valeur 300 pour qu’à partir de ce chiffre il réagisse positivement.

 

6.      MAIL_CHECK_FREQ : la fréquence des nouveaux mails. Par exemple on peut mettre 120 pour que toutes les deux minutes il soit suivi.

HOSTNAME = 'imap.gmail.com'

USERNAME = 'username'

PASSWORD = 'password'

MAILBOX = 'Inbox'NEWMAIL_OFFSET = 0

MAIL_CHECK_FREQ = 120

Pour commencer à tester une des images de notre annuaire on pourrait marquer le code suivant. Une ligne pour établir le lien avec le sense-hat et la deuxième ligne pour télécharger une de nos images

sense = SenseHat()

sense.load_image("mail.png")

 

5.      La première condition « try/except »

 

Le code suivant établit la connexion à travers le segment « try ». Concrètement il crée un IMAPClient avec le nom de service mail spécifique (HOSTNAME).

Cela se confirme à travers l’utilisation d’un unique id. Il se renforce aussi un SSL = Secure Sockets Layer qui créer une connexion sécurisée entre un client et un serveur. Il permet aussi de confirmer l’identité du serveur. Cela est suivi par un segment qui établit la connexion vers le serveur en spécifiant l’adresse mail spécifique (USERNAME) et le mot de passe de cette adresse (PASSWORD).

Comme ces segments sont dans une condition « try » si la connexion ne fonctionne pas, on passe directement dans la clause « except ». Dans ce segment on donne comme valeur connexion : False et puis on télécharge l’image d’ « erreur ».

Si on ne trouve pas d’erreur, on passe directement notre variable à True et puis on introduit notre image  « done » sur le sense-hat. On profite en même temps de signaler au imapclient un fichier spécifique du MAILBOX.

try:

server = IMAPClient(HOSTNAME, use_uid=True, ssl=True)

server.login(USERNAME, PASSWORD)

except:

connected = False

sense.load_image("error.png")

else:

connected = True

sense.load_image("done.png")

select_info = server.select_folder(MAILBOX)

 

6.      La deuxième condition « try/except »*

 

L’étape suivante consiste en un segment au sein aussi d’une condition  « try / except » mais avec à l’intérieur un « while ». La condition « try / except » est simplement là si l’utilisateur cherche à sortir de la boucle « while » avec un appui de Ctrl + C.

Pour que le programme puisse exécuter continuellement la vérification de notre boîte mail, une boucle « while » est mise en place, à condition que le mail ait établi une connexion.

Ensuite on met dans une  variable qu’on nomme folder_status qui correspond au statut du MAILBOX. Ensuite affecté à une variable qu’on nomme newmails, nous renvoyons le nombre de mails non-lues ou « unread » de la boîte mail. On peut, il faut le rappeler, ne pas choisir le Inbox seulement mais on peut spécifier une boîte lettre spécifique.

try:

while connected:

folder_status = server.folder_status(MAILBOX,             'UNSEEN')

newmails = int(folder_status['UNSEEN'])

 

Ensuite on vérifie que le nombre de mails non-lues soit plus grandes de notre offset. Il faut signaler que le nombre de l’offset peut être n’importe quel nombre choisi et alors le programme peut être adapté à n’importe quelle adresse mail.

 

  1. Les conditions « if/elif »

 

Une fois que cela est fait on peut appeler le sense-hat à défiler le nombre de nouveaux mails grâce à sense.show_message(str(newmails)). Le Raspberry PI affichera donc le nombre de nouveaux mails en fonction NEWMAIL_OFFSET.

 

Après cela on se sert d’un « if/elif/else » condition pour déterminer quelle image on souhaite afficher. On fait cela en fonction de trois conditions. La première est d’afficher une boîte verte si il n’y a qu’un nouveau mail. Ensuite la deuxième condition affiche une boîte orange si le nombre de mails est entre 1 et 10 (une chiffre choisi) , désignant un nombre restreint de nouveaux mails. Enfin on affichera une boîte rouge si le nombre de mails est supérieur à 9 mails (une chiffre aussi choisi).

 

if newmails > NEWMAIL_OFFSET:

newmails -= NEWMAIL_OFFSET

sense.show_message(str(newmails))

if newmails == 1:

sense.load_image("mail.png")

elif newmails > 1 and newmails < 15 :

sense.load_image("mailFew.png")

elif newmails > 14:

sense.load_image("mailLot.png")

 

 

Comme contrepartie de la condition « if » on  a un « else » qui télécharge la photo « nomail » au cas où on n’a pas de nouveaux mails.

Cela est suivi par le code qui permet de mettre le programme en veille pour le temps déterminé grâce aux secondes misent dans la variable MAIL_CHECK_FREQUENCE.

Enfin on a notre exception pour sortir de la boucle « while » en lançant un KeyboardInterrupts pour qu’on puisse appeler sense.clear() afin d’effacer l’affichage du sense-hat.

 

  1. Le «  switch-case »

 

Dans le but d’ajouter un paramètre qui permettra d’être au courant des différents types de mails reçus nous avons mis en place quelques étapes supplémentaires. Tout d’abord on peut ajouter 4 images correspondants aux types suivants : le travail, la famille, la nourriture ou l’urgence. Ensuite on doit ajouter 4 nouvelles variables dans lesquelles on affecte 4 adresses mails spécifiques, c’est-à-dire une correspondant à chaque catégorie de mail. Cela pourrait ressembler à la chose suivante :

 

EMAIL_SENDER_WORK = 'harmonie.vermande@ieid.eu'

EMAIL_SENDER_FAMILY = 'joseph.schulman@hotmail.com'

EMAIL_SENDER_FOOD = 'elodie.vaiani@abc-cours-a-domicile.fr'

EMAIL_SENDER_EMERGENCY = 'bjmschulman@free.fr'

 

Ensuite dans le code juste après « else » on insère un switch case qui permet d’afficher en fonction du variable l’image correspondante.

 

switch (Type)

{

case 'EMAIL_SENDER_WORK':

sense.load_image("Work.png")

break;

case 'EMAIL_SENDER_FAMILY':

sense.load_image("Family.png")

break;

case 'EMAIL_SENDER_FOOD':

sense.load_image("Food.png")

break;

case 'EMAIL_SENDER_EMERGENCY':

sense.load_image("Emergency.png")

break;

default:

sense.show_message("OTHER")

break;

}

 

  1. Le Script Final

 

#!/usr/bin/python

from sense_hat import SenseHat

from imapclient import IMAPClient

import time

import sys

 

HOSTNAME = 'imap-mail.outlook.com'

 

USERNAME = 'username'

 

PASSWORD = 'password'

 

MAILBOX = 'Inbox'

 

NEWMAIL_OFFSET = 0

 

MAIL_CHECK_FREQ = 20

 

EMAIL_SENDER_WORK = 'harmonie.vermande@ieid.eu'

EMAIL_SENDER_FAMILY = 'joseph.schulman@hotmail.com'

EMAIL_SENDER_FOOD = 'elodie.vaiani@abc-cours-a-domicile.fr'

EMAIL_SENDER_EMERGENCY = 'bjmschulman@free.fr'

 

sense = SenseHat()

sense.load_image("hello.png")

 

try:

server = IMAPClient(HOSTNAME, use_uid=True, ssl=True)

server.login(USERNAME, PASSWORD)

except:

connected = False

sense.load_image("error.png")

else:

connected = True

sense.load_image("done.png")

select_info = server.select_folder(MAILBOX)

 

try:

while connected:

folder_status = server.folder_status(MAILBOX, 'UNSEEN')

newmails = int(folder_status['UNSEEN'])

if newmails > NEWMAIL_OFFSET:

newmails -= NEWMAIL_OFFSET

sense.show_message(str(newmails))

if newmails == 1:

sense.load_image("mail.png")

elif newmails > 1 and newmails < 15 :

sense.load_image("mailFew.png")

elif newmails > 14:

sense.load_image("mailLot.png")

else:

sense.load_image("nomail.png")

 

switch (Type)

{

case 'EMAIL_SENDER_WORK':

sense.load_image("Work.png")

break;

case 'EMAIL_SENDER_FAMILY':

sense.load_image("Family.png")

break;

case 'EMAIL_SENDER_FOOD':

sense.load_image("Food.png")

break;

case 'EMAIL_SENDER_EMERGENCY':

sense.load_image("Emergency.png")

break;

default:

sense.show_message("OTHER")

break;

}

 

time.sleep(MAIL_CHECK_FREQ)

except KeyboardInterrupt:

pass

sense.clear()

 

 

L’Exécution / Conclusion

 

On peut maintenant exécuter ce script avec la commande suivante.

 

sudo python indicateurmail.py

 

On peut voir avec ce script le fonctionnement de notre indicateur de mail afficher le nombre de nouveaux mails avec la photo correspondante juste après. Ce processus se renouvelle tout les X secondes en fonction de la variable mise dans MAIL_CHECK_FREQUENCE.

Ensuite si le programme reçoit l’un de ces 4 mails spécifiques il affiche l’image correspondante au type.

Si après l’affichage des 3 blocks de couleurs, le programme s’arrête, cela veut dire que la connexion vers le serveur d’adresse mail a échoué. Dans ce cas il faut revérifier les valeurs du HOSTNAME, USERNAME and PASSWORD.

Cela dit, voilà un exemple de ce qu’on arrive à programmer avec le Raspberry Pi et le sense-hat.

 

 

Ressources

 

Top 33 projects to try yourself. https://www.itpro.co.uk/mobile/21862/raspberry-pi-top-31-projects-to-try-yourself-1

Consulté le 15 octobre 2018. Site de technologie.

 

Raspberry PI email notifier using leds. https://learn.adafruit.com/raspberry-pi-e-mail-notifier-using-leds/overview

Consulté le 17 octobre 2018. Site de technologie.

 

 

Raspberry PI Projects. https://projects.raspberrypi.org/en/

Consulté le 20 octobre 2018. Site de technologie.

 

 

Raspberry Pi. http://raspberrypi.fr/

Consulté le 20 octobre 2018. Site officiel.

 

Teach, learn and make with Raspberry Pi. https://www.raspberrypi.org/

Consulté le 24 octobre 2018. Blog éducatif.

 

Raspberry Pi France. https://www.raspberrypi-france.fr/

Consulté le 27 octobre 2018. Site professionnel.

                                                                                                            

 

Laisser un commentaire

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