gargamel01000 Posté(e) le 10 décembre 2014 Signaler Posté(e) le 10 décembre 2014 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 Vous pouvez créer autant de bouton que nécessaire En espérant avoir pu vous être utile. 4
TonyC Posté(e) le 10 décembre 2014 Signaler Posté(e) le 10 décembre 2014 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!
jojo Posté(e) le 10 décembre 2014 Signaler Posté(e) le 10 décembre 2014 Merci beaucoup, Je vais tester cela ce WE et voir si on peut le faire avec la HCL, mais pourquoi pas ...
Lazer Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 Merci pour le partage Gargamel 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...
gargamel01000 Posté(e) le 11 décembre 2014 Auteur Signaler Posté(e) le 11 décembre 2014 Super ta fonction Lazer, Merci
jojo Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 et est-ce qu'on saurait faire qqch de similaire sur la HCL ?
gargamel01000 Posté(e) le 11 décembre 2014 Auteur Signaler Posté(e) le 11 décembre 2014 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
jojo Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 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 ). 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
gargamel01000 Posté(e) le 11 décembre 2014 Auteur Signaler Posté(e) le 11 décembre 2014 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.
Lazer Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 @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 )
jojo Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 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.
jojo Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 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.
Lazer Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 ah oui tordu 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).
jojo Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 j'ai la chance d'avoir un GSM de société, avec 2GB / mois de data dans mon forfait, et donc pour 0€
Lazer Posté(e) le 11 décembre 2014 Signaler Posté(e) le 11 décembre 2014 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
gargamel01000 Posté(e) le 12 décembre 2014 Auteur Signaler Posté(e) le 12 décembre 2014 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
Lazer Posté(e) le 12 décembre 2014 Signaler Posté(e) le 12 décembre 2014 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 )
gargamel01000 Posté(e) le 13 décembre 2014 Auteur Signaler Posté(e) le 13 décembre 2014 Merci Lazer, cela fonctionne parfaitement Encore merci de ton aide 1
Lazer Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 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é)
gargamel01000 Posté(e) le 13 décembre 2014 Auteur Signaler Posté(e) le 13 décembre 2014 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 1
jojo Posté(e) le 13 décembre 2014 Signaler Posté(e) le 13 décembre 2014 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 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. : remplacer <space> par un espace 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) 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 !) respecter SCRUPULEUSEMENT la syntaxe ci-dessus, y compris les espaces. Bon amusement 3
Berale64 Posté(e) le 31 décembre 2014 Signaler Posté(e) le 31 décembre 2014 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 ? 1
cocolabombe0 Posté(e) le 1 mars 2015 Signaler Posté(e) le 1 mars 2015 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.
jojo Posté(e) le 1 mars 2015 Signaler Posté(e) le 1 mars 2015 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 ?
cocolabombe0 Posté(e) le 1 mars 2015 Signaler Posté(e) le 1 mars 2015 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
Messages recommandés