====== 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
...
}