Envoyer, gérer et recevoir des SMS avec la Raspberry Pi

Il y a environ un mois et demi, nous vous disions dans cet article que deux gros tutoriels allaient prochainement sortir. Aujourd’hui voici le plus important des deux, par sa taille, ses implications, etc.

En effet, si aujourd’hui nous allons voir comment envoyer des SMS avec la Raspberry Pi, nous n’allons pas nous arrêter là. Nous allons vous présenter les fruits de plusieurs semaines de travail acharné (enfin sauf les lundis soirs, parce que les lundis soirs, chez Raspbian France, c’est soirées Kebab/Walking Dead).

Nous allons donc vous présenter RaspiSMS !

Petite présentation de RaspiSMS.

Pourquoi avoir créé RaspiSMS ?

Chez Raspbian France nous avions besoin de pouvoir envoyer des SMS avec la Raspberry Pi, et quand nous avons cherché à le faire, nous n’avons pas trouvé un système qui nous convienne vraiment. Par conséquent, nous l’avons fabriqué, et nous vous le présentons aujourd’hui !

Nous voulions un système qui nous permette de créer facilement un SMS depuis n’importe quel PC, au travers d’une interface claire, mais aussi à travers une API. Nous voulions pouvoir choisir à quelle heure envoyer les SMS, et à qui, notamment via la création de contacts et de groupes de contacts.

Par conséquent, face à l’absence d’outil répondant à ces besoins, nous avons décidé de créer une application web sur mesure. Plutôt que de créer rapidement un système répondant seulement à nos besoins, nous avons décidé de créer un système complet, qui puisse se déployer sur toutes les Raspberry Pi, et de le distribuer en libre au plus grand nombre, sous licence GNU/GPL.

RaspiSMS c’est quoi ?

RaspiSMS, c’est un site web destiné à être installé sur une Raspberry Pi. Il vous permettra depuis n’importe quel ordinateur d’accéder à une interface d’administration propre. Depuis cette dernière, vous pourrez envoyer et recevoir des SMS.

RaspiSMS dispose également d’une API, qui vous permettra d’envoyer facilement un SMS depuis n’importe quel script, par exemple pour envoyer un code de confirmation à un utilisateur, prévenir une équipe lors de l’ajout d’un nouveau push git, ou encore pour vous prévenir par SMS lors de la détection d’un mouvement chez vous.

RaspiSMS permet également de lier des commandes à un script à faire exécuter par le serveur lors de la réception d’un SMS au format « [nom commande:arguments supplémentaires][email:email compte RaspiSMS à utiliser][password:mot de passe compte] ».
Vous pouvez trouver plus d’informations sur RaspiSMS sur sa documentation.

Installation de RaspiSMS.

Que faut-il pour envoyer un SMS ?

Au delà de RaspiSMS et de ses dépendances logicielles, pour envoyer un SMS avec vôtre Raspberry Pi il est important de préciser qu’il vous faudra, au niveau matériel, une carte SIM, et un dongle 3G/GSM.
Pour la carte SIM, nous utilisons une carte de chez Free, avec le forfait par 2€/mois. Vous pouvez même l’avoir pour 0€/mois si vous êtes chez Free. Cela marchera tout aussi bien avec une carte de n’importe quel autre opérateur. Il est à noter que certaines cartes demandent à être activées sur internet avant de pouvoir être utilisées. C’est par exemple le cas des cartes Free. Pensez-y.

Pour le module 3G/GSM, là c’est un peu plus complexe. Il faut que vous soyez sûr qu’il permet l’envoi de SMS, et qu’il soit géré par le logiciel Gammu.
Pour développer RaspiSMS, nous avons utilisé ce dongle 3G/GSM produit par Huawei et compatible avec la Raspberry Pi. Il ne nous a jamais posé de problème, et nous sommes sûrs qu’il fonctionne. Nous vous le recommandons donc.

Dernier point, les dongles 3G/GSM consommant un petit peu, assurez-vous d’avoir une bonne alimentation pour vôtre Raspberry Pi (au besoin, allez voir ici).

Page d'accueil de RaspiSMS

Petite capture d’écran de la page d’accueil de RaspiSMS, avec la courbe d’envoi et de réception des SMS.

Installer RaspiSMS

