PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Blogmotion : Être notifié par email et SMS quand Internet revient

vendredi 19 juin 2015 à 09:10

Si vous auto-hébergez certaines de vos données sur un serveur ou un NAS à la maison, alors l'état de la connexion internet devient important.

notification-sms

Pourquoi ne pas être notifié à chaque coupure de connexion internet, au moment où la connexion web revient ?

Pré-requis

J'utilise un routeur open source avec le firmware Tomato, mais cette procédure peut facilement s'adapter à du pfSense ou à du dd-wrt. Mon fournisseur internet est Numericable sur lequel il est possible d'envoyer des emails sans authentification, je vais laisser vérifier sur votre FAI il me semble que chez Free ça marche aussi.

L'appel du script

Rendez-vous sur l'interface de votre routeur dans le menu Administration > Scripts > onglet WAN up :

tomato-scripts-wanup

J'ai stocké le script sur une clé USB qui est branchée en permanence au routeur, d'où le chemin. Si vous n'avez pas de clé vous pouvez stocker le script sur /jffs s'il vous reste assez de place.

On pourrait aussi imaginer que le script soit stocké sur un serveur web, un wget le récupérerait pour l'exécuter ensuite. Un peu tordu, mais ça devrait fonctionner.

Le script

Nous allons créer un script shell que nous appelons wanUp.sh, il va :

Voici le contenu du script :

#!/bin/sh
# wanUp.sh
# Auteur: Xhark pour http://blogmotion.fr
# Creative Commons BY-ND 4.0
# v2015.06.19

DATETIME=$(date +"%d-%m-%Y %H:%m:%S")
MAILERNAME="mailer"
MAILERVERSION="1.0"
DELAY=2
DOMAINRECEIVED="numericable.fr"
SMTPSERVER="smtp.numericable.fr"
PORT=25
FROM="routeur@home.fr"
TO="votre@email.tld"
EMAIL="Bonne nouvelle, la connexion internet Numericable est de retour :)"
OBJET="[Tomato] WAN UP !"
SMSURL="http://votre-site.fr/rep-secret/wan-sms.php"

logger -t "smtp_auto_message" "Connexion Internet (WAN) rétablie ! on va envoyer le sms et le mail de notification (wanUp.sh by xhark)"

# envoi du SMS via API Free
wget $SMSURL -O /dev/null >/dev/null 2>&1

if (
 sleep $DELAY
 echo "HELO $DOMAINRECEIVED"
 sleep $DELAY
 echo "MAIL FROM: $FROM"
 sleep $DELAY
 echo "RCPT TO: $TO"
 sleep $DELAY
 echo "DATA"
 sleep $DELAY
 echo "Date: $DATETIME"
 echo "From: $FROM"
 echo "To: $TO"
 echo "Subject: $OBJET"
 echo "X-Mailer: $MAILERNAME $MAILERVERSION"
 echo "X-hark: good-joke!"
 echo ""
 echo "$EMAIL"
 echo ""
 echo $DATETIME
 echo "."
 sleep $DELAY
 echo "QUIT"
 sleep $DELAY
 ) | telnet $SMTPSERVER $PORT; then
 :
else
 logger -t "smtp_auto_message" "WARNING: impossible d'envoyer le mail de notification via telnet (wanUp.sh by xhark)"
 exit 0
fi
exit 0

Je n'avais pas beaucoup de solutions pour envoyer un email avec mon routeur car les outils embarqués sont assez light, et j'avoue que je trouvais la solution telnet était assez fun.

Pour le SMS je m'appuie sur l'API gratuite de Free. Problème : elle impose l'utilisation d'une URL en HTTPS, hors la version embarquée de wget sur mon routeur ne le supporte pas. Voilà pourquoi je fais un appel à un script PHP hébergé sur un serveur web, dont voici le contenu :

Les champs $api_user et $api_pass sont disponibles dans votre espace free mobile. Vous ne pourrez pas envoyer de notification sur un autre numéro que le votre.

Je vous conseille vivement de protéger l'accès à cette page :

Si vous utilisez un DNS dynamique et que votre IP change à chaque synchronisation internet alors le contrôle ne fonctionnera pas car le dyndns n'aura pas eu le temps de se mettre à jour avant l'exécution du script sur le routeur. Dans ce cas vous pouvez temporiser le script shell avec la variable DELAY, tout dépend de la fréquence d'actualisation de votre DNS dynamique. Si vous êtes sous Tomato la synchronisation se fait à chaque reconnexion, donc 60 secondes devraient suffirent.

Conclusion

Nous avons un petit système sympa qui envoie une notification quand la connexion web revient. Particulièrement pratique si j'ai besoin de prendre le contrôle à distance d'un ordinateur à la maison, même s'il est éteint.

notification-email

Je sais que vous allez me dire dans les commentaires que j'aurai pu tout créer en PHP, et c'est vrai. Mais j'avais déjà créé le code de notification email avant de penser à la notification SMS, donc j'ai laissé le code avec telnet, une méthode de barbu qui a le mérite de fonctionne au top.

Notez que l'évènement est consigné au passage dans le log du routeur avec la commande logger, ceux qui utilisent un serveur syslog seront ravis.

BM vous parraine en mode Premium chez iGraal.fr : 10 euros offerts à l'inscription :)
Vous devriez me suivre sur Twitter : @xhark

Article original écrit par Mr Xhark publié sur Blogmotion le 19/06/2015 | 2 commentaires |
Attention : l'intégralité de ce billet est protégée par la licence Creative Commons

Vous risquez d'être aussi intéressé par :

Gravatar de Blogmotion
Original post of Blogmotion.Votez pour ce billet sur Planet Libre.