Notification par SMS
Présentation de la fonction
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 :
- Une hausse anormale de température de la carte (mesurée par le capteur 1 Wire ou mesurée par le Raspberry Pi lui-même)
- Redémarrage du relais (redémarrage automatique par le watchdog)
- Une ouverture de la porte de votre relais radio
- Une commande DTMF à droit Sysop (gestionnaire de relais) est exécutée
Prérequis
- Il vous faut un abonnement Free Mobile (fonction également incluse dans l'offre 2 heures à 2 EUR)
- Le relais doit être connecté à internet (au moment de l'envoi de l’événement)
Paramétrage
Développons à présent la façon de paramétrer cette fonction de notification par SMS.
Compte Free mobile
- Connectez-vous à votre espace abonné (Mon compte) sur Free mobile
- Dans le menu
Gérer mon compte
, dansMes options
, activer la dernière optionNotification par SMS
. - Une fois activée noter la clé générée par Free est affichée.
Votre clé d'identification au service : XXXXXXXXXXXXXX
Un essai
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!
Script d'envoi de SMS
/https://github.com/hug33k/FreeMobileSMS */
- | /home/pi/sms/sms.py
#!/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
- | /home/pi/sms/config.json
{ "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"
Applications
Notification par SMS d'une commande DTMF
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.
Création de la copie de la logique de relais
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
Modification du fichier 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).
Notification par SMS du redémarrage du relais
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 ... }