Aller au contenu
gargamel01000

Gateway Sms Autonome

Recommended Posts

Salut à  tous,

 

pour mon premier petit tuto, je vais vous détailler la mise en place d'une passerelle SMS perso et autonome que je viens de mettre en place.

 

Cette passerelle SMS va vous permettre d'envoyer depuis le HC2 vos propres SMS gratuitement sur n'importe quel numéro de portable.

Pour ce faire vous avez besoin :

 

-d'un abonnement GSM, j'utilise le forfait à  2 euro de free, gratuit pour les freenaute.

-d'un vieux portable sous android, version 1.6 minimum

-et d'un HC2, ou de n'importe qu'elle box domotique qui sait envoyer des requêtes HTTP.

 

1- Préparation du matériel :

 

Il suffit de connecter en WIFI votre téléphone sur votre réseau, de préference avec une ip fixe ou une réservation dans le DHCP.

Installer l'application SMS Gateway de l'éditeur APK Soft à  télécharger sur le google play

 

2-Configuration du logiciel :

 

Très simple d’utilisation il suffit de paramétrer SMS Gateway pour qu’elle crée un serveur HTTP au sein de votre téléphone en lui spécifiant un port (ou laisser celui par défaut).  Votre serveur domotique communiquera avec la passerelle SMS en HTTP via ce serveur web embarqué.  Un mot de passe peut être demandé afin de limiter les accès au serveur web.  Ce mot de passe devra être spécifié dans la requête http

 

voici le lien pour configurer l'application : http://www.abavala.com/2012/07/09/sms-gateway-une-passerelle-sms-a-la-maison/

 

Du coté du HC2, il faut créer un périphérique virtuel, en indiquant l'adresse IP du téléphone et son port TCP (9090 par defaut).

Ensuite j'ai créer un bouton qui correspond à  un message prédefini

--Récupération de l'adresse IP et du Port inscrit sur le module virtuel.
--fibaro:getSelfId() retourne l'ID du module virtuel en cours.
local ip_module = fibaro:get(fibaro:getSelfId(),"IPAddress")
local port = fibaro:get(fibaro:getSelfId(), "TCPPort")
local id_module = fibaro:getSelfId()
local status = ""
local TelFred = "+3367*******"

HC2 = Net.FHttp(ip_module,port)
response ,status, errorCode = HC2:GET("/sendsms?phone=067*******&text=ceci%20est%20un%20test&password=*********")
fibaro:debug("response = " .. response)
fibaro:debug("status = " .. status)
if response ~= nill and tonumber(status)==200 then
	fibaro:debug("Succes: SMS envoyé")
else
	fibaro:debug("Error: Failed to SEND SMS")
end   

Le SMS de votre serveur domotique sera envoyé directement par la passerelle dès qu’il s’adressera à  elle via une URL de la forme:

http://***.***.***.***:9090/sendsms?phone=xxxxxxxxxx&text=ceci%20est%20un%20test&password=yyyyy

 

gallery_35_179_39415.jpg

 

Vous pouvez créer autant de bouton que nécessaire

 

En espérant avoir pu vous être utile.

 

 

  • Upvote 4

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup pour ton partage  Gargamel, dès que je mets la main sur un tel andro, je testerai ta solution qui me plait vraiment!

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup,

Je vais tester cela ce WE et voir si on peut le faire avec la HCL, mais pourquoi pas ...

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour le partage Gargamel :60:

 

Je me rend compte que j'ai ma propre passerelle qui fonctionne exactement de la même façon, mais je n'avais jamais partagé le tuto.

 

Suggestion d'amélioration : lire le message texte dans une variable globale (ce qui permet d'envoyer des SMS facilement depuis n'importe quelle autre scène avec 1 seul bouton).

local message = fibaro:getGlobal("SMS")

function urlencode(str)
	if (str) then
		str = string.gsub (str, "\n", "\r\n")
		str = string.gsub (str, "([^%w ])",
		function © return string.format ("%%%02X", string.byte©) end)
		str = string.gsub (str, " ", "+")
	end
	return str
end