Il existe deux façons d’installer RaspiSMS sur un système. Soit en utilisant le paquet Debian. Soit en utilisant l’archive « .tar.gz ».
Dans le cadre d’une installation sur une Raspberry Pi utilisant Raspbian, ou tout autre système utilisant une distribution dérivée de Debian, nous vous conseillons d’employer le paquet Debian. Cependant, pour une distribution de type RedHat par exemple, vous devriez plutôt employer l’archive.

Installation avec le paquet Debian

L’installation via le paquet Debian est très simple. Il suffit de deux commandes pour installer et configurer RaspiSMS.
Pour installer le paquet Debian, nous allons commencer par le télécharger. Pour cela, nous allons simplement utiliser la commande « wget ».

wget -O raspisms.deb http://raspisms.raspbian-france.fr/download/save/v_latest/f_deb

Une fois le téléchargement terminé, on va mettre à jour la Raspberry Pi.

sudo aptitude update
sudo aptitude upgrade

Nous allons maintenant installer RaspiSMS. Cette première installation devrait lever une erreur (que nous corrigerons après), les dépendances n’étant pas installées.
À noter, avant d’installer RaspiSMS, vous avez intérêt à connecter votre dongle 3G/GMS, afin que Gammu et Gammu-smsd soient automatiquement réglés pour l’utiliser (sinon vous devrez vous reporter à la partie correspondante dans l’installation pour l’archive .tar.gz.).

sudo dpkg -i raspisms.deb

Nous allons maintenant corriger les erreurs précédemment levées. Pour cela, nous allons utiliser la commande suivante :

sudo aptitude install raspisms

Voilà, RaspiSMS est installé et configuré, et vous pouvez y accéder à l’adresse URL « http://<VOTRE_URL>/RaspiSMS/ ».

Installation avec l’archive .tar.gz

L’installation via l’archive .tar.gz est plus complexe que celle par paquet Debian.
En effet, lors de l’installation par paquet Debian, une fois l’installation terminée, le système lance un script qui permet de configurer l’ensemble du système. Lors de l’installation via l’archive .tar.gz nous allons donc devoir effectuer l’ensemble de cette configuration nous même.
Dans un premier temps, nous allons mettre à jour la Raspberry Pi.

sudo aptitude update
sudo aptitude upgrade

La Raspberry Pi étant à jour, nous allons maintenant installer les dépendances de RaspiSMS.

sudo aptitude install apache2 php5 php5-mysql Gammu Gammu-smsd mysql-server

Maintenant que les dépendances de RaspiSMS sont installées, nous allons pouvoir les configurer.
Dans un premier temps, nous allons configurer Apache, pour activer le module de ré-écriture d’URL.
Pour cela, il suffit d’utiliser la commande suivante :

sudo a2enmod rewrite
sudo /etc/init.d/apache2 restart

Il faut également activer les fichiers « .htaccess ». Pour cela, reportez-vous à l’article dédié.
Configurons maintenant Gammu et Gammu-smsd. Pour cela, vous devez au préalable avoir connecté votre dongle 3G/GSM.
Nous allons dans un premier temps générer la configuration de Gammu et l’ajouter aux fichiers de configuration de Gammu et Gammu-smsd. Pour cela, utilisons la commande suivante :

sudo gammu-detect > /etc/gammurc && sudo gammu-detect > /etc/gammu-smsdrc

Ceci fait, nous allons ajouter dans le fichier de configuration de Gammu-smsd une ligne lui indiquant le script à appeler lors de la réception d’un SMS.
Pour cela éditez le fichier « /etc/gammu-smsdrc » avec l’éditeur de vôtre choix (par exemple nano), et ajoutez la ligne suivante :

RunOnReceive = /var/www/RaspiSMS/parseSMS.sh

Si votre carte SIM utilise un code PIN, ajoutez également la ligne suivante au fichier « /etc/gammu-smsdrc »

pin = VOTRE_CODE_PIN

Maintenant que Gammu et Gammu-smsd est configuré, redémarrez les :

sudo /etc/init.d/gammu-smsd restart

L’ensemble des dépendances de RaspiSMS maintenant installées, nous allons télécharger la dernière version de RaspiSMS sous forme d’archive.

wget -O raspisms.tar.gz http://raspisms.raspbian-france.fr/download/save/v_latest/f_targz

Le téléchargement terminé, nous allons décompresser l’archive.

tar xzvf raspisms.tar.gz

