BlogDéveloppementGuides

Envoyer des sms avec un raspberry

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.

Envoyer SMS avec Raspisms

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.

Envoyer SMS avec Raspisms

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.

Envoyer SMS avec Raspisms

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.

SSD pas cher

SSD pas cher

Et pour finir, j’ai choisi un coffret électrique suffisamment grand pour recevoir le Raspberry et tout le petit matériel.

Envoyer sms avec raspisms

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.

Envoyer des sms avec raspisms

Une fois alimenté, le micro-ordinateur démarre très vite avec une mire multicolore indiquant que tout est fonctionnel…

Envoyer des sms avec raspisms

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.

Envoyer des sms avec raspisms

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.

Envoyer des sms avec raspisms

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.

Envoyer des sms avec raspisms

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…

Envoyer des sms avec 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.

Tags

5 commentaires

  1. 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.

    1. 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

  2. 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

    1. 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,

Laisser un commentaire