local payload = "/sendsms?phone="..numero.."&text="..urlencode(tostring(message or "empty")).."&password="..password
-- puis la suite...

Partager ce message


Lien à poster
Partager sur d’autres sites

et est-ce qu'on saurait faire qqch de similaire sur la HCL ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Lazer, j'essaie de mettre en application ton code, mais j'ai une erreur

local message = fibaro:getGlobal("SMS")
local password = "*********"

fibaro:debug("message: " ..message)

function urlencode(str)
	if (str) then
		str = string.gsub (str, "\n", "\r\n")
		str = string.gsub (str, "([^%w ])")
		function return string.format ("%%%02X", string.byte) end
		str = string.gsub (str, " ", "+")
	end
	return str
end

local payload = "/sendsms?phone="..numero.."&text="..urlencode(tostring(message or "empty")).."&password="..password

HC2 = Net.FHttp(ip_module,port)
response ,status, errorCode = HC2:GET(payload)

[ERROR] 11:12:05: line 11: '' expected near 'return'

 

  

 

Une petite idée, je débute en LUA et je galère un peu

en tout cas merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Gargamel,

Une idée : par principe, j'aimerais éviter de bloquer un GSM pour cette fonctionnalité et de devoir prendre un abonnement juste pour cela (ils sont BEAUCOUP plus chers en Belgique qu'en France  :angry: ).

Pour accéder à  ton réseau de la maison, il existe des services style DinDNS.

Connais-tu un service similaire qui pourrait se connecter sur ton GSM via 3G/4G ? Ainsi pas besoin de GSM supplémentaire, ni d'abonnement suplémentaire.

Merci

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut JoJo, àma connaissance il n'existe pas de fonction type DynDNS sur un réseau GSM, pour ta question concernant la HCL, je ne pense pas que cela puisse fonctionner, étant donné que tout est en LUA, mais fait le toi confirmer par les expert du forum.

Partager ce message


Lien à poster
Partager sur d’autres sites

@Gargamel,

 

La ligne 11 correspond à  quelle ligne exactement (car sur le forum, c'est toujours décalé).

Copie/colle tous les messages que tu as dans la fenêtre de debug, ça aidera à  voir sur quoi il bloque.

Tu es certain d'avoir bien créé la variable globale "SMS" dans le panneau kivabien ?

Je précise que j'ai copié/collé ce bout de code depuis mon module virtuel, donc il doit trainer une coquille quelque part dans ton implémentation qui ne me saute pas aux yeux. Ah si, apparemment il te manque la définition de la variable "numero".

De plus, je tourne en v3.590, je n'ai pas testé ce code en v4 beta.

 

@Jojo,

 

je pense qu'on ne parle pas du tout de la même chose.

- Le tuto ici présenté est une passerelle SMS permettant d'envoyer des SMS depuis la box HC2 vers l'extérieur, permettant d'informer l'utilisateur d'un événement important (un SMS saute plus aux yeux qu'un email sur un smartphone, surtout si on est à  l'étranger sans data).

- Tu cites l'exemple inverse, qui consiste à  se connecter chez soi depuis l'extérieur, par exemple pour démarrer manuellement le chauffage à  distance, ou contrôler que tout va bien.

Après, je veux bien croire que les abonnements sont hors de prix en Belgique, on a au moins cette chance là  depuis que le boss de Free a cassé les prix en France (et en passant aussi en Israà«l avec son pote). Faut dire qu'avant on était un des pays les plus cher d'Europe (au coude à  coude avec nos amis belges ;) )

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis quelqu'un de têtu et d'impatient (je n'ai pas su attendre ce WE)

Cela marche aussi depuis la HCL  :)  :)  :) c'est un peu plus compliqué, mais je vous expliquerai ce we.

Partager ce message


Lien à poster
Partager sur d’autres sites

