Domotique minimale - Partie 4 : Tâches et mails - Goufablog
Goufablog

Geek, nouvelles technologies, société et jeux vidéos!
Aucune information sur l'auteur !
10
mars
2015
Domotique minimale - Partie 4 : Tâches et mails
Domotique - par Goufalite - 4297 hits

Mail personnel
Mail personnel

Avec Cygwin et PHP installés sur notre serveur, il est maintenant temps d'automatiser tout ça grâce à crontab et aux notifications diverses mis à notre disposition telles que les mails, instapush,...

Crontab, LA solution de planification de tâches

Jetez par la fenêtre le planificateur de tâches de Windows, difficile à paramétrer et avec un suivi par code d'erreur illisible. Si vous avez bien installé le package selon l'article précédent crontab sera installé dans votre Cygwin, ouvrer une console et tapez

crontab -l

pour avoir la liste des tâches déjà programmées, et

crontab -e

pour éditer les tâches de l'utilisateur courant.

Syntaxe

Toutes vos tâches tiennent dans un fichier texte, une par ligne. La syntaxe est la suivante :

minutes heures jours mois jours_de_semaine tâche

Vous pouvez définir des plages :

* : chaque... 2: tous les 2 du... 2,5 : les 2 et 5 du... 2-5 : plage entre le 2 et 5 du... */3 : chaque... par pas de 3

Par exemple :

#tous les jours à 2h15 15 2 * * * #à 2h15 seulement le mardi (dimanche = 0) 15 2 * * 2 #tous les quarts d'heure entre 7h et 19h chaque 5 du mois */15 7-19 5 * *

Environnement et Path

Déjà il faut savoir que Crontab s'exécute avec un utilisateur particulier qui n'aura pas forcément les mêmes privilèges que vous, mais surtout il aura un path différent de vous et risque de ne pas reconnaître les exécutables que vous lui passerez. Deux solutions s'offrent à vous.

La première est de TOUT écrire dans la ligne de tâche :

* * * * * cd /chemin/vers/fichier/ou/executable ; /chemin/vers/executable/executable fichier arguments

Mouais, précis mais illisible quand on viendra aux résultats de retour.

Je conseille la deuxième solution : créer un script qui rendra plus lisible l'instruction :

cd $3 $2 $1

Il vous suffira de l'appeler avec :

~/l executable_ou_fichier chemin_du_lanceur/executable chemin_de_travail

Par exemple :

~/l toto.php /cygdrive/D/programmes/php /cygdrive/G/scripts

Mails de retour

Dans tous les cas Crontab va vous écrire le résultat de la tâche dans un mail. Si vous ne voulez pas que ça arrive mettez un

&> /dev/null

après votre commande.

C'est la raison pour laquelle je vous ai fait installer mutt. La règle des mails crontab est simple : Si vous ne voulez pas recevoir de mails, il faut que votre programme n'affiche rien du tout ! A vous de blinder votre code pour qu'il n'affiche pas de warning de code ou du débogage.

Je vous conseille de garder ces mails pour les cas d'erreurs système et de jouer avec d'autres notifications pour vous prévenir de la résolution d'une tâche, surtout à distance.

Instapush

Découvert grâce à IFTTT, ce petit soft s'installe sur votre téléphone android et vous permet de recevoir des alertes textuelles lancées par des programmes que vous avez codé ! Le site parle de lui-même : en trois lignes vous pouvez demander à votre application de vous notifier d'un nouvel inscrit sur votre site, d'un nouveau fichier sur votre serveur, de la fin d'un téléchargement,... Tout est sur le site ! Et si votre langage de programmation n'y est pas, CURL est toujours possible !

Envoi de mails

J'ai eu un peu de mal avec cette partie, je vous conseille de regarder ce qu'il se fait en fonction de votre langage favori, en PHP par exemple il existe une classe très complète. En gros vous devez passer par un serveur SMTP pour envoyer vos mails. Vous pouvez essayer d'en installer un sur votre serveur mais il risque d'être la cible de spammeurs.

Dépendez donc de SMTP externes comme par exemple ceux de vos boîtes mails existantes.

Je vous l'ai déjà dit : il est possible de se faire passer pour n'importe qui en écrivant un mail. Servez-vous-en pour mieux trier les messages d'avertissement ou sinon créez un adresse mail dédiée. Cependant faites bien des tests pour vérifier que le serveur SMTP gère les expéditeurs modifiés (ce qui n'est pas le cas de gmail par exemple)

Lisez vos mails

Je me sers de mon serveur pour trier mon spam automatiquement selon des critères connus ou pour jeter des mails selon un filtre. Rien ne vous empêche de lire n'importe quel mail pour par exemple donner des ordres à votre serveur (s'éteindre, lancer une tâche,...).

Imaplib en python

#tri du spam mail = imaplib.IMAP4_SSL('imap.gmail.com') mail.login('mail@gmail.com', 'motdepasse') mail.select("[Gmail]/Spam",readonly=True) #mails non lus result, data = mail.uid('search',None, "(UNSEEN)") for emails in data[0].split(): result,myEmail = mail.uid('fetch',emails,'(RFC822)') print myEmail[0][1] readableemail = email.message_from_string(myEmail[0][1]) print "From: ",readableemail['From'].decode('quopri').decode('utf-8') print "To: ",readableemail['To'] print "Subj: ",quopri.decodestring(readableemail['Subject']) print "Date: ",readableemail['Date'] date_tuple = email.utils.parsedate_tz(readableemail['Date']) if date_tuple: local_date = datetime.datetime.fromtimestamp( email.utils.mktime_tz(date_tuple)) print "Local Date:", \ email.utils.mktime_tz(date_tuple) #print "----"

Grâce à ces quelques lignes il est possible de lire des éléments particuliers de votre boîte mail. La boîte gmail gère les dossiers si vous rentrez le nom du label. La principale difficulté réside dans la lecture des informations qui sont souvent encodées selon le format du mail.

Et après

Vous avez une machine complètement autonome qui interagit facilement avec vous ! Il ne reste que quelques éléments à rajouter avant de la faire s'ouvrir à l'extérieur.

+ Sources des images


Vous pouvez aussi lire :

CC-BY-SACet article est protégé par une licence CC-BY-SA.


Tags : cron, mail, POST, python
Delicious   Facebook   Commentaires(0) | Permalink
Sans commentaires!
Votre avis?
(Obligatoire)

Site et style réalisé par Goufalite
Reproduction interdite sans l'accord de l'auteur.