Envoyer des SMS avec un NAS Synology
Depuis quelques temps, je surveille mon habitat avec des caméras via l’application Synology Surveillance Station. L’application est gratuite et permet de gérer sans licence supplémentaire 2 caméras IP; dans mon cas, je dispose de 4 caméras, j’ai dû acheter 2 licences supplémentaires que l’on trouve facilement sur Amazon pour 49€ l’unité. Professionnelle et confortable, l’application Web est vraiment bien conçue et l’on peut féliciter Synology pour ses solutions de grande qualité. De plus, des applications mobiles gratuites viennent compléter le module serveur, afin de disposer d’un client de surveillance sur iPhone ou Android.L’application Web offre de grandes capacités de personnalisation. Le système d’alerte est totalement paramétrable avec de nombreuses possibilités d’envois. Comme pour toute solution de sécurité, il faut prévoir les pannes éventuelles. En effet, l’idée de subir une coupure Internet ou électrique m’est intolérable. Il me fallait donc trouver un moyen pour m’alerter d’un quelconque problème de ce type. L’envoi d’un SMS est une méthode appropriée dès lors que l’on a un serveur SMS (cf. mon article Envoyer des sms avec un raspberry).
Dans un premier temps, j’ai placé sous onduleur la box Internet, le petit NAS Synology, le switch Ethernet et le serveur Raspberry. Du coup, si je subis une coupure électrique ou encore un perte de connexion Internet, le système est capable de réagir localement et de m’avertir du problème par SMS.
Les solutions pour envoyer des SMS à partir d’un NAS Synology ne sont pas nombreuses. Si l’on veut disposer d’une vraie solution indépendante et sécurisée alors il vous faudra réaliser des réglages techniques sur le système Linux du NAS Synology. En général, le serveur SMS est accessible via une API Web, ainsi l’envoi et la réception de SMS sont très simples à exploiter. Voici ma solution avec pour seul prérequis la présence d’une serveur SMS (cf. mon article Envoyer des sms avec un raspberry).
Dans un premier temps, j’ai placé sous onduleur la box Internet, le petit NAS Synology, le switch Ethernet et le serveur Raspberry. Du coup, si je subis une coupure électrique ou encore un perte de connexion Internet, le système est capable de réagir localement et de m’avertir du problème par SMS.
Les solutions pour envoyer des SMS à partir d’un NAS Synology ne sont pas nombreuses. Si l’on veut disposer d’une vraie solution indépendante et sécurisée alors il vous faudra réaliser des réglages techniques sur le système Linux du NAS Synology. En général, le serveur SMS est accessible via une API Web, ainsi l’envoi et la réception de SMS sont très simples à exploiter. Voici ma solution avec pour seul prérequis la présence d’une serveur SMS (cf. mon article Envoyer des sms avec un raspberry).
Un serveur Web et CURL
Vous devez dans un premier temps, faire des réglages de notification sur DSM. Ouvrez le panneau de configuration, puis choisir le menu Notification. Cliquez sur l’onglet SMS.Cliquez sur le bouton Ajouter un fournisseur de service SMS. Indiquez un nom de fournisseur SMS (RASPISMS) et saisissez précisément l’URL pour faire appel à l’API d’envoi SMS.
Vous remarquez que j’appelle une URL locale (http://localhost/api/sendsms.php?user=0&pwd=0&appkey=ID&to=1234&text=Hello+World) et non une URL de serveur SMS distant. En effet, il s’agit de gérer l’appel de l’API SMS avec une page Web locale simplifiée et reformatée. L’URL de l’API RaspiSMS ne passe pas le contrôle du formulaire Synology (pourquoi ? je ne sais pas mais rien à y faire) – dans le cas contraire c’était plus simple, pas besoin de reformaté l’URL et donc pas besoin de serveur Web local.
Contraint, j’ai donc suivi le formatage Synology de cette URL en utilsant un serveur Web local qui renverra sur l’URL RaspiSMS – plus complexe – via CURL. Ainsi, je vous demande de respecter le nommage de l’URL comme ci-avant ; cliquez sur le bouton Suivant.
Un second formulaire apparait pour renseigner les valeurs des champs indiqués dans l’URL. Choisissez les variables avec les menus déroulants pour chaque champs ; validez en cliquant sur le bouton Appliquer.
Activer l’accès SSH
Revenir sur l’option d’Accueil du panneau de configuration et choisir le menu Terminal & SNMP ; cliquez sur l’onglet Terminal et cochez l’option Activer le service SSH (port 22) et validez avec le bouton Appliquer.Ajouter les paquets pour le serveur Web
Puisque je fais appel à une URL locale, je suis donc obligé d’installer un serveur Web avec PHP. Allez dans le Centre de paquets puis installez le package Web Station ainsi que le package PHP 5.6 .Puis paramétrez Web Station avec NGINX et PHP 5.6 en allant dans l’onglet Paramètres Généraux. Sélectionnez NGinx et PHP 5.6.
Allez ensuite dans les paramètres PHP puis activez l’extension CURL (cochez l’option) ; validez avec Appliquer . Le serveur Web est donc prêt.
Contrôlez ensuite le status du Web Station ; PHP 5.6 doit être installé avec le serveur Web NGINX par défaut.
Coder une page PHP pour faire l’interface avec le serveur RaspiSMS
Connectez vous en SSH au NAS Synology (utilisez un outil de type Terminal) :Mac-Pro:~ usertb$ ssh admin@192.168.0.32
admin@192.168.0.32's password:
Could not chdir to home directory /var/services/homes/admin: No such file or directory
admin@DShomeserver3:/$ sudo su -
Password:
root@DShomeserver3:~#
Créez un dossier spécial pour les API dans le dossier racine Web Station :
# cd /volume1/web
# mkdir -p /volume1/web/api
Se placer dans le répertoire de Web Station pour ajouter une page PHP :
# cd /volume1/web/api
# vi ./sendsms.php
Editez et copiez le code suivant dans le fichier PHP sendsms.php :
# mkdir -p /volume1/web/api
Se placer dans le répertoire de Web Station pour ajouter une page PHP :
# cd /volume1/web/api
# vi ./sendsms.php
Editez et copiez le code suivant dans le fichier PHP sendsms.php :
<?php
// CATCH FROM ANOTHER SERVER
// Need standard user to convert for SMSSERVER : tbarrault
if ( isset($_GET['user']) AND isset($_GET['appkey']) AND isset($_GET['pwd']) AND isset($_GET['to']) AND isset($_GET['text']) ) {
if ($_GET['user'] == 'user-raspisms) { $email='email@domain.fr'; } else { echo "error username"; die; };
// SEND TO SMSSERVER
// http://192.168.0.16/RaspiSMS/smsAPI/?email=email@domain.fr&password=mon-password&numbers=07XXXXXX&text=magetest
$MYURL='http://192.168.0.16/RaspiSMS/smsAPI/?';
$MYURLVARS='email='.$email.'&password='.$_GET['pwd'].'&numbers='.$_GET['to'].'&text='.$_GET['text'];
$CH=curl_init($MYURL);
echo $MYURL.$MYURLVARS;
curl_setopt( $CH, CURLOPT_POST, 1);
curl_setopt( $CH, CURLOPT_POSTFIELDS, $MYURLVARS);
curl_setopt( $CH, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt( $CH, CURLOPT_HEADER, 0);
curl_setopt( $CH, CURLOPT_RETURNTRANSFER, 1);
$response=curl_exec($CH);
echo $response;
curl_close($CH);
} else {
echo "vars incompletes";
};
?>
Quelques explications sur le code PHP
Indiquez l’adresse IP de votre serveur RaspiSMS (ou autre),
Indiquez ensuite un user RaspiSMS (‘user_raspisms’) et son email correspondante (’email@domain.fr’),
Le reste des champs sera renseigné par le formulaire lui-même.
Préparez le fichier et le répertoire pour un accès Web :
# cd /volume1/web/
# chmod -R 775 api
# chown -R http:http api
Conclusion
Et voilà… le tour est joué ; il ne reste plus qu’à tester l’envoi de SMS par le panneau de contrôle DSM. Au passage, vous avez remarqué que je n’ai pas utilisé PERL pour cette procédure… j’aborderais les scripts PERL en mode service dans d’autres articles plus techniques – à venir. Cette méthode est parfaitement fonctionnelle et surtout très simple. N’hésitez pas à me solliciter pour plus d’explications.Addendum
Depuis la version DSM 6.2.1-23824 Update 1, des modifications ont été apportées au module Notifications.Vous allez devoir ajouter un nom de domaine au serveur, soit un alias sur le nom localhost du serveur SYNOLOGY. Pour cela, vous devez vous connecter en SSH et effectuer des modifications dans le fichier Linux hosts. C’est impératif pour saisir la chaine URL dans le module notifications. Les modifications se réalisent en SuperUser (sudo su -).
$ ssh admin@192.168.0.32
admin@192.168.0.32's password:
Could not chdir to home directory /var/services/homes/admin: No such file or directory
admin@DShomeserver3:/$ sudo su -
Password:
root@DShomeserver3:~# vi /etc/hosts
Ajoutez le nom localhost.nettb (c’est un exemple) sous forme de nom de domaine comme suit :
# Any manual change will be lost if the host name is changed or system upgrades.
127.0.0.1 localhost
::1 localhost localhost.nettb
127.0.0.1 DShomeserver3
::1 DShomeserver3
Vous pouvez faire un test pour verifier si le nom répond bien au ping…
root@DShomeserver3:~# ping localhost.nettb
PING localhost.nettb(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.138 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.124 ms
Si le nom de host répond bien alors vous pouvez quitter…
root@DShomeserver3:~# exit; exit
Ainsi, dans le module Notifications, vous pouvez compléter le formulaire comme il se doit.
Remplacez le nom du host localhost.nettb (remplace le nom localhost) dans la chaine URL. Le formulaire suivant est à passer simplement. Il vous suffira de valider avec le bouton Appliquer sur le formulaire final.