Born to be wired

SMS automatisé – Round two

 11 octobre 2013  Projet Serveur  Aucun commentaire

Dans mon premier article sur le sujet, j’avais promis que la suite de l’aventure se déroulerait sur une seconde maquette démontrant l’envoi de SMS grâce à l’utilisation d’un modem GSM et des commandes AT. Cette expérience constituera donc le sujet de cet article.

Comme d’habitude en retard en ce qui concerne la rédaction de mes articles (les photos que vous pourrez voir dans celui-ci ont été prises il y a pile un an), je tiens à préciser que ce retard se comble néanmoins peu à peu, avec pour effet de bord une accumulation de retard sur les interactions sociales avec les individus de mon espèce.

À la question « Pourquoi le modem GSM quand on peut déjà scripter l’envoi de SMS avec un Nokia 3310 ? », je répondrais : « Pour sa capacité à s’intégrer dans une chaîne de traitement automatisée ! Le 3310 ne fonctionne qu’avec son chargeur branché en permanence, avec les conséquences sur la batterie, et il doit être rallumé manuellement si jamais il venait à s’éteindre. Le modem GSM est alimenté par USB et sous tension dès que la machine/le serveur sur lequel il est connecté l’est aussi. »

Maintenant que tout est dit, passons au détail. J’ai choisi un modem Fastrack Wavecom en USB, ou un de ses clones, acheté à un vendeur chinois pour une somme très raisonnable sur un célèbre de site de vente aux enchères au logo multicolore et aux commissions sur les ventes outrageantes. L’appareil m’a été livré seulement deux semaines après l’achat, cette livraison dans un laps de temps si court prouve qu’il n’est pas arrivé à pied par la Chine.

Un paquet mystère en provenance de Chine.

Un paquet mystère en provenance de Chine.

Détail intéressant n°1, comme à leur habitude, les Chinois ne se prennent pas trop la tête avec la douane. La déclaration sur le paquet mentionne une valeur de marchandise de 1$, le contenu est décrit comme étant des LED, et la case « gift » est coché. Tout est fait pour que le colis passe les frontière comme une lettre à la poste, c’est le cas de le dire.

Le formulaire accolé sur le paquet suit à la lettre les préceptes du livre "Comment gruger les services de douane en loucedé", éditions Gallimard.

Le formulaire accolé sur le paquet suit à la lettre les préceptes du livre « Comment gruger les services de douane en loucedé », éditions Gallimard.

Au déballage, on retrouve le modem, son antenne amovible, un cordon USB et un mini-CD.

Pas de grosse surprise au déballage.

Pas de grosse surprise au déballage.

Détail intéressant n°2, le mini-CD inclus dans le package, auquel j’ai tenté d’accéder, comme ça pour rigoler. Évidemment, le support est blindé à craquer de fichiers tous plus chelous les uns que les autres, entre autres des bons vieux exécutables chargés à ras bord de plus de chevaux de Troie qu’il ne faudrait pour mettre à sac un pays entier. Timeo Danaos et dona ferentes, et cela s’applique aussi aux Chinois.

Double-cliquez sur n'importe quel exécutable pour transformer votre PC en robot-spammeur, plate-forme d'échange de numéros de cartes bancaires volés, et proxy pour darknet pédophile.

Double-cliquez sur n’importe quel exécutable pour transformer votre PC en robot-spammeur, plate-forme d’échange de numéros de cartes bancaires volés, et proxy pour darknet pédophile.

Par sécurité, je décide que le mini-CD ne sera plus jamais lu sur un système Windows. La lecture du support sur un système Linux, afin de fouiller si des instructions intéressantes sont présentes, ne me permet de ne faire qu’une seule découverte digne de ce nom : le support Unicode est bien opérationnel sur ma plate forme.

Et on remercie la fonction copier/coller du terminal pour naviguer dans les répertoires en chinois.

Et on remercie la fonction copier/coller du terminal pour naviguer dans les répertoires en chinois.

Le déballage effectué, il est maintenant temps de passer aux choses sérieuses, à savoir, pour commencer, le chargement d’une carte SIM dans le modem et le test de quelques commandes AT. J’ai effectué ces tests de commandes AT sous Windows.

La carte SIM B&You prête à reprendre du service.

La carte SIM B&You prête à reprendre du service.

Le but de cet article n’est pas de détailler l’utilisation des commandes AT. Quelques minutes de browsing en passant par votre moteur de recherche préféré vous conduiront directement à des tutoriels très bien faits sur le sujet, dont celui-ci que je trouve extrêmement complet.

Une fois la base des commandes AT comprises, l’envoi d’un SMS de test devient rapidement une formalité, comme l’illustre la capture d’écran ci dessous.

Envoi d'un message simple par commandes AT.

Envoi d’un message simple par commandes AT.

Un détail intéressant à propos des commandes AT, surtout à l’ère des communications internationales, est la possibilité malgré un ensemble de commandes utilisant un jeu de caractères réduit,  d’envoyer également des caractères Unicode, pour peu que le modem supporte la fonction (et que le mobile puisse les afficher). Cela se fait au travers d’une petite gymnastique de conversion décrite sur ce site. J’ai bien évidemment testé :

Envoi d'un message Unicode par commandes AT.

Envoi d’un message Unicode par commandes AT.

Et le résultat ne se fait pas attendre, les 2 SMS sont bien reçus par le mobile destinataire, ici un Nokia C7.

Réception immédiate et conforme aux messages envoyés.

Réception immédiate et conforme aux messages envoyés.

J’en sais assez, l’expérience peut prendre fin. Il est temps de confier la tâche de l’envoi à une application de plus haut niveau qui se chargera d’envoyer les commandes AT au modem pour moi. Et cette application, c’est encore une fois gnokii, sur système Linux cette fois-ci.

En premier vient la préparation du système. Si ce n’est pas déjà fait, cela consiste à ajouter les options suivantes dans le noyau Linux :

Device Drivers --->
-----USB Support --->
----------USB Serial Converter support --->
--------------- USB FTDI Single Port Serial Driver
--------------- USB Prolific 2303 Single Port Serial Driver

Si pl2303 est bien chargé automatiquement au démarrage, ce n’est pas le cas de ftdi_sio. La déclaration de ftdi_sio  dans /etc/modules permet de résoudre ce problème. J’ai aussi créé un lien symbolique /dev/wavecom vers le périphérique USB adéquat (/dev/ttyUSB0 chez moi) grâce à udev.

Enfin, le fichier de configuration de gnokii (/etc/xdg/gnokii/config sur Debian) est mis à jour de la manière suivante :

[global]
port = /dev/wavecom
model = AT
initlength = default
connection = serial
use_locking = yes
serial_baudrate = 9600

Les préparatifs sont terminés, place à l’action. On commence par tester que le lien avec le modem est fonctionnel, grâce à une commande qui retourne les principales informations liées au modem.

Modem reconnu par gnokii, numéro IMEI générique.

Modem reconnu par gnokii, numéro IMEI générique.

Détail intéressant n°3, le modem est livré avec un numéro IMEI non programmé, c’est à l’utilisateur de le faire au moyen d’une commande AT (vraisemblablement irréversible une fois effectué). Le numéro par défaut est 012345678901234. Je n’ai pas testé l’écriture d’un numéro IMEI à l’heure où j’écris ces lignes, l’envoi de SMS fonctionne très bien sans cela. Je ne pourrais que conseiller d’être prudent avec cette fonction, il serait en effet dommage d’entrer un IMEI au hasard bloqué par les opérateurs (par exemple suite à un vol de mobile). Si je devais le faire, j’utiliserais un IMEI issu d’un vieux téléphone mobile qui traine dans mes cartons, par exemple le Nokia 3310 qui m’a servi lors des tests précédents.

Avant de tenter un envoi, on prendra soin de débloquer la carte SIM en saisissant le code PIN. L’exemple suivant montre comment effectuer l’opération :

dhalsim:/# gnokii --identify
gnokiid Version 0.6.30
IMEI         : 012345678901234
Fabricant: WAVECOM MODEM
Aucune section flags dans le fichier de configuration.
Modele       : MULTIBAND  900E  1800
Nom du produit : MULTIBAND  900E  1800
Revision     : 532a09gg.2C2 182812
dhalsim:/# gnokii --getsecuritycodestatus
gnokiid Version 0.6.30
Etat du code de securite: en attente du code PIN.
dhalsim:/# gnokii --entersecuritycode PIN
gnokiid Version 0.6.30
Entrez votre code:
Code ok.
dhalsim:/# gnokii --getsecuritycodestatus
gnokiid Version 0.6.30
Etat du code de securite: rien a entrer.

On peut ensuite tester l’envoi de SMS en bonne et due forme. Pour commencer, un envoi d’un message long avec divers caractères accentués (NB : l’encodage de caractères des paramètres régionaux de ma session est l’UTF-8). Gnokii m’informe que le message a bien été envoyé en 2 parties.

Envoi d'un message avec caractères accentués par gnokii.

Envoi d’un message avec caractères accentués par gnokii.

Dans la foulée, j’en profite pour tester l’envoi de caractères un peu plus exotiques, directement depuis le shell. Celui-ci est bien envoyé également.

Envoi d'un message avec caractères chinois par gnokii.

Envoi d’un message avec caractères chinois par gnokii.

Attention toutefois, chaque idéogramme compte pour plus d’un caractère, on peut donc vite dépasser la limite du sous-message à 160 caractères en envoyant n’importe quoi. Pour ma part, bien que cela soit prévu par la norme GSM j’ai réussi à bloquer gnokii en tentant d’envoyer « 短信猫驱动与配套软件及安装说明书 ». Je n’ai pas cherché qui de gnokii ou du modem était en faute, ce genre de message n’étant pas représentatif des communications que je compte automatiser. J’aime simplement connaître les limites des systèmes que j’utilise. J’espère juste qu’un modem chinois est capable d’envoyer des message en chinois, sinon, le monde est mal barré.

Les messages correctement traités par gnokii ont bien été reçus sur le Nokia C7, avec un bémol sur le message en chinois : le mobile repère bien 4 caractères correspondant à mes 4 idéogrammes, mais ne les affiche pas. Je présume qu’il n’embarque pas la police de caractère adéquate. Décidément, Nokia, ce n’est plus ce que c’était.

Les messages envoyés par le shell sont reçus sur le mobile, et plus ou moins bien affichés en fonction du jeu de caractères constituant chacun d'entre eux.

Les messages envoyés par le shell sont reçus sur le mobile, et plus ou moins bien affichés en fonction du jeu de caractères constituant chacun d’entre eux.

La photo ci-dessus fait également apparaitre un message « Test réception SMS », que j’ai moi-même écrit à partir du mobile et envoyé au numéro de téléphone correspondant à la carte SIM à l’intérieur du modem. Le but de l’opération étant cette fois-ci de tester la réception et la récupération de messages à partir du shell. Une fois encore, c’est gnokii qui s’occupe de cette tâche. La commande permet d’afficher tous les messages enregistrés dans la boîte de réception de la carte SIM. Le message envoyé à partir de mon mobile est bien visible (tout en bas).

Dépilage des messages stockés dans la carte SIM.

Dépilage des messages stockés dans la carte SIM.

Au fait, ne vous en faîtes pas pour les impayés dont il est question dans la capture d’écran ci-dessus, le message bien qu’alarmant a été envoyé par erreur par B&You à un grand nombre de ses clients parfaitement en règle avec leurs échéances de paiement. Les malencontreuses erreurs de fonctionnement que l’on rencontre au début quand on est un nouvel opérateur sur le marché, j’imagine…

Voila pour l’instant, les résultats de ces test sont très satisfaisants. Bien sûr, il reste encore à mettre en place une architecture proposant les interfaces d’envoi et de réception à n’importe quel script ou process présent sur le système, en passant par une base de données par exemple.

C’est là qu’intervient gnokii-smsd. Mais cela sera relaté dans un article futur.

Laisser un commentaire