Raspberry Pi : une passerelle pour envoyer des SMS, recevoir des SMS et déclencher des actions.
Toutes nos boxes sont capables, nativement ou grâce à différents scripts, d’envoyer des notifications. Cette fonction nécessite cependant une connexion internet active. Certaines box (je pense notamment à l’eedomus) permettent même nativement l’envoi de SMS. Mais, même problème : si la connexion internet est coupée, aucun moyen d’informer le serveur qu’il doit envoyer un SMS !
Voici donc la problématique : comment permettre à votre box domotique d’envoyer des notifications par SMS sans connexion internet ?
Mais aussi comment piloter votre installation domotique à partir de SMS si la connexion internet est coupée ?
Ca ira pour cette fois, je vous sauve gratos.
Mise à jour : puisque vous êtes équipé d’un Raspberry Pi et d’un dongle GSM, la solution la plus simple est d’utiliser la solution JEEDOM (+ plugin SMS) développée par les deux petits frenchies Loïc et Mathieu.
Prérequis
Nous avons donc besoin :
- d’un Raspberry Pi avec n’importe quelle distribution fonctionnelle (testé avec Raspbian et Squeezeplug) et évidemment configuré en IP fixe (ou IP fixée sur votre routeur grâce à l’adresse MAC, bien plus simple …)
- d’un serveur web avec PHP
- d’un dongle GSM désimlocké (testé avec une clé 3G Huawei E220)
- d’une carte SIM avec un crédit de SMS, code PIN désactivé pour faciliter les choses (mais vous pourrez toujours le spécifier dans la configuration)
- d’un peu d’huile de coude car pour l’instant toute l’installation doit se faire à la mano
Connectez votre dongle et démarrez votre bouzin…
Ouvrez une fenêtre terminal (sur mac) ou putty (sur pc). Quasiment tout se passe en lignes de commandes.
Loggez-vous en root (ou alors utilisez la commande sudo). Mettez à jour tous vos paquets puis installez gammu et son daemon gammu-smsd :
# apt-get update
# apt-get install gammu
# apt-get install gammu-smsd
Si vous n’avez pas installé de serveur web, c’est le moment :
# apt-get install lighttpd
Puis installez PHP :
# apt-get install php5-common php5-cgi php5
Puis expliquez à votre serveur d’utiliser PHP avec la commande :
# lighty-enable-mod fastcgi-php
Rechargez votre serveur web pour qu’il prenne en compte les nouveaux paramètres :
# service lighttpd force-reload
Envoyer des SMS
Avant tout il faut configurer gammu pour qu’il puisse utiliser votre dongle GSM.
Tapez dsmeg pour savoir sur quel port est connectée votre clé 3G et gardez le bien en mémoire. Il sera normalement du type ttyUSB0, ttyUSB1…
# dmesg
Editez le fichier /etc/gammu-smsdrc et dans la partie [gammu] renseignez le port que vous avez retenu tout à l’heure.
Voici l’exemple de mon fichier :
[gammu]
# Please configure this!
port = /dev/ttyUSB0
connection = at19200
# Debugging
# logformat = textall
Comme je suis une grosse quiche sur vi (l’éditeur en ligne de commandes), j’édite mes fichiers avec WinSCP. Si vous avez une méthode plus simple, n’hésitez pas à la proposer dans les commentaires et je mettrai l’article à jour.
Vous pouvez aussi ajouter votre code PIN si vous ne l’avez pas désactivé en ajoutant :
pin = XXXX
N’oubliez pas de démarrer le daemon :
# service gammu-smsd start
Vous pouvez déjà tester l’envoi de SMS avec la commande :
gammu-smsd-inject TEXT NUMERO -text "MESSAGE"
Maintenant, comment faire pour que votre box (ou autre) puisse utiliser votre Raspberry pour envoyer des SMS à partir d’une simple URL ?
Créez le fichier sendsms.php et placez-le sur votre serveur web.
<?php
$numero = $_GET['numero'];
$texte = $_GET['texte'];
echo `sudo gammu-smsd-inject TEXT '$numero' -text '$texte'`;
?>
Vous devez maintenant autoriser votre serveur web à exécuter le script gammu-smsd-inject en éditant le fichier sudoers.
Pour cela, tapez
visudo
et ajoutez à la fin
www-data ALL=(ALL) NOPASSWD: /usr/bin/gammu-smsd-inject
Ça y est, vous pouvez envoyer des SMS à partir de l’URL (en vérifiant bien le chemin vers votre fichier sendsms.php) :
http://IP-RASPBERRY/sendsms.php?numero=06xxxxxxxx&texte=votremessage
Recevoir un SMS et lancer une action avec une URL
Pour déclencher une action à la réception d’un SMS, nous allons utiliser la fonction runonreceive. Celle-ci lancera, à la réception d’un SMS, le script que vous allez spécifier dans la configuration du daemon.
Dans mon exemple, le script récupère le texte du SMS pour l’inscrire, grâce à l’API eedomus, dans un état virtuel.
Exemple : j’envoie le SMS « alarme on ». L’état virtuel de ma box prend donc la valeur « alarme on ». Dans le moteur de règles je programme l’action à lancer à partir de cet état etc.
Tout d’abord, créez le fichier script receivesms.sh et uploadez-le où vous voulez. N’oubliez-pas de vérifier que tous les utilisateurs aient bien tous les droits sur ce script.
#!/bin/sh
PROGRAM=/bin/echo
for i in `seq $SMS_MESSAGES` ; do
wget O q t 1 "http://IPEEDOMUS/api/set? action=periph.value&periph_id= XXXXX&api_user=XXX&api_secret= XXX&value=$SMS_1_TEXT" >/dev/null 2>&1
deleteallsms /var/spool/gammu/inbox/
done
Pour une question de sécurité, le script supprime automatiquement tous les SMS reçus.
Maintenant, configurez le daemon pour qu’il lance le script receivesms.sh à la réception d’un SMS en ajoutant à la fin du fichier /etc/gammu-smsdrc :
runonreceive = /dossieroùsetrouvevotrescript/ receivesms.sh
Voici l’exemple de mon fichier gammu-smsdrc complet :
# Configuration file for Gammu SMS Daemon
# Gammu library configuration, see gammurc(5)
[gammu]
# Please configure this!
port = /dev/ttyUSB0
connection = at19200
# Debugging
#logformat = textall
# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = syslog
runonreceive = /var/www/receivesms.sh
# Increase for debugging information
debuglevel = 0
# Paths where messages are stored
inboxpath = /var/spool/gammu/inbox/
outboxpath = /var/spool/gammu/outbox/
sentsmspath = /var/spool/gammu/sent/
errorsmspath = /var/spool/gammu/error/
Voilà, vous pouvez maintenant envoyer un SMS à votre Raspberry qui exécutera le script receivesms.sh à la réception ! Dans cet exemple on récupère la valeur du texte mais on pourrait aussi récupérer le numéro de l’expéditeur etc.
Pour une question de sécurité, je vous suggère d’ajouter, aux commandes que vous allez enregistrer, un mot de passe. C’est une solution simpliste mais elle aura déjà le mérite d’éviter que n’importe qui, qui trouve le numéro de téléphone de votre Raspberry, puisse désactiver votre alarme avec le simple mot clef « alarme off ».
Vous pouvez donc envoyer un SMS de la forme « motdepasse alarme off ».
Si vous jetez un coup d’œil à la documentation gammu-smsdrc, vous pouvez limiter la réception de SMS à certains numéros de téléphone enregistrés. Avec l’inconvénient de ne plus pouvoir piloter votre installation à partir de n’importe quel téléphone qui vous tomberait sous la main.
Ca y est ! Votre box est autonome en cas de coupure internet (en termes de communication, évidemment). Vous pourrez connaître l’état de votre maison et lancer des commandes, à l’ancienne sur votre 3310 !
Le SMS n’est pas mort. Vive le SMS !
N’hésitez pas à poster vos retours dans les commentaires que je mette à jour la liste des clés 3G et distributions compatibles.
janvier 01, 2015
Bonjour,
comment masquer et/ou modifier numéro emmeteur du sms svp ?
Merci
février 02, 2015
Quelqu’un a t il deja essayer en utilisant un blackberry comme modem 3G?
lsusb me fait bien apparaitre le blackberry, mais dmesg ne me fait rien aparaitere ressemblant a ttyUSB0
Est ce parce qu’il n’y a pas encore de carte SIM dans le blackberry?
avril 04, 2015
Juste une question toute simple, pourquoi un RASPBERRY PI au lieu d’une ARDUINO par exemple?
avril 04, 2015
Pourquoi un Raspberry précisement pour ce projet, au lieu d’une Arduino par exemple?
avril 04, 2015
Parce que je ne sais faire ;)
Mais aussi parce que le rasp peut aussi servir à autre chose en même temps, n’est vraiment pas cher etc…
avril 04, 2015
Merci de votre réponse, j’ai un peu chercher la problème à la question. J’ai trouvé la réponse c’est qu’avec Arduino on ne peut créer de serveur.
Mais j’ai une autre colle xD
Quand je tape la commande :
Gammu-smsd-inject TEXT 06******** -text « MESSAGE »
Je reçois un message d’erreur…
» gammu-smsd-inject[4942]: created outbox message[…] sms0.smsbackup
Que-faire ? U_u
Ps; c’est un réel plaisir que ce site soit encore actif xD merci
avril 04, 2015
Que faudrait-il ajouter à ce système pour créer un envoi de sms automatique, du genre ‘pour avertir l’utilisateur’? Merci de votre compréhension.
mai 05, 2015
Pour cela, tapez
visudo
et ajoutez à la fin
www-data ALL=(ALL) NOPASSWD: /usr/bin/gammu-smsd-inject
Je n’ai pas compris cette partie…. dois-t-on éditer le fichier sudoers … ou écrire visudo www[…] dans le terminal… ( débutant excusez-moi )
Merci de votre compréhension.
mai 05, 2015
Comment éditer le fichier /etc/sudoers… je comprends pas
mai 05, 2015
Bonsoir
Plutôt que d’utiliser vi pour modifier tes fichiers passes par nano c’est le top ;-)
mai 05, 2015
Envoyer un sms à deux personnes en même temps grâce à l’Url ? Des propositions? Kiss
juin 06, 2015
Bonjour à tous !
J’aimerais savoir si l’un d’entre vous à déjà rencontrer cette erreur lors de l’utilisation de gammu :
« Aucune réponse dans le temps d’attente spécifié : Le téléphone n’est peut-être pas connecté »
Sachant, que ça fonctionnait très bien hier et que tout est branché correctement.
Merci d’avance pour votre aide.
juin 06, 2015
Bonjour,
J’ai le même problème. Ca a fonctionné pendant quelques heures, et sans rien touché (ni niveau config, ni hardware), j’ai le même problème.
Un reboot résoud le soucis (qui revient quelques heures plus tard, laps de temps aléatoire), mais du coup ce n’est pas fiable du tout.
des idées?
octobre 10, 2015
Pour hug et jhackeur, ces clés ne sont pas très fiables, elles sont prévues pour faire de l’accès Internet ponctuel sur des Pc sous Windows. j’en ai testé pour des systèmes professionnels mais j’ai abandonné. Il faut prendre de vrais modems GSM en port série ou USB série.
novembre 11, 2015
J’utilise cette clé depuis bien longtemps maintenant sur Jeedom comme passerelle SMS et je n’ai aucun souci. Par contre je ne l’ai jamais utilisée pour accéder à internet.
novembre 11, 2015
Salut excéllent tuto !
Mais cependant je recontre un problème avec le script sur mon RunOnReceive. le script fini toujours par une erreur (process fail with exit status 1). De ce que j’ai pu lire ci et là il semblerait que ce soit dû à un problème d’autorisation, mais j’ai reglé les droits comme il le fallait (même le 777 ne marche pas).
j’ai cru lire dans un forum que aurait croisé le même problème, j’aimerais savoir comment tu as fait pour le résoucre.
Merci
novembre 11, 2015
En modifiant le fichier sudoers.
Chez moi ça n’a jamais fonctionné en n’appliquant que les droits 777.
décembre 12, 2015
Est-ce que vous sauriez comment effacer les SMS de la SIM une fois qu’ils ont été traitées ??? C’est mon seul point de blocage, et je n’y arrive pas…
Merci !
décembre 12, 2015
http://wammu.eu/docs/manual/gammu/
décembre 12, 2018
Merci pour ce Tuto. c’est vraiment cool et ça fonctionne à merveille, pour ceux qui rencontrent des problèmes, faut juste être un peu bidouilleur … ;-)