Maintenant que l’archive est décompressée, nous allons déplacer l’ensemble de ces fichiers dans le dossier contenant les sites web.

cp -r ./raspisms/RaspiSMS /var/www

Nous allons maintenant créer la base de données de RaspiSMS. Pour cela, nous allons utiliser le fichier « createDatabase.sql » de RaspiSMS, qui contient l’ensemble des requêtes permettant la création des bases. Il vous suffit donc de lancer la commande suivante et de rentrer le mot de passe root de MySQL.

mysql -u root -p < /var/www/RaspiSMS/createDatabase.sql

Ceci fait, nous allons également devoir créer un premier compte administrateur pour RaspiSMS, afin que nous puissions nous connecter. Pour cela, nous allons lancer la commande suivante :

mysql -u root -p -e "use raspisms;INSERT INTO users(email, password, admin) VALUES('<email_de_lutilisateur>', SHA1('<mot_de_passe_de_lutilisateur>'), 1)"

Nous allons maintenant configurer le fichier permettant à RaspiSMS de se connecter à la base de données. Il s’agit du fichier « /var/www/RaspiSMS/mvc/conn_bdd.php ».
Pour modifier ce fichier, nous allons simplement utiliser la commande sed (remplacez « <VOTRE MOT DE PASSE> » par le mot de passe root de MySQL.

sed -i -e "s/DATABASE_PASSWORD/<VOTRE MOT DE PASSE>/g" /var/www/RaspiSMS/mvc/conn_bdd.php

Nous avons donc maintenant un système RaspiSMS avec sa base de données configurée, les dépendances installées, il ne nous reste plus qu’à mettre en place les droits adaptés sur les fichiers.
Nous allons donc donner l’ensemble du dossier « /var/www/RaspiSMS » à l’utilisateur faisant tourner le serveur web (par défaut « www-data »), en donnant à tous le droit de lire et d’exécuter le contenu du dossier.

chown -R www-data:www-data /var/www/RaspiSMS
chmod -R 755 /var/www/RaspiSMS

Nous allons également donner le dossier « /var/www/RaspiSMS/receiveds » à l’utilisateur faisant tourner « gammu-smsd », à savoir « gammu ».

chown -R gammu:gammu /var/www/RaspiSMS/receiveds

Dernier point, nous devons dire au système de vérifier régulièrement s’il faut envoyer un SMS, ou enregistrer un SMS reçu. Pour cela, nous allons utiliser le démon « cron », qui permet de lancer de façon régulière une commande.

Nous allons donc ajouter deux lignes à la crontab. Cependant, il y a un point important, c’est que le programme doit-être appelé en tant que « root », et c’est donc la crontab de « root » que nous devons modifier.
Pour cela, vous devez donc exécuter la commande suivante pour ouvrir la crontab en édition

sudo crontab -e

Puis y ajouter les deux lignes suivantes.

* * * * * cd /var/www/RaspiSMS && /var/www/RaspiSMS/console.php -c parseReceivedSMS
* * * * * cd /var/www/RaspiSMS && /var/www/RaspiSMS/console.php -c sendScheduleds

Voilà, l’installation est terminée, et vous pouvez désormais accéder à RaspiSMS à l’adresse URL « http://<VOTRE_URL>/RaspiSMS/ ».

Conclusion

Vous avez maintenant un superbe système vous permettant d’envoyer des SMS depuis votre Raspberry Pi, d’en recevoir, et même de commander à distance votre Raspberry Pi sans avoir besoin d’internet.
Vous pouvez l’utiliser pour votre tout nouveau projet, ou simplement pour envoyer un SMS à vos amis quand vous êtes en Dordogne (qui rappelons-le est un des rares départements français ayant déjà généralisé la couverture internet, mais toujours pas la couverture réseau).

Nous espérons que RaspiSMS vous sera utile. N’hésitez pas à nous faire des remarques, des propositions, ou à parler de RaspiSMS (et pourquoi pas de Raspbian France;)) autour de vous.
Et si vous souhaitez plus d’informations, par exemple pour utiliser RaspiSMS au sein d’un projet, n’hésitez pas à aller voir la documentation ou à nous poser des questions dans les commentaires ou par mail.

The post Envoyer, gérer et recevoir des SMS avec la Raspberry Pi appeared first on Raspbian-France.

Vus : 2016
Publié par RaspbianFrance : 123