Non, non Lazer, je ne cherche pas àcommander ma box depuis mon smartphone par des SMS (j'ai ouvert un port sur mon router, et ne passe plus par la m..... de home.fibaro.com).

Mon idée est bien d'au lieu de faire une requête http vers une IP fixe locale, de la faire vers un host name (style DDNS) qui redirigerait la commande vers mon GSM qui est connecté en 3G (donc vers l'IP publique qu'il a sur le réseau 3G), pour qu'il s'envoie àlui-même (éventuellement) un SMS, avec tous les avantages que tu décrits.

Partager ce message


Lien à poster
Partager sur d’autres sites

ah oui tordu :D

Mais du coup, tu as besoin d'un abonnement avec la data, et ça même en France c'est un peu plus cher que le forfait 0€/2€ que l'on a (qui ne comprend que 50Mo de data... je pense que la passerelle avec l'OS Android àlui tout seul bouffe ça dans la journée sans rien faire).

Partager ce message


Lien à poster
Partager sur d’autres sites

j'ai la chance d'avoir un GSM de société, avec 2GB / mois de data dans mon forfait, et donc pour 0€  :D  :D

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai aussi un GSM de société, mais il est dans ma poche. SI je le laisse à  la maison....  comment dire..... euh.... en fait c'est pas mal, je recevrai moins d'appels :lol:

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Lazer,

 

La ligne  correspond bien à  la ligne indiquée (je l'ai modifiée à  la main)

function return string.format ("%%%02X", string.byte) end

La variable globale SMS est bien créée, et la variable numéro est bien créée également mais je ne l'ai pas insérer dans l'exemple.

J'ai juste enlevé le caractère copirigt qui est dans l'exemple de code que tu m'as donné.

 

Je  tourne également en v3.590

Partager ce message


Lien à poster
Partager sur d’autres sites

arf, je crois que j'ai compris le pb, j'avais pas fait attention en copiant/collant le texte que le forum avait remplacé automatiquement le caractère copyright.

Il faut donc le remettre aux 2 endroits où tu l'as enlevé, mais en 3 caractères : parenthèse + lettre c + parenthèse

 

comme ça, mais sans les espaces :

( c )

Partager ce message


Lien à poster
Partager sur d’autres sites

Je précise que le code de la fonction URL Encode n'est pas de moi, j'ai trouvé ça avec mon ami Google.

Merci donc àson auteur (que je n'ai pas mémorisé)

Partager ce message


Lien à poster
Partager sur d’autres sites

donc pour resumer voici le code du seul bouton de mon virtual device pour ma gateway SMS.

--Récupération de l'adresse IP et du Port inscrit sur le module virtuel.
--fibaro:getSelfId() retourne l'ID du module virtuel en cours.
local ip_module = fibaro:get(fibaro:getSelfId(),"IPAddress")
local port = fibaro:get(fibaro:getSelfId(), "TCPPort")
local id_module = fibaro:getSelfId()
local status = ""
local numero = "06xxxxxxxx"
local message = fibaro:getGlobal("SMS")
local password = "xxxxxxxxxxxxxx"

--fibaro:debug("message: " ..message)

function urlencode(str)
	if (str) then
		str = string.gsub (str, "\n", "\r\n")
		str = string.gsub (str, "([^%w ])",
		function (c) return string.format ("%%%02X", string.byte(c)) end)
		str = string.gsub (str, " ", "+")
	end
	return str
end

local payload = "/sendsms?phone="..numero.."&text="..urlencode(tostring(message or "empty")).."&password="..password

HC2 = Net.FHttp(ip_module,port)
response ,status, errorCode = HC2:GET(payload)
fibaro:debug("response = " .. response)
fibaro:debug("status = " .. status)
if response ~= nill and tonumber(status)==200 then
	fibaro:debug("Succes: SMS envoyé")
else
	fibaro:debug("Error: Failed to SEND SMS")
end   
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici, comme promis, comment faire avec une HCL.

La partie Androà¯d est parfaitement la même : SMS Gateway (http://www.abavala.c...ms-a-la-maison/)

Et dans la doc, vous trouvez ceci 

"Sur un smartphone vous pourrez également aller un peu plus loin dans la surveillance en utilisant des solutions comme on{x} par exemple afin de vous avertir lorsque le smartphone fonctionnera sur batterie (panne de courant?) ou lorsque le smartphone ne captera plus de Wifi (panne, coupure internet, brouillage).

" => GENIAL :60:  :60:
 
Pour la partie Fibaro HCL, basez vous sur le tuto que j'ai écris : Requêtes Http /get Sur Hcl
Pour ceci :
point 1 : identique que dans Tuto
point 2 : 

GET<space>/sendsms?phone=0032478xxxxxx&text=ceci%20est%20un%20test%20depuis%20Fibaro&password=xxx<space>HTTP/1.10x0D0x0AHost:<IP:port><space>0x0D0x0AAuthorization:<space>Basic<space><user:pwd inBase64><space>0x0D0x0A0x0D0x0A

 

N.B. : 

  1. remplacer <space> par un espace
  2. remplacer <command> par la commande GET à  passer (j'ai mis la bonne commande ! pour le n° de GSM, pas de + avant le code pays, mais 00, ou vous pouvez directement commencer par le préfix de l'opérateur, sauf si vous envoyez des SMS à  l'étranger)
  3. remplacer <user:pwd inBase64> en le calculant https://www.base64encode.org/. Pour user = admin; pwd = admin, le texte à  encoder est admin:admin, ce qui donne YWRtaW46YWRtaW4= (credientials de la box !)
  4. respecter SCRUPULEUSEMENT la syntaxe ci-dessus, y compris les espaces.
Bon amusement
  • Upvote 3

Partager ce message


Lien à poster
Partager sur d’autres sites

J'avais zappé ce sujet. Très bon.
Jojo le roi de la conversation LUA en HCL. :-)

 

ça me fait penser: Il y a des nouvelles du module GSM pour la HCL ?

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir, je n'y arrive pas du tout à  le faire fonctionner.

Sur mon téléphone, j'ai désactiver les connexions mobile car j'ai pris l'offre à  2€ et je veux pas de hors forfait. Si j'ai plus de wifi, pas d'envoi d'information (50mo va très vite). C'est dommage car si j'ai plus de connexion internet, je suis pas au courant mais bon.

Sur l'application, je n'ai déjà  pas l'ip affiché mais un suite de code (fe:80...........%wlan0 à  la place de 192.168.1.xx

J'ai mis une ip fixe sur le téléphone en mode wifi car je n'arrive pas à  la bloquer sur ma livebox.

J'ai suivi le tutoriel et même cocher les cases qu'il recommande.

Est ce que c'est à  cause de l'adresse que cela ne marche pas?

 

Edit: j'ai fais autrement et ça marche.

J'ai pris l'application SMS Gateway Ultimate

Ajouter un serveur et cela fonctionne parfaitement mais il a moins de protection. Il y a pas de code. 

Je n'utilise pas de variable globale donc je modifie le texte dans local message car je n'ai pas trouvé comment cela fonctionne.

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir,

Tu n'as pas besoin de connection 3G : ton HC2 se connecte en local à  ta lifebox. Ton GSM est connecté en Wifi à  ta lifebox => même s'il n'y a plus de connection extérieure internet, tu dois toujours avoir du réseau interne, et ça continue à  fonctionner.

Le code (fe:80.........) que tu dis que tu vois sur ton GSM ressemble à  s'y méprendre à  une MAC adresse.

As-tu bien pris le dernier code de Gargamel (dernier post de la page 1) ? As-tu bien créé la variable ? As-tu bien rempli les champs IP Adresse et TCP Ports du VD avc les IP et Port du TELEPHONE ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui j'ai bien pris le code de Gargamel sur le dernier post. J'ai crée la variable SMS et bien mis mon IP et le port.

Mais la variable globale est sous un chiffre. Donc il faut refaire un autre code après pour modifier la variable SMS par un chiffre:

0: message 1

1 message 2

...

Non?

 

Je viens de remettre un module en cours pour reessayé et j'ai un problème maintenant.

[DEBUG] 10:25:20: response =
[DEBUG] 10:25:20: status =
[DEBUG] 10:25:20: Error: Failed to SEND SMS

Partager ce message


Lien à poster
Partager sur d’autres sites

×