Gérer des SMS avec un Raspberry
Dans le cadre d’un projet domotique personnel, j’ai besoin d’envoyer et de recevoir des SMS pour m’informer des diverses alertes de sécurité ou pour le pilotage à distance de modules domotiques. L’idée d’utiliser un Raspberry PI 3 s’est naturellement imposée. C’est la première brique d’une architecture domotique que je suis en train de mettre en place au sein de mon réseau personnel.
Plateforme Raspberry PI 3 pour envoyer et recevoir des SMS
Voici un guide pour concevoir un système d’envoi et de reception SMS sous Linux Debian avec la plateforme Raspberry PI 3. Cette fois, je laisse de côté le Vintage Computing pour vous immerger dans les nouvelles technologies. Avec un prix abordable, des performances très honorables et des distributions adaptées, depuis quelques temps, le Raspberry a vraiment trouvé sa place chez les geeks et dans le monde de la micro-informatique. Pour ma part, j’y est trouvé une réelle plus value dans le domaine de la domotique.
Les prérequis matériels
Le premier objectif de ce petit projet est bien d’envoyer des SMS puis en second temps, d’en recevoir afin d’exécuter des actions sur le réseau privé. Le Raspberry est la première brique domotique de mon projet. En effet, ce serveur de communication 3G sera associé à un miniserver LOXONE dédié à l’automatisation de la maison.
Voici les pré-requis matériels. Il faut donc s’équiper d’un Raspberry PI 3, d’une carte Micro SD 8go, d’un boitier Raspberry au format Rail DIN pour l’insérer dans un coffret électrique mural, d’un convertisseur 220v/5v pour alimenter le Raspberry, d’un SSD de 30 Go pour la pérennité du stockage et d’une clef USB 3G.
J’ai donc choisi le package « Raspberry PI 3 Official Desktop Starter Kit (8GB, Black) » chez Amazon au prix de 70€. Il inclut évidement un Raspberry PI 3 avec une carte micro SD de 8 Go pré-installée Raspbian OS et NOOBS, un bloc d’alimentation micro-USB et un petit boitier standard Raspberry PI.
Ensuite, j’ai acheté un Kit d’alimentation 5V 2.4A rail-DIN de marque Mean Well, modèle DR-15-5 et son connecteur micro-USB pour 25€ chez YADOM.
Pour la partie 3G, j’ai choisi sur eBay, la clef USB 3G Huawei e353s-2 désimlockée pour 30€. Notez que j’ai pris un abonnement Free Mobile à partir de 2€ pour l’envoi des SMS.
J’ai ensuite acheté sur Amazon, un petit SSD SATA de 30go modèle A1 de marque Zheino et un câble adaptateur CSL USB3 type A vers SATA3.
Et pour finir, j’ai choisi un coffret électrique suffisamment grand pour recevoir le Raspberry et tout le petit matériel.
Installation
Avant de commencer l’installation proprement dite, j’ai connecté au Raspberry, un clavier et une souris USB ainsi qu’un écran HD. J’ai veillé aussi à connecter le Raspberry sur le réseau.
Une fois alimenté, le micro-ordinateur démarre très vite avec une mire multicolore indiquant que tout est fonctionnel…
Lorsque le logo en forme de framboise apparait sur l’écran alors je presse la touche SHIFT du clavier pour basculer en mode installation. La touche SHIFT permet de passer en mode Recovery.
Je décide de choisir une installation standard Raspbian (Linux DEBIAN Jessie pour Raspberry). Avec des rudiments informatiques, il suffit très simplement de suivre l’assistant pour finaliser sans problème l’installation de Raspbian.
Une fois l’installation terminée, connectez-vous en super-utilisateur root puis changer le mot de passe root – notez que le mot de passe du user « pi » est « raspberry » :
$ sudo passwd root
Ensuite, lancez l’assistant de configuration du Raspberry.
# raspi-config
Configurez le système en français
Configuration du clavier :
configure_keyboard >> Set keyboard layout >> Select Keyboard model : Generic 105-key (intl) PC Keyboard layout : Other Country of origin for the keyboard : French Keyboard layout : French Key to function as AltGr : The default for the keyboard layout Compose key : No compose key Use Control+Alt+Backspace to terminate the X server? : No
Changement de la langue du système :
change_locale >> Set locale >> Select Locales to be generated: [ ] en_GB.UTF-8 UTF-8 [*] fr_FR ISO-8859-1 [*] fr_FR.UTF-8 UTF-8 Default locale for the system environement : fr_FR.UTF-8
Changement du fuseau horaire :
change_timezone >> Set timezone >> Select Geographic area : Europe Time zone : Paris
Une fois de retour sur le menu, redémarrez le Raspberry…
$ sudo reboot
Maintenant, vous avez un clavier AZERTY et une interface graphique en Français ! Rebootez de nouveau.
Commencez la configuration d’usage
Ajoutez un utilisateur pour la connexion SSH et fixez l’interface en mode TEXT :
$ su - # raspi-config
Paramétrez le système comme suit :
Choisir Boot sur le mode TEXT…
Choisir SSH et « enable ».
Quitter le configurateur.
Créez un utilisateur d’usage :
# mkdir -p /home/usrwin # useradd usrwin # passwd usrwin # chown usrwin:usrwin /home/usrwin
La connexion via SSH est disponible ; l’utilisateur d’usage permet une connexion au serveur.
Configuration du réseau
Il faut absolument indiquer une adresse IP fixe sur l’interface eth0 du Raspberry.
Modifiez le fichier des interfaces réseaux comme suit :
# vi /etc/network/interfaces
Editez le fichier interfaces comme suit :
# interfaces(5) file used by ifup(8) and ifdown(8) # Please note that this file is written to be used with dhcpcd # For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf' # Include files from /etc/network/interfaces.d: source-directory /etc/network/interfaces.d auto lo iface lo inet loopback # *** default # iface eth0 inet manual # *** IP DHCP # allow-hotplug eth0 # iface eth0 inet dhcp # *** IP Statique allow-hotplug eth0 iface eth0 inet static address 192.168.0.16 netmask 255.255.255.0 gateway 192.168.0.1 allow-hotplug wlan0 iface wlan0 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf allow-hotplug wlan1 iface wlan1 inet manual wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
Annulez les logs SYSLOG pour xConsole pour éviter les messages envahissants.
Editez le fichier rsyslog.conf :
# vi /etc/rsyslog.conf
Commentez les lignes comme ci-après :
# daemon.*;mail.*; # news.err; # *.=debug;*.=info; # *.=notice;*.=warn |/dev/xconsole
Mise à jour de la distribution Raspbian
Faire un update et un upgrade des packages existants.
# apt-get update # apt-get upgrade
Installation des packages pour la plateforme SMS
Installez les packages suivants comme pré-requis à l’installation :
# apt-get install -y apt-transport-https # apt-get install -y wvdial # reboot
Installez le package RaspiSMS comme suit :
# cd /usr/share # wget http://raspisms.raspbian-france.fr/download/raspisms-2.0.deb # dpkg -i ./raspisms-2.0.deb # apt-get -f install
Modifiez le fichier de configuration gammurc :
# vi /etc/gammurc
Editez le fichier comme suit :
[gammu] port = /dev/ttyUSB2 model = connection = at19200 synchronizetime = yes logfile = logformat = nothing use_locking = gammuloc =
Modifiez le fichier de configuration gammu-smsd :
# vi /etc/gammu-smsd
Editez le fichier comme suit (notez que le code pin de la carte SIM est 1234 dans cet exemple) :
# SMSD configuration, see gammu-smsdrc(5) [gammu] port = /dev/ttyUSB2 connection = at19200 pin = 1234 [smsd] service = files logfile = /var/log/gammu-smsd.log # Increase for debugging information debuglevel = 2 RunOnReceive = /var/www/html/RaspiSMS/parseSMS.sh # 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/ pin = 1234
Configurer l’outil WVDIAL et editez le fichier wvdial.conf :
# vi /etc/wvdial.conf
Editez le fichier comme suit :
[Dialer Defaults] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 Modem Type = Analog Modem Baud = 9600 New PPPD = yes Modem = /dev/ttyUSB2 ISDN = 0
Vous pouvez dès à présent, effectuez les quelques tests de fonctionalité avec les utilitaires Gammu et Gammu-smsd (nota: 07000000 = votre numéro de téléphone) :
# gammu --identify # gammu entersecuritycode PIN 2 # echo "salut" | gammu -c /root/.gammurc sendsms TEXT 07000000 -validity 6HOURS # echo "All your base are belong to us" | sudo -u gammu gammu-smsd-inject TEXT 07000000
Vous pouvez ainsi gérer l’intégralité des SMS au travers du portail RaspiSMS. Vous pouvez aussi effectuer un test de l’API RaspiSMS à partir d’un navigateur Internet en utilisant l’URL suivante comme exemple :
http://192.168.0.16/RaspiSMS/smsAPI/?email=mon.email@free.fr&password=mon_password&numbers=07000000&text=test+ok
Booter le Raspberry à partir d’un disque
Le point faible du Raspberry, c’est sa carte Micro-SD. En effet, ces micro cartes sont peu fiables dans le temps et deviennent rapidement inutilisables après un certain nombre d’heures d’écritures ; difficile de monter un micro-serveur lorsque l’on sait qu’il plantera au bout d’un an. Par conséquent, il faut absolument installer le système sur un disque dur ou un SSD. J’ai choisi un petit SSD de 30 Go pour garantir la pérennité de l’installation. Mais il faut réaliser quelques opérations simples pour autoriser le Raspberry à booter sur un disque.
Affichez les devices présents sur le Raspberry :
# fdisk -l
Lancer l’utilitaire de partitionnement :
# cfdisk
Créez les partitions principales sur le disque. Se positionner sur les partitions /dev/sda1 et puis /dev/sda1 et effectuer successivement DELETE.
Ensuite faire NEW et partitionner une partition Swap et une partition standard Linux.
Choisir l’option NEW
Choisir partition size : 8G
Se déplacer sur Type et changer le Type en Linux Swap
Se déplacer sur FreeSpace + option NEW
Choisir partition size : 20G
Se déplacer sur Type et changer le Type en Linux filesystem
Choisir option WRITE sur chaque partition en validant avec YES
Puis choisir l’option QUIT
Préparation de la partition principale et du Swap comme suit, en sachant que le rootfs est /dev/sda1 et que le swapfile est /dev/sda2 .
# mkswap /dev/sda2 # mkfs.ext4 /dev/sda1
Copie de la partition principale qui se trouve sur la Micro-SD vers la partition principale du nouveau disque, sans oublier de redimentionner la partition rootfs. En effet, la carte Micro-SD a une taille de 8 Go contre 30 Go pour le SSD ; autant récupérer tout l’espace disque utilisable du SSD. Un resizing s’impose.
# dd if=/dev/mmcblk0p7 of=/dev/sda1 bs=512 # resize2fs /dev/sda1
Vérifiez le fichier fstab et sauvegardez l’original :
# cp /etc/fstab /etc/fstab.ORIGIN # cat /etc/fstab
Le fichier est comme suit :
proc /proc proc defaults 0 0 /dev/mmcblk0p6 /boot vfat defaults 0 2 /dev/mmcblk0p7 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
Vérifiez la partition de boot actuelle et sauvegardez l’original :
# cp /boot/cmdline.txt /boot/cmdline.txt.ORIGIN # cat /boot/cmdline.txt
Le fichier cmdline.txt est comme suit :
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Effectuez les modifications suivantes :
# vi /boot/cmdline.txt
Modifiez le fichier cmdline.txt comme suit :
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
Editez le fichier fstab comme suit :
proc /proc proc defaults 0 0 /dev/mmcblk0p6 /boot vfat defaults 0 2 #/dev/mmcblk0p7 / ext4 defaults,noatime 0 1 /dev/sda1 / ext4 defaults,noatime 0 1 /dev/sda2 none swap sw 0 0 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that
Rebootez le Raspberry pour finaliser l’installation :
# reboot
Vous êtes ainsi sur la nouvelle partition mais les fichiers sont encore avec à l’état d’origine de la carte SD. Il faut donc recommencer les modifications sur cette nouvelle partition.
Modifiez à nouveau le fichier fstab sur la nouvelle partition comme précedemment :
# vi /etc/fstab
Modifiez aussi le fichier cmdline.txt sur la nouvelle partition comme précedemment :
# vi /boot/cmdline.txt
Rebootez le Raspberry une dernière fois :
# reboot
L’installation est enfin terminée.
Aller plus loin avec la gestion des SMS
L’outil de base RaspiSMS est parfait mais demande quelques améliorations. Des scripts PERL devraient faire l’affaire pour gagner en fonctionnalités. Avant tout, j’ai créé une boite aux lettres GMAIL qui va me permettre d’envoyer des SMS par mail. Un script PERL, transformé en service (démon) devra scanner cette boite aux lettres IMAP puis convertir le mail en SMS tout en s’appuyant sur le gestionnaire RaspiSMS. J’ai aussi élaboré un autre script PERL pour capturer les SMS en arrivée afin de les interpreter sous forme de commandes et déclencher ainsi des actions ou des programmes sur le serveur. Un prochain article présentera précisément ces fonctionnalités supplémentaires indispensables.
Le portail RaspiSMS…
Conclusion
Finalement, cette plateforme est assez simple à mettre en oeuvre. Discret, ce module de communication me permet d’être informé par SMS de toutes les alertes système et pour toutes les machines sur mon réseau. Avec une consommation électrique très faible, le Raspberry est parfaitement écologique tout en étant très performant. Cette plateforme est conseillée pour la domotique, un autre sujet que je développerais dans un autre article.
Bonjour,
Excellent tuto. Il est très clair.
Je suis intéressé par votre script qui permet l’envoie de SMS à partir d’un mail.
Bonjour et merci.
Effectivement, le script est manquant. Je suis en vacances. A mon retour, je vais inserer les elements pour compléter ce petit tuto directement dans l’article. A bientot. TB
Gil,
Comme convenu, voici l’article qui traite du sujet :
http://lecafeduretro.fr/des-notifications-sms-sur-synology/
Je reste à votre dispo si question.
Bien cordialement,
Bonsoir
j’utilise un modem HSDPA 7.2Mbps
j’utilise une carte sim de Free à 2 €
j’ai installé gammu-sms
tout fonctionne correctement je peux envoyer et recevoir des sms
j’ai installé wvdial
je ne peux plus envoyer et recevoir des sms
Avez vous une idée pour ce dysfonctionnement
Cordialement
Pierre
Bonjour,
Il me semble avoir eu un probleme de ce genre…
La configuration de WVDIAL est un peu sensible car elle prends en compte les paramètres d’initialisation du modem.
Essayez de placer les parametres d’init par défaut et d’avancer pas à pas !
En fait, il faut récupérer les params d’init du modem concerné…
c’est toute la difficulté des ces installations de sticks Modem Generic « made in China ».
Cordialement,