Envoyer des sms avec un Raspberry PI

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 des SMS avec un Rasberry

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 des SMS avec un Rasberry

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 des SMS avec un Rasberry

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.

Envoyer des SMS avec un Rasberry

Envoyer des SMS avec un Rasberry

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

Envoyer des SMS avec un Rasberry

Envoyer des SMS avec un Rasberry

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 un Rasberry

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

Envoyer des SMS avec un Rasberry

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 un Rasberry

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 un Rasberry

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 de 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 un Rasberry

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/sda2 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 
/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écédemment :

# 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 un Rasberry

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.

Envoyer des SMS avec un Rasberry

Cette plateforme est conseillée pour la domotique, un autre sujet que je développerais dans un autre article.

Enregistrer un commentaire

Indiquez votre commentaire

Plus récente Plus ancienne

Formulaire de contact