RaspiSMS ou comment faire un serveur SMS pour son installation domotique

Salutations à tous!

Aujourd’hui je vous propose de faire un serveur SMS sur une raspberry pi afin de permettre à votre installation domotique de vous prévenir lorsque des choses anormales arrivent dans votre maison.

Pour information, je me suis aidé des sites suivants pour écrire cet article:

https://raspberry-pi.fr/raspisms-raspberry-pi-sms-internet/

https://community.jeedom.com/t/sms-huawei-e3531-sim-free-retour-dexperience/20271

https://github.com/gammu/gammu/issues/490#issuecomment-598063743

https://wammu.eu/docs/manual/project/install.html

https://www.instructables.com/id/Giving-the-Raspberry-Pi-a-Serial-Modem-Using-the-H/

https://raspisms.raspberry-pi.fr/documentation/

Partie 0) Le matériel

  • Une raspiberry pi
  • Une clé Huawei E3531
  • Une carte Sim (pour ma part j’ai pris le forfait 2€ de cher free)

Partie 1) Mise en place de la Raspberry Pi

Si c’est la première fois que vous utiliser une raspberry pi, je vous propose de faire exactement comme pour la partie 1 de l’article pour la préparer.

https://miniprojets.net/index.php/2019/05/13/jeedom-ou-comment-domotiser-sa-maison-en-quelques-clics/

Partie 2) Installation de RaspiSMS

Après avoir installer la carte SIM dans la clé et l’avoir brancher sur un port USB du raspberry pi, nous pouvons démarrer la rapsberry et se connecter à elle.

La première étape, il faut que l’on permette à la raspberry de reconnaitre la clé Huawei comme un modem. Pour cela, il faut configurer l’utilitaire usb_modeswitch qui est normalement préinstallé sur les distributions raspbian.

il faut pour cela, connaitre les identifiants de la clé en faisant la commande

lsusb

Nous retrouvons dans les résultats la ligne suivante:

Bus 001 Device 007: ID 12d1:15e7 Huawei Technologies Co., Ltd.

Donc maintenant nous allons créer le fichier de configuration pour notre clé en tapant la ligne de commande

sudo nano /etc/usb_modeswitch.d/12d1:157d

il faudra copier/coller dans ce fichier les lignes suivantes (au choix, pour info la première a été testée):

TargetVendor=0x12d1
TargetProduct=0x1f01
MessageContent="55534243123456780000000000000011062000000100000000000000000000"

ou

# Huawei E3531
DisableSwitching=1
TargetVendor=0x12d1
TargetProduct=0x1001
MessageContent="55534243123456780000000000000011062000000100000000000000000000"
NoDriverLoading=1

Maintenant faites un ctrl+x pour sauver le fichier puis rebooter la raspberry avec la commande suivante:

sudo reboot

Une fois la raspberry redémarrée, vous pouvez vous reconnecter dessus et taper la commande:

ls /dev

Normalement si tout est ok, vous verrez apparaitre ttyUSB0, ttyUSB1 et ttyUSB2 dans la liste de résultat.

Maintenant que la clé est prête, nous pouvons attaquer l’installation de RaspiSMS à proprement parlé. Pour cela, il faut faire les lignes de commandes suivantes:

wget http://raspisms.raspberry-pi.fr/download/raspisms-2.0.2.deb

Cette première ligne est à adapter en fonction de la version voulue.

Actuellement RaspiSMS change de version et de fonctionnement; j’ai forker pour garder un version « Stable » et que je maitrise donc vous pouvez utiliser cette commande ci-dessous en attendant:

wget http://expe-smarthouse.duckdns.org/raspisms-2.0.2.deb

Maintenant nous pouvons procéder à l’installation de la façon suivante:

sudo apt-get update
sudo dpkg -i ./raspisms-2.0.2.deb
sudo apt-get -f install

Vous aurez plusieurs questions:

Il est possible de configurer automatiquement gammu. Pour cela, le module GSM gérant la carte SIM doit-être connecté à la Raspberry Pi. Voulez-vous le faire ? [y/n]

Tapez Y

Rentrez le code PIN de votre carte SIM. (Laissez vide si elle n'a pas de code PIN)

Mettez le code PIN de votre carte SIM à la deuxième (logique tout cela!!!)

Vous aurez aussi les lignes suivantes

Le fichier de configuration /etc/gammu-smsdrcrc a été généré correctement.
La base de données de RaspiSMS va être déployée.
Création de l'utilisateur MySQL ''raspisms''
raspisms password = SXXXXXXXXXXXXXXXXXXXXD
L'utilisateur MySQL 'raspisms' a bien été créé. Vous pouvez retrouver son mot de passe dans le fichier '/var/www/html/RaspiSMS/mvc/constants.php'.
La base de données a été correctement déployée.
La connexion a la base de données pour RaspiSMS va être configurée avec le compte root

Copier la bien en cas de problème, cela peut-être utile. Vous aurez ensuite la question suivante:

Le compte administrateur pour RaspiSMS va être créé. Choisissez une adresse e-mail et un mot de passe pour ce compte

Remplissez correctement les champs demandés en retenant bien (sinon vous serez coincé….)

Partie 3: Adaptation pour résoudre certains problèmes

Une fois l’installation faite, nous devons faire d’autres manipulations avant de pouvoir utiliser RaspiSMS correctement car en l’état, nous aurons des erreurs sur la réception des SMS. Ils seront la plupart du temps comme retour dans le debuggage de Gammu sous la forme:

Ignoring incoming SMS info as not a Status Report in SR memory.

donc nous allons devoir faire les lignes de commandes suivantes:

# stop deamon gammu
sudo systemctl stop gammu-smsd
# Suppression de la version installé par le plugin gammu
sudo apt-get remove gammu gammu-smsd python-gammu
# clone de repo officiel
git clone https://github.com/gammu/gammu.git
# installation des dependances
Sudo apt-get install cmake python-dev pkg-config libpq-dev  libcurl4-gnutls-dev libusb-1.0-0-dev libdbi0-dev libbluetooth-dev  libgudev-1.0-dev libglib2.0-dev unixodbc-dev  libmariadb-dev-compat libmariadb-dev
# Compilation
cd gammu-master
./configure
make
sudo make install
sudo ldconfig

Une fois l’installation faite, il faudra juste remettre la bonne variable dans le fichier de service de Gammu. Pour cela, on fait la commande suivante:

sudo nano /lib/systemd/system/gammu-smsd.service

et on change l’emplacement du fichier de conf en remplaçant:

EnvironmentFile=-/etc/sysconfig/gammu-smsd

par

EnvironmentFile=-/etc/gammu-smsdrc

Faites ctrl+x pour sauvegarder

il faut maintenant modifier le fichier de configuration de Gammu. Pour cela, il faut éditer le fichier /etc/gammu-smsdrc

sudo nano /etc/gammu-smsdrc

rajouter atgen_setCNMI=1,2,0,0,0 à la configuration des [gammu]. Cela doit donner un fichier qui ressemble à la configuration ci-dessous:

; Configuration file generated by gammu-detect.
; Please check The Gammu Manual for more information.

[gammu]
GammuCoding = utf8
GammuLoc = fr_FR.UTF8
device = /dev/ttyUSB0
name = Phone on USB serial port HUAWEI HUAWEI_Mobile
connection = at
atgen_setCNMI=1,2,0,0,0

[gammu1]
GammuCoding = utf8
GammuLoc = fr_FR.UTF8
device = /dev/ttyUSB1
name = Phone on USB serial port HUAWEI HUAWEI_Mobile
connection = at
atgen_setCNMI=1,2,0,0,0

[gammu2]
GammuCoding = utf8
GammuLoc = fr_FR.UTF8
device = /dev/ttyUSB2
name = Phone on USB serial port HUAWEI HUAWEI_Mobile
connection = at
atgen_setCNMI=1,2,0,0,0

# SMSD configuration, see gammu-smsdrc(5)
[smsd]
service = files
logfile = syslog
# Increase for debugging information
debuglevel = 0
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/

Sauvegardez en faisant ctrl+X.

Maintenant, on redemarre le daemon

sudo systemctl daemon-reload
sudo systemctl start gammu-smsd

Normalement tout doit fonctionner, cependant j’ai du faire une modification de droit sur le fichier parseSMS.sh (!!!cette opération est risquée!!!! car je donne full accès sur ce fichier!!!!!)

On commence par faire:

sudo -i

pour être en root puis:

chmod 666 /var/www/html/RaspiSMS/parseSMS.sh
chmod +x /var/www/html/RaspiSMS/parseSMS.sh
exit

Je sais cela n’est pas propre mais je n’ai pas trouvé l’origine du problème initial.

Là maintenant tout est OK!!!!

Partie 4) Utilisation de RaspiSMS

Pour utiliser RaspiSMS, il y a 2 moyens:

Le premier est de se connecter directement sur l’interface web de RaspiSMS avec l’adresse suivante:

http://IP:DE:VOTRE:RASPBERRY/RaspiSMS 

(exemple 192.168.1.13/RaspiSMS)

et la seconde est lui envoyer des requêtes sur l’API comme par exemple:

curl http://IPDEVOTRERASPBERRY/RaspiSMS/smsAPI/?email=EMAILDUCOMPTE\&password=PASSWORDDUCOMPTE\&contacts=Jerome\&date=2020-03-29%2020:38\&text=Texte%20du%20SMS%20à%20envoyer

Pour ma part j’utilise la première méthode pour faire du monitoring des SMS envoyé où reçu (mais il y a plein d’autres possibilités) et la deuxième méthode pour l’inclure directement dans Jeedom pour faire de la notification.

Par contre, je vous conseille de ne l’utiliser que dans votre réseau informatique directement et de ne pas l’ouvrir vers l’extérieur car l’application est encore en développement.

Voilà!!!! Vous avez tout ce qu’il faut pour faire un serveur SMS pour que Jeedom ou autres puissent vous envoyer des SMS sur des événements!

Bonne continuation et amusez vous bien!

Jérôme Ferrari

28 thoughts on “RaspiSMS ou comment faire un serveur SMS pour son installation domotique”

  1. Bonjour
    Merci pour se tutoriel qui est vraiment très explicite.
    Malheureusement je n’arrive pas a recevoir les sms sur raspisms .
    Pourriez vous m’aider car lorsque je fais
    sudo apt-get remove gammu gammu-smsd python-gammu
    Raspis sms se supprime .
    Merci

    1. Bonjour, la ligne sudo apt-get remove gammu gammu-smsd python-gammu est optionnelle. Je vais modifier mon article sous peu.

      1. Bonjour
        Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
        Bus 001 Device 004: ID 12d1:14dc Huawei Technologies Co., Ltd. E33372 LTE/UMTS/GSM HiLink Modem/Networkcard
        Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
        Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
        cordialement

        1. Bonjour,
          pouvez vous essayer de copier/coller le code suivant dans le fichier qui est ouvert lorsque vous faite la commande sudo nano /etc/usb_modeswitch.d/12d1:157d

          # Huawei E353 (3.se) and others
          TargetVendor=0x12d1
          TargetProductList= »14db,14dc »
          MessageContent= »55534243123456780000000000000011062000000100000000000000000000″
          HuaweiNewMode=1
          NoDriverLoading=1

          Pour info, Cela vient du site https://blog.seboss666.info/2018/01/modem-4g-huawei-e3372-sous-linux-pas-super-accessible/

          Après pour que l’on soit plus efficace, vous pouvez me contacter via Facebook
          Bonne journée,
          Jérôme

          1. bonjour merci de votre réponse cela ne semble pas fonctionner
            je n’ai pas facebook…
            cordialement

  2. OK merci
    il faut que j utilise une pince crocodile avec un fil et je n ‘en ai pas je reviens vers vous si besoin en tout cas merci pour tout
    cordialement très bonne soirée

      1. Bonjour la réponse est la
        Pour la E3531 :

        créer le fichier /etc/usb_modeswitch.d/12d1:1f01 avec comme contenu :

        # Huawei E3531i-2 ou E3531s-2 switch mode vers 12d1:1001 (mode GSM modem, 3 ports)
        TargetVendor=0x12d1
        Targetproduct=0x1f01
        MessageContent= »55534243123456780000000000000011062000000100000000000000000000″
        Puis débrancher et rebrancher la clé.

        source https://community.jeedom.com/t/presentation-akenad/2440/21
        Cordialement bonnes fêtes de fin d’année

  3. Bonjour, j’ai une petite problématique avec la clé Huawei E3372 – USB Network Adapter (150 Mbps, 4G LTE), White
    impossible de la voir avec ls /dev

    Avez-vous rencontré cette problématique ?

  4. Bonjour merci pour la réponse rapide,
    Oui,
    2 erreurs :
    la première lors du sudo ./send_sms.sh +3362222222 « Hello world! »

    125003

    Et ensuite impossible de brancher la masse avec la pin, je n’ai pas de pince croco mais un fil electronique, ce qui devrait faire la même chose.

    Merci pour votre réponse

    Ps le mode répondre ne doit pas bien fonctionné..

  5. comment on procède à l’étape où il faut configurer l’usb_modeswitch si on as une clé 4G D-Link modèle DWM-222 ?
    j’ai essayer ta méthode mais ttyUSBn n’apparait pas dans le dossier dev t’as une solution ?

      1. voici ce qui est indiqué en tapant lsusb (j’ai juste inséré ma clé) :
        lsusb

        Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
        Bus 001 Device 003: ID 3938:1032
        Bus 001 Device 004: ID 2001:ac01 D-Link Corp.
        Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
        Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

          1. Rebonjour sa fait longtemps un peu 🙂

            enfaite je comprend pas trop mais j’arrive à lancer des commande AT avec ma clé
            en tapant lsusb on remarque que l’id de la clé a changé

            Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
            Bus 001 Device 005: ID 2001:7e3d D-Link Corp.
            Bus 001 Device 003: ID 17ef:608c Lenovo
            Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
            Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

            et je soupçonne cette commande de permettre de changer de mode en renseignant direct l’id par défaut de ma D-Link

            sudo usb_modeswitch -K -W -v 2001 -p ac01 (si dessous c’est ce qui c’était affiché mais pas pour moi mais sa y ressemblait beaucoup)

            Take all parameters from the command line

            * usb_modeswitch: handle USB devices with multiple modes
            * Version 2.4.0 (C) Josua Dietze 2016
            * Based on libusb1/libusbx

            ! PLEASE REPORT NEW CONFIGURATIONS !

            DefaultVendor= 0x2001
            DefaultProduct= 0xab00

            StandardEject=1

            Look for default devices …
            found USB ID 2001:ab00
            vendor ID matched
            product ID matched
            found USB ID 1d6b:0002
            found USB ID 0e0f:0002
            found USB ID 0e0f:0003
            found USB ID 1d6b:0001
            Found devices in default mode (1)
            Access device 002 on bus 001
            Get the current device configuration …
            Current configuration number is 1
            Use interface number 0
            Use endpoints 0x01 (out) and 0x81 (in)

            USB description data (for identification)
            ————————-
            Manufacturer: Mobile Connect
            Product: Mobile Connect
            Serial No.: 0a37124719a7
            ————————-
            Sending standard EJECT sequence
            Looking for active driver …
            OK, driver detached
            Set up interface 0
            Use endpoint 0x01 for message sending …
            Trying to send message 1 to endpoint 0x01 …
            OK, message successfully sent
            Read the response to message 1 (CSW) …
            Response successfully read (13 bytes), status 0
            Trying to send message 2 to endpoint 0x01 …
            OK, message successfully sent
            Read the response to message 2 (CSW) …
            Response successfully read (13 bytes), status 0
            Trying to send message 3 to endpoint 0x01 …
            OK, message successfully sent
            Read the response to message 3 (CSW) …
            Response successfully read (13 bytes), status 0
            Trying to send message 4 to endpoint 0x01 …
            OK, message successfully sent
            Read the response to message 4 (CSW) …
            Response successfully read (13 bytes), status 0
            Reset response endpoint 0x81
            Reset message endpoint 0x01
            -> Run lsusb to note any changes. Bye!

            je remarque que dans /dev il y a bien les port USB ttyUSBN qui se sont activé
            et avec un programme appellé minicom
            je parvient à lancer mes commande AT
            mais je sais pas si ce que j’ai fais est propre…mais c’est déjà une bonne nouvelle !!

  6. voilà les commande AT que j’ai envoyé :
    pi@raspberrypi:~ $ minicom -D /dev/ttyUSB1

    Welcome to minicom 2.7.1

    OPTIONS: I18n
    Compiled on Aug 13 2017, 15:25:34.
    Port /dev/ttyUSB1, 11:56:33

    Press CTRL-A Z for help on special keys

    OK
    AT+CPIN?

    +CPIN: READY

    OK
    AT+CMGF=1

    OK
    AT+CMGS= »+336XXXXXXXX »

    > Hello From Raspberry

    +CMGS: 180

    OK

    sa marche super bien

  7. J’ai testé des dongle Huawei mais je ne pouvais pas envoyer/recevoir. uniquement envoyer ou recevoir en fonction de la solution choisie: gammu-smsc ou raspisms.

    J’ai finalement choisir un SIM800c (version HAT) avec gammu-smsc et tout fonctionne après quelques ajustements.
    C’est ce qui me semble être la solution la plus moderne et pérenne.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *