Envoi de SMS via Clé Huawei E3372
Posté : sam. 28 déc. 2019 22:55
Bonjour à tous,(et bonne fêtes de fin d'année!
Je vous expose mon problème et la solution que j'y ai trouvé.
Je cherchais à réaliser un système autonome de surveillance sur batterie, avec internet via clé 4G.
J'ai été exposé a un premier problème d’accès extérieur car pas d'adresse IP dédié lorsque que l'on utilise une clé ou un forfait téléphonique ( Topic ICI) , solutionné par l'utilisation d'un tunnel PPTP (VPN)
Mon deuxième soucis est directement lié a ma clé, je souhaitais que mon système puisse envoyer des SMS ET être connecté sur le net en même temps.
Les solution RASPISMS / Gammu n'ont jamais fonctionné car ils exigent une mode "MODEM USB" ce qui est pas le cas dans ma config actuelle.
La solution consistait alors à changer le mode de fonctionnement de la clé mais dans ce cas la plus de connection internet en direct..il fallait créer un profil avec dialer etc.. bref des heures et des heures perdue et au final pas reussi a faire fonctionner ainsi.
J'ai finalement réussi à trouver un code qui utilise l'API de l'interface web de la clé , ce que je cherchais depuis de début en somme.
Le tout dans un petit code python ici sms.py durement trouvé ICI,le tout, très légèrement modifié par mes soins.
import requests, sys
import xml.etree.ElementTree as ET
msg = sys.argv[2]
phone = sys.argv[1] #To fill
ip = "192.168.8.1" #Dongle ip
#Get token
r = requests.get("http://%s/api/webserver/token" % ip)
root = ET.fromstring(r.content)
token = root[0].text
print "token", token
#Send sms
headers = { "__RequestVerificationToken": token, "Content-Type": "text/xml" }
data = "<request><Index>-1</Index><Phones><Phone>%s</Phone></Phones><Sca/><Content>%s</Content><Length>%d</Length><Reserved>1</Reserved><Date>$TIME</Date></request>" % (phone, msg, len(msg))
print data
r = requests.post("http://%s/api/sms/send-sms" % ip, data=data, headers=headers)
print "send-sms", r.headers, r.content
Ce code nécessite donc 2 arguments, vous pouvez envoyer très simplement un texto comme ceci
sudo python sms.py 0699999999 "ceci est un essai de SMS"
Seul soucis c'est le code $TIME qui ne fonctionne pas, la date d'envoi est stipulé en le 01/01/1970à 00:00:00 dans la OUTBOX SMS de l'interface web de le clé.. mais le sms est bien envoyé, ca marche chez moi en tout cas.
En espérant avoir pu aidé quelqu'un, j'ai vraiment passer des heures a faire fonctionner ce truc.. prochaine étape, lecture des SMS pour interprétation de commandes
Je vous expose mon problème et la solution que j'y ai trouvé.
Je cherchais à réaliser un système autonome de surveillance sur batterie, avec internet via clé 4G.
J'ai été exposé a un premier problème d’accès extérieur car pas d'adresse IP dédié lorsque que l'on utilise une clé ou un forfait téléphonique ( Topic ICI) , solutionné par l'utilisation d'un tunnel PPTP (VPN)
Mon deuxième soucis est directement lié a ma clé, je souhaitais que mon système puisse envoyer des SMS ET être connecté sur le net en même temps.
Les solution RASPISMS / Gammu n'ont jamais fonctionné car ils exigent une mode "MODEM USB" ce qui est pas le cas dans ma config actuelle.
La solution consistait alors à changer le mode de fonctionnement de la clé mais dans ce cas la plus de connection internet en direct..il fallait créer un profil avec dialer etc.. bref des heures et des heures perdue et au final pas reussi a faire fonctionner ainsi.
J'ai finalement réussi à trouver un code qui utilise l'API de l'interface web de la clé , ce que je cherchais depuis de début en somme.
Le tout dans un petit code python ici sms.py durement trouvé ICI,le tout, très légèrement modifié par mes soins.
import requests, sys
import xml.etree.ElementTree as ET
msg = sys.argv[2]
phone = sys.argv[1] #To fill
ip = "192.168.8.1" #Dongle ip
#Get token
r = requests.get("http://%s/api/webserver/token" % ip)
root = ET.fromstring(r.content)
token = root[0].text
print "token", token
#Send sms
headers = { "__RequestVerificationToken": token, "Content-Type": "text/xml" }
data = "<request><Index>-1</Index><Phones><Phone>%s</Phone></Phones><Sca/><Content>%s</Content><Length>%d</Length><Reserved>1</Reserved><Date>$TIME</Date></request>" % (phone, msg, len(msg))
print data
r = requests.post("http://%s/api/sms/send-sms" % ip, data=data, headers=headers)
print "send-sms", r.headers, r.content
Ce code nécessite donc 2 arguments, vous pouvez envoyer très simplement un texto comme ceci
sudo python sms.py 0699999999 "ceci est un essai de SMS"
Seul soucis c'est le code $TIME qui ne fonctionne pas, la date d'envoi est stipulé en le 01/01/1970à 00:00:00 dans la OUTBOX SMS de l'interface web de le clé.. mais le sms est bien envoyé, ca marche chez moi en tout cas.
En espérant avoir pu aidé quelqu'un, j'ai vraiment passer des heures a faire fonctionner ce truc.. prochaine étape, lecture des SMS pour interprétation de commandes