Pour connecter une dongle Huawei et envoyer des SMS avec une petite manipulation est nécessaire.
Voyons comment faire avec Raspbian et gammu.
Contexte
Cette procédure est compatible avec Raspbian 8 et supérieure. Elle fonctionnera aussi pour les versions inférieures à condition d'utiliser "apt-get" au lieu de "apt". Dans mon cas c'est un Raspberry Pi B+ avec Raspbian 9.
Ce tutoriel a été testé avec 2 clés 3G Huawei au préalable désimlockées : E1752 (orange) et E303 (achetée sur ebay).
Pour trouver une clé compatible j'ai utilisé https://fr.wammu.eu/phones/.
Installation de usb-modeswitch
Le lecteur SD et le CDROM virtuel empêchent l'adressage de la partie modem.
Il faut installer le paquet usb-modeswitch qui permet de changer de mode :
sudo apt install usb-modeswitch
Redémarrez le Pi.
Vérifiez que la clé 3G est bien détectée :
$ dmesg | grep ttyUSB
[ 15.845570] usb 1-1.5.1: FTDI USB Serial Device converter now attached to ttyUSB0
[ 18.333407] usb 1-1.5.4: GSM modem (1-port) converter now attached to ttyUSB1
[ 18.504667] usb 1-1.5.4: GSM modem (1-port) converter now attached to ttyUSB2
[ 18.527069] usb 1-1.5.4: GSM modem (1-port) converter now attached to ttyUSB3
ttyUSB0 correspond à mon RFXCom. Les 3 suivants correspondent à ma clé Huawei. ttyUSB1 correspond au modem, les autres sont des ports séries virtuels.
Figer le chemin d'accès
Nous devons fixer le chemin afin qu'il ne change pas si d'autres périphériques sont connectés, nous choisissons ttyUSB-3G.
Il faut bien comprendre que nous allons ajouter un second chemin fixe en plus du premier qui lui restera dynamique, nous ne le remplaçons pas.
Modem (Mass Storage Mode)
Récupérez l'ID avec :
$ lsusb | grep -i huawei
Bus 001 Device 007: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem (Mass Storage Mode)
Les 2 champs qui nous intéressent sont ceux après "ID" :
- 12d1 = idVendor
- 1506 = idProduct
Fixons le chemin :
sudo nano /etc/udev/rules.d/98-usb-serial.rules
Ajoutez ceci à l'aide des 2 champs précédents :
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", SYMLINK+="ttyUSB-3G"
Redémarrez le Pi, ou bien :
udevadm control --reload-rules && udevadm trigger
Vérifiez que la clé 3G est visible sous son chemin ttyUSB-3G :
$ udevadm info --query=all --name=ttyUSB-3G | grep -i huawei S: serial/by-id/usb-HUAWEI_HUAWEI_Mobile-if00-port0 E: DEVLINKS=/dev/serial/by-path/platform-20980000.usb-usb-0:1.5.4:1.0-port0 /dev/serial/by-id/usb-HUAWEI_HUAWEI_Mobile-if00-port0 /dev/gsmmodem /dev/ttyUSB-3G E: ID_MODEL=HUAWEI_Mobile E: ID_MODEL_ENC=HUAWEI\x20Mobile E: ID_SERIAL=HUAWEI_HUAWEI_Mobile E: ID_VENDOR=HUAWEI E: ID_VENDOR_ENC=HUAWEI E: ID_VENDOR_FROM_DATABASE=Huawei Technologies Co., Ltd.
Maintenant le dongle est détecté comme "Modem/Networkcard" au lieu de "(Mass Storage Mode)".
C'est parfait, passons à la suite.
Installer gammu
Gammu permet d'envoyer et recevoir des SMS, il peut fonctionne sous forme de démon ou de programme à la demande (émission uniquement).
Vu le nombre de fichiers source gammu je préfère ne pas le compiler :
sudo apt install gammu
Configurer gammu
Pour générer le fichier de configuration de gammu :
$ gammu-config -c /home/pi/.gammurc
Je modifie uniquement :
- port : /dev/ttyUSB-3G
- Connection : 19200 (115200 fonctionne aussi mais n'apporte rien pour du SMS)
- Log File : /ramdisk/gammu.log (si vous avez un ramdisk)
- Log format : text
- Save pour finir
La clé 3G devrait maintenant être reconnue :
$ gammu identify Périphérique : /dev/ttyUSB-3G Fabricant : Huawei Modèle : unknown (E303S) Firmware : 21.158.23.00.864 IMEI : 8617370******** SIM IMSI : 2081501********
Envoyez votre premier SMS
Rien de plus simple :
$ gammu sendsms TEXT 0612345678 -text "coucou"
ou :
$ echo -e "coucou\nRetour ligne" | gammu -c /home/pi/.gammurc sendsms TEXT 0612345678
Vous devriez aussi avoir quelque chose dans le log /ramdisk/gammu.log si activé.
Je referai un billet dédié sur l'utilisation de scripts pour envoyer des SMS et l'intégration avec Domoticz, en attendant retrouvez les scripts chez arno0x0x.
Reset
Faire un reset gammu :
sudo /usr/sbin/usb_modeswitch -W -v 12d1 -p 1506 -R
Note : 12d1 correspondant à idVendor et 1506 à idProduct (voir plus haut dans le billet), remplacez ces valeurs avec celles de votre dongle pour que cela fonctionne
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
24 commentaires
Merci pour cette explication bien utile. Je vais la garde sous le coude.
😀
tu peux lancer les commandes suivantes pour prendre en compte tes règles udev et ne pas avoir à redémarrer :
udevadm control --reload
udevadm trigger
voir même tester avant tes règles avec udevadm test ...
@Raoul: merci!
Bonjour,
Les clés que tu cites, elles sont desimlockées de base ou bien il y a une manip à faire ? J'ai un sim free.
@Ludo: elles sont simlockées mais ça se desimlock facilement indépendamment de l'opérateur
Bonjour, Mon google Huawei E169 est très instable et je n'arrive pas à fixer le bug. Le dongle est sur un hub usb alimenté pour éviter des problème de charge. Au début, tout fonctionne parfaitement en envoie et en reception de messages puis, dans la nuit, plus rien ne fonctionne malgré la règle pour stabiliser l'USB. J'ai pourtant vraiment besoin qu'il soit stable. Or, entre temps, le port USB semble avoir beaucoup changé.. est-ce là le problème ?
Ci-dessous quelques précisions de configuration. Une idée de ce qui ne va pas, je suis à court d'idée.
Merci
---
La version de mon raspberry est :
Linux raspberrypi 4.9.80-v7+ #1098 SMP Fri Mar 9 19:11:42 GMT 2018 armv7l GNU/Linux
---
Ce matin , le dongle n'est plus reconnu :
gammu --identify
Error opening device, it doesn’t exist.
---
J'ai pourtant défini une règle :
cat /etc/udev/rules.d/98-usb-serial.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1001", SYMLINK+="ttyUSB-3G"
---
Le service tourne :
ps -elf|grep gammu
1 S root 19612 1 0 80 0 - 7005 - 04:46 ? 00:00:08 /usr/bin/gammu-smsd --pid=/var/run/gammu-smsd.pid --daemon
---
et mon port logique est là :
ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Mar 23 05:20 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 Mar 23 05:20 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 Mar 23 05:20 /dev/ttyUSB2
lrwxrwxrwx 1 root root 7 Mar 23 05:20 /dev/ttyUSB-3G -> ttyUSB1
---
mon fichier de config:
et le second :
cat /etc/gammu-smsd
[gammu]
device = /dev/ttyUSB-3G
name = Phone on USB serial port ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ HUAWEI_Mobile
connection = at
@yannT: ces dysfonctionnements sont liés au dongle, j'en ai aussi de mon côté et la seule solution c'est de rebooter le Pi de temps en temps. Si tu veux quelque chose de fiable il faut partir sur la carte NadHat https://www.framboise314.fr/carte-nadhat-pour-envoyer-et-recevoir-des-sms-avec-le-raspberry-pi/
Bonjour,
Super tuto, mais... je pense que j'ai un problème de code pin à l'envoi de mon message qui se traduit par l'erreur suivante :
Failed to get SMSC number from phone.
A quel niveau je renseigne le code pin dans le paramétrage ?
@Gardaux: bonjour,
quel est votre dongle ?
pour vérifier que c'est bien le code PIN qui bloque supprimez-le à partir d'un téléphone et ré-essayez.
Sinon autre piste : https://forum.raspberry-pi.fr/t/modem-gsm-non-reconnu/1506/27
Merci pour votre réponse rapide.
mon dongle est un E3531.
Après avoir désactivé le pin tout à l'air de fonctionner correctement.
Je suis fortement intéressé par votre information : "Je referai un billet dédié sur l'utilisation de scripts pour envoyer des SMS et l'intégration avec Domoticz, en attendant retrouvez les scripts chez arno0x0x."
J'attends cela avec impatience...
@Gardaux: bonne nouvelle! Pour le reste je vais essayer de publier ça rapidement car ça commence à faire
@Mr Xhark: Génial j'ai hâte !!!
En attendant la suite j'ai essayé un script lua tout simple :
commandArray = {}
if (devicechanged['Prise_3-3'] == 'On' ) then
os.execute ('sudo gammu sendsms TEXT 06******** -text "Prise 3-3=On"')
print('log envoi SMS')
end
return commandArray
C'est un echec il me plante le rflink et n'envoie jamais le SMS.
Je continue à creuser....
@Gardaux: et en bash (terminal) ça fonctionne déjà ? tu n'as pas besoin d'être root pour utiliser gammu
@Mr Xhark: Le souci c'est que le dongle passe en veille au bout d'un certain temps et impossible de le réveiller sauf en envoyant un petit script :
Qui ne fonctionne pas sous Domoticz.
Donc du coup je suis parti sur cette commande qui fonctionne à tous les coups :
Le temps de latence est un peu plus long mais ça marche.
@Gardaux: oui ça fonctionne uniquement si tu utilises gammu avec le démon qui tourne en fond.
Personnellement j'ai résolu mon souci et j'ai ajouté en fin de billet une ligne de commande pour reset la clé sans redémarrer le Raspberry Pi
Bonjour,
j'ai une question est-ce que le rpi peut être connecté à internet avec le dongle en même temps, mon but serait un rpi connecté au web avec la cle 4g et pouvoir recevoir et envoyé des sms (c'est mon tél qui recevrait les sms du rpi et moi qui enverrait des sms en réponse au rpi)
@bobbi: je ne vois pas d'inconvénient, cela devrait marcher
Bonjour, merci pour ce super tuto, il m'a bien aidé pour débuter avec Gammu!
J'ai deux clé différentes une 3G Huawei E3531, une 4G Qualcomm.
J'ai deux questions, une directement sur le tuto et une autre plus matériel.
Tuto :
L'objectif de fixer le chemin est-il bien en cas ou on enlève et remet la clé USB d'avoir toujours le même chemin pour le paramètre P de gammu-config? (car il est vrai que si on fait cela on passe de ttyUSB0 à ttyUSB1,...)
J'ai ceci dans le fichier : /etc/udev/rules.d/98-usb-serial.rules
SUBSYSTEM=="tty", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="6000", SYMLINK+="ttyUSB-4G"
SUBSYSTEM=="tty", ATTRS{idVendor}=="1201", ATTRS{idProduct}=="1001", SYMLINK+="ttyUSB-3G"
Chez moi (ou est-ce dû à une nouvelle version Gammu ) cela ne fixe rien et du coup :
et bien sûr impossible de mettre le paramètre P à ce périphérique... Je suis obligé de régler P à /dev/ttyUSB0.
La question matériel concerne ma clé 4G :
lors de la 1er connexion elle prend le chemin [gammu] /dev/ttyUSB0 et dans ce cas lors de l'envoi d'un SMS (qui fonctionne) elle ne voit jamais le retour réseau et je suis obligé de faire CTRL+C pour sortir de la commande (si je ne le fais pas (par exemple dans un script impossible à faire ) la clé reste en attente indéfiniment).
Mais là ou cela devient bizarre (enfin pour moi) c'est que si je retire la clé puis je la remets elle prend le chemin indiqué dans [gammu1] /dev/ttyUSB 1 ou /dev/ttyUSB2 et là c'est super chaque SMS est envoyé et elle voit bien le retour réseau donc je peux envoyer autant de SMS que je veux...
Si quelqu'un a une idée et solution pour fixer ce soucis...
Merci
PS: pour ne pas faire que demander des choses voici une petite astuce pour envoyer des SMS faisant plus de 156 caractères (mais moins de 400).
Il est normalement impossible d'envoyer des SMS de plus de 160 caractères, en utilisant cette commande on peut pousser jusqu'à 400 caractères :
gammu sendsms TEXT 0612345678 -len 400 -text "Test 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
Voilà si jamais cela peut aider quelqu'un!
Bien entendu je n'ai pas inventer cette astuce en voici la source :
https://stackoverflow.com/questions/59947134/sim900-send-sms-over-160-characters-using-gammu
Merci
@Mangin-voirin: oui le but est bien de fixer le chemin du périphérique.
As-tu bien installé usb-modeswitch ? Il faut que tu regardes ton chemin via la commande dmesg au moment où tu insères la clé.
Les clés huawei sont particulièrement capricieuses et il vaut mieux passer sur une vraie passerelle SMS. Sinon tu peux essayer RaspiSMS
Merci pour l'astuce de +160 caractères, je ne connaissais pas et je confirme que ça fonctionne (gammu envoie plusieurs SMS mais le téléphone les réassemblent)
Merci pour ta réponse.
J'ai bien installé usb-modesswitch :
usb-modeswitch est déjà la version la plus récente (2.5.2+repack0-2).
J'ai ce retour (avec actuellement la clé Huawei branchée, j'ai le même genre avec la clé 4G Qualcomm)
pi@raspberrypi:~ $ dmesg | grep ttyUSB
[ 10.171378] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[ 10.171690] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[ 10.171935] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB2
D'autres pistes à explorer?
Merci
@Mr Xhark:
Bonjour, merci pour ta réponse.
J'ai bien usb-modeswitch d'installé :
usb-modeswitch est déjà la version la plus récente (2.5.2+repack0-2).
Et j'ai actuellement la clé Huawei de branchée (mais j'obtiens la même chose avec la clé 4G Qualmcomm):
pi@raspberrypi:~ $ dmesg | grep ttyUSB
[ 10.171378] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[ 10.171690] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[ 10.171935] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB2
Si tu as d'autres pistes...
Merci d'avance
Bonjour,
Merci beaucoup pour ce tuto 🙂
En cas de code PIN, on peut le fournir avec la commande 'gammu entersecuritycode PIN 1234', où 1234 est à remplacer par votre code.
@WikiJM: tout à fait, cependant je préfère désactiver le PIN pour éviter les dysfonctionnements (il y en a assez comme ça en fonction du dongle utilisé)