seulement pour un usage privé / audience limitée
envoi de SMS au public très réglementé
gestion des STOP
sysadmin
astreinte
supervision
envoi d'alertes par SMS
sites commerciaux d'envoi
Mblox, OVH, SMSMode, Twilio, 123-SMS...
API en SMPP ou HTTP
Net::SMPP
, LWP
, SMS::Send
efficaces, bon marché (~0,06 € / SMS)
mais un peu chers à la longue
instabilité sur notre réseau inter-sites
8 alertes de non réponse
8 alertes de retour
20 fois
=> 320 SMS
une dizaine de destinaires
=> ~200 € HT
vraie raison : -Ofun
facile et amusant
coût faible
clé 3G minimale
Raspberry Pi
hub USB alimenté
première étape
passer la clé en mode modem avec usb_modeswitch
/dev/ttyUSB0
contrôlable avec des commandes Hayes (AT
)
ITU-T V.250, V.251
ETSI GSM 07.05 (3GPP TS 27.005)
ATI
AT+CPIN=0000
AT+CLCK="SC",0,"0000"
AT+CSQ
AT+CSMP=49,169,0,16
AT+CMGS="+336xxxxxxxx" <ENTER> texte ctrl-Z
accès exclusif au port série
écrire un daemon de gestion
regarder ce qu'il existe déjà
Gnokii
SMS Server Tools 3
Gammu / Wammu
paquet Debian : gnokii
gestion des appels, SMS, contacts, calendriers, logos, sonneries...
gnokii
, xgnokii
, gnocky
libgnokii
, GSM::Gnokii
orientés gestion d'un téléphone / puce GSM
daemon d'envoi et réception de SMS
base de données SQL (SQLite, PostgreSQL, MySQL)
fichiers plats
envoi avec un fichier au format :
number text
réception par exécution d'une commande :
/path/to/program number date < text
paquet Debian : sms-tools
daemon d'envoi et réception de SMS
fichiers plats dans un format pseudo MIME
To: 336xxxxxxxx Un message tout à fait innocent
To: 336xxxxxxxx Report: true Un message tout à fait innocent (mais on saura quand il aura été lu)
To: 336xxxxxxxx Ping: true
To: 336xxxxxxxx Flash: true Valider pour tout effacer
paquets Debian : gammu
, gammu-smsd
gestion des appels, SMS, contacts, calendriers...
gammu
, Wammu
libGammu
orientés gestion d'un téléphone / puce GSM
daemon d'envoi et réception de SMS
base de données SQL (PostgreSQL, MySQL, libDBI)
fichiers plats
envoi :
gammu-smsd-inject TEXT 336xxxxxxxx -unicode \ -text "C'est encore moi ! ♪~ ᕕ(ᐛ)ᕗ"
réception : directive RunOnReceive
service web (CGI) sur le Raspberry Pi
#!/usr/bin/perl use strict; use warnings; use CGI; my $cgi = CGI->new; my $to = $cgi->param("to"); my $msg = $cgi->param("msg"); my $uni = $msg =~ /[^\x20-\x7f]/; my $cmd = "/usr/bin/gammu-smsd-inject $to "; $cmd .= "-unicode" if $uni; my $tmpfile = "/tmp/text-pad.$$"; open my $fh, ">", $tmpfile; print {$fh} $msg; close $fh; my $out = `$cmd < $tmpfile`; unlink $tmpfile; print $cgi->header(-type => "text/plain"), "rc: $?\n$out\n";
utilisable par un simple curl
exemple pour Zabbix :
#!/bin/sh /usr/bin/curl -d "to=$1" -d "msg=$2" http://sms.yourdomain.local/cgi/smsgw.cgi
« j'ai combien de barres ? »
surveiller la connexion au réseau GSM
AT+CSQ
gammu-smsd-monitor
IMEI: xxxxxxxxxxxxxxx IMSI: xxxxxxxxxxxxxxx Sent: 448 Received: 0 Failed: 0 BatterPercent: 100 NetworkSignal: 71
nombre de SMS envoyés, reçus, échoués
pourcentage de réception du réseau
excellentes données à grapher
pour garder une API classique en secours