====== 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). {{ :documents:logo-free-mobile.png?direct&200|}}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 [[https://mobile.free.fr/moncompte/|Free mobile]] - Dans le menu ''Gérer mon compte'', dans ''Mes options'', activer la dernière option ''Notification 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 login * ''pass'' : 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 *****/ #!/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" ==== 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 ... }