Pour les abonnés français du réseau Free mobile, vous disposez d'une fonction de notification par SMS d’événements incluse à l'abonnement. Elle permet d'envoyer un message SMS sur votre téléphone (uniquement sur votre ligne d'abonné Free, pas vers d'autres destinataires). Voici quelques idées d'application de cette fonction d'alerte pour votre relais radio :
Développons à présent la façon de paramétrer cette fonction de notification par SMS.
Gérer mon compte
, dans Mes options
, activer la dernière option Notification par SMS
.Votre clé d'identification au service : XXXXXXXXXXXXXX
L'envoi du SMS se fait en appelant le lien suivant : https://smsapi.free-mobile.fr/sendmsg avec les paramètres suivants :
user
: votre loginpass
: votre clé d'identification générée automatiquement par notre service (notée préalablement XXXXXXXXXXXXXX)msg
: le contenu du SMS encodé sous forme d'url (Percent-encoding)
Exemple : Envoyer le message “Hello World !” sur votre mobile :
https://smsapi.free-mobile.fr/sendmsg?user=98765432&pass=XXXXXXXXXXXXXX&msg=Hello%20World%20!
/https://github.com/hug33k/FreeMobileSMS */
#!/usr/bin/python2.7 import json import sys import urllib class FreeMobileSMS(): def __init__(self, config="config.json"): self.baseURL = "https://smsapi.free-mobile.fr" self.route = "/sendmsg" self.file = config self.codes = [200, 400, 402, 403, 500] self.messages = ["Message send", "Missing parameter", "Too much messages send", "Service not enable", "Server not available"] try: configFile = open(self.file) dataFile = json.load(configFile) self.login = dataFile["login"] self.token = dataFile["token"] except: raise Exception("Error with file " + self.file + "\n") def makeRoute(self, message): route = self.baseURL + self.route route += "?user=" + self.login route += "&pass=" + self.token route += "&msg=" + urllib.quote(message) return route def checkCode(self, code): index = self.codes.index(code) if index >= 0: return self.messages[index] else: return "Error message not found" def send(self, message): route = self.makeRoute(message) res = urllib.urlopen(route) code = int(res.getcode()) message = self.checkCode(code) return code, message def usage(): print("Usage :") print("./sms.py [--config=file] message") if __name__ == '__main__': if len(sys.argv) > 1: config = "config.json" for arg in sys.argv: if arg.startswith("--config="): tab = arg.split("=") if (len(tab) > 1 and len(tab[1])): config = tab[1] sys.argv.remove(arg) else: usage() sys.exit(1) sms = FreeMobileSMS(config) code, message = sms.send(sys.argv[1]) print (str(code) + " " + message) else: usage() sys.exit(1)
Fichier de configuration de votre ligne
{ "login": "98765432", "token": "XXXXXXXXXXXXXX" }
Pour lancer un message SMS, la commande est alors la suivante :
python /home/pi/sms/sms.py "Message SMS de notification"
Pour spécifier un fichier de configuration particulier. Cela peut être le utile pour sélectionner une destination, si vous avez plusieurs lignes téléphoniques.
python /home/pi/sms/sms.py --config=/home/pi/sms/my_config.json "Message SMS de notification avec un chemin de fichier de configuration"
Pour avoir un message lors de la réceptions des commandes DTMF par le relais (par exemple 123#), nous allons insérer dans le fichier Logic.tcl la ligne d'exécution du script d'envoi de sms.
Copier le fichier Logic.tcl
dans un sous-répertoire local
. Cela nous permet de ne jamais modifier le fichier Local.tcl
livré à l'installation de SvxLink (qui reste disponible à la consultation dans /usr/share/svxlink/events.d/
.)
cd /usr/share/svxlink/events.d/ sudo mkdir local cp Logic.tcl ./local/Logic.tcl
Dans le fichier Logic.tcl
, rechercher la fonction qui va traiter nos commandes distantes lors de la réception de codes DTMF dtmf_cmd_received
, puis intégrer y le bout de code suivant.
proc dtmf_cmd_received {cmd} { .... exec python /home/pi/sms/sms.py --config=/home/pi/test/config.json "Commande DTMF : $cmd"; .... return 0 }
La valeur du code DTMF reçu sera intégrée dans le message SMS (variable $cmd).
Pour être notifié du redémarrage du relais (causé par une action manuelle ou par le chien de garde en automatique), il vous faut ajouter ces deux lignes de commandes /usr/share/svxlink/events.d/local/Logic.tcl
.
proc startup {} { ... set heure [clock format [clock seconds] -format "%H%M"] exec python /home/pi/sms/sms.py --config=/home/pi/test/config.json "Redemarrage du relais à $heure"; #permet de préciser l'heure de redémarrage ... }