PAW : envoi de notifications ou d’actions par SMS4 minute(s) de lecture

Le troisième exercice lié à PAW consiste a programmer la fonctionnalité d’envoi de SMS.  Le principe est simple.  Le serveur domotique devant m’alerter par SMS d’un incident survenu se connecte en HTTP au serveur PAW.  En le contactant sur la page dédiée, il lui communique le numéro de téléphone du destinataire ainsi que le message à transmettre.  PAW prend alors relai et effectue l’envoi du SMS au numéro de téléphone. Voyons comment faire.

Le script du jour apporte les spécificités suivantes:

  • Pouvoir être appelé par une simple requête HTTP
  • Pouvoir passer en paramètre le numéro de téléphone à appeler
  • Pouvoir passer en paramètre le message à transmettre

Pour obtenir le service attendu encore une fois il suffit de placer le script sur le serveur et le tour est joué.

Voici le script que je vous propose:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Envoi de SMS</title>

</head>
<body>
<h1>Envoi de SMS</h1>
<bsh>
//déclarations
import de.fun2code.android.pawserver.util.*;

//récupération des paramètre d'entrée
numero = parameters.get("numero");
message = parameters.get("message");

//tests rudimentaires des paramètres
if(numero != null && message != null) {

	sendRes = SmsUtil.sendSms(numero, message);

	if(sendRes) {
		print("<p><b><font color='green'>Message envoyé à " + numero + "</font></b></p>");
	}
	else {
		print("<p><<b><font color='red'>Message en erreur pour " + numero + "</font></b></p>");
	}

}

</bsh>
<h3>Paramètres</h3>
<p>
La page prend en paramètre d'entrée les éléments suivants:<br>
<ul>
<li>numero : Le numéro de téléphone cible</li>
<li>message  : Le texte du SMS</li>
</ul>
</p>
<p>
<h3>Texte du message envoyé:</h3>
<bsh>$$.print(message); </bsh>
</p>
</body>
</hmtl>

L’installation se fait de la même manière que pour le script concernant la reconnaissance vocale.  Le prérequis est bien entendu d’avoir installé au préalable le serveur PAW sur votre téléphone Android comme présenté dans le précédent article:

  • Télécharger le code précédent et le sauvegarder le sur votre disque dur dans un fichier appelé : “sms.xhtml”
  • Se connecter au serveur PAW.
  • Accéder au gestionnaire de fichiers : Menu Media->File manager
  • Dans le répertoire /sdcard/paw/html de votre téléphone créer le répertoire “actions” s’il n’existe pas encore

  • Indiquer l’endroit de votre disque dur où se trouve le script à uploader sur le serveur PAW en cliquant sur “Parcourir”.
  • Sélectionner le fichier “sms.xhtml” et cliquer sur “Open”.
  • Effectuer l’upload en cliquant sur “Upload”.
  • Le message suivant vous confirme le chargement du script sur le serveur.

Il ne vous reste plus qu’à renseigner l’URL adéquate dans un scénario pour une Zibase ou bien dans un périphérique HTTP sur un serveur eedomus.

L’URL à renseigner sera de la forme:

http://192.168.0.10:8080/actions/sms.xhtml?numero=0602030405&message=ceci%20est%20mon%20message

Pensez à modifier “192.168.0.10” par l’adresse IP de votre serveur PAW et “0602030405” par le numéro de téléphone du destinataire du SMS.  Le contenu du message sera à préciser dans le paramètre “message”.

Pratique et simple, ce script est une alternative à SMS Gateway dont nous avons déjà parlé il y a quelques mois. Il permet à tout système pouvant communiquer en HTTP d’envoyer des SMS.

Ce script permet également faire rentrer votre prise Orange MyPlug dans votre système domotique en lui envoyant un “ON” ou bien un “OFF” par SM.  Pour cela il faut d’abord créer un actionneur HTTP dans votre environnement eedomus et lui affecter 2 valeurs, l’une pour ON et l’autre pour OFF.

Comme le montre la vidéo ci dessous voici le résultat de l’association d’une prise MyPlug et d’une box domotique eedomus.  Le tout est piloté par l’application dédiée de l’eedomus.

24 Comments

  1. antislash said:

    Bonjour,

    Très intéressant, je viens de tester avec succès cette solution. Existe t’il a votre avis la possibilité d’intercepter les sms entrants pour qu’ils soient passés à un script ?

    29 janvier 2013
    Reply
    • Avatar photo Hervé said:

      Oui c’est possible. Dans la documentation lié au développement autour de PAW on parle de cela. Je n’ai pas encore travaillé là dessus. Dès que j’aurais vu comment ça marche, je pense qu’il y aura un nouvel article. 😉

      30 janvier 2013
      Reply
      • antislash said:

        Ok, merci.
        Je vais regarder de mon coté, si j’y arrive, je vous envoie mes exemples.

        31 janvier 2013
        Reply
  2. Daniel said:

    Bonjour Hervé,
    J ai testé tous vos articles sur PAW et du coup j ai acheté un mobile Anroid dédié à ces taches en complément de la box eedomus tout cela fonctionne vraiment trés bien et c est relativement facile à metre en oeuvre.Du coup il ne manque plus que de faire décoder les SMS par paw et les transformer en requete http pour activer un périphérique via l api eedomus.

    5 février 2013
    Reply
    • Avatar photo Hervé said:

      Bonjour Daniel,
      La réception des SMS est en cours… 😉

      6 février 2013
      Reply
  3. Daniel said:

    Bonjour Hervé,
    merci pour votre réponse je suis impatient.
    Superbe travail tout au long des articles sur Abavala.
    c est un site de référence !

    7 février 2013
    Reply
    • Avatar photo Hervé said:

      Bonjour Daniel,
      Ça avance, ça avance car je sens la pression qui monte! 😉

      11 février 2013
      Reply
  4. pikat said:

    Je n’avais pas encore testé….. tout simplement génial !!!!!
    MERCI et bonne continuation.

    16 mai 2013
    Reply
    • Avatar photo Hervé said:

      Je t’en prie! Fais-en bon usage.

      21 mai 2013
      Reply
  5. Philippe said:

    Super application en complément de mon Eedomus…
    Et les tutos, extras! merci

    J’ai vu qu’il était possible de lancer une application android depuis le serveur paw.
    Est il possible de la lancer via une requette http?

    Merci d’avance

    11 juillet 2013
    Reply
    • Avatar photo Hervé said:

      Si c’est possible de lancer une application android depuis PAW, ça ne doit pas être trop compliqué de l’enrober d’une script permettant de l’appeler via une requête http. Je n’ai pas trop regardé ce côté. Ce serait pour quel besoin?

      16 juillet 2013
      Reply
      • Philippe said:

        Bonsoir Hervé

        J’ai cherché,mais j’ai rien vu là dessus !
        A savoir que je ne suis pas un dieu de l’informatique et des codes! 🙂
        Si tu as un moment, je veux bien un peu d’aide…je souhaite lancer ponctuellement une appli android qui se connecte à mon onduleur PV et envoie les données automatiquement vers PVoutput.(des fois cette application se coupe toute seule, j’aimerais donc pouvoir la relancer à distance quand je ne suis pas là ! )

        En te remerciant, d’avance…

        17 juillet 2013
        Reply
        • Philippe said:

          Je relance…on ne sait jamais!…;-)

          2 septembre 2013
          Reply
  6. Jean-Jacques said:

    Bonsoir et merci pour cette documentation sur l’utilisation de Paw.
    Je l’utilise avec une box HC2 de Fibaro et cela fonctionne avec un module virtuel dans la mesure où l’on envoie la ligne de commande http au format string… mais gros inconvénient on ne peut inclure une variable.
    J’ai donc essayé en LUA, mais cela ne fonctionne pas. J’ai posté sur un forum français, mais pas de réponse (et je ne maîtrise pas l’anglais pour participer au forum de fibaro)
    Voici le code LUA (sans utilisation de variable pour l’instant)… et merci par avance !
    –[[
    %% properties
    %% globals
    –]]
    HC2 = Net.FHttp(“192.168.1.32”,8080)
    response = HC2:GET(“/actions/sms.xhtml?numero=0699999999&message=FIBARO%20MESSAGE%20DE%20TEST”)

    13 décembre 2013
    Reply
  7. Jean-Jacques said:

    J’ai la réponse à ma question précédente : apparemment un bug du code Lua de Fibaro, qui devrait être corrigé.
    Sur le forum de Fibaro, on trouve une solution de @Krikroff avec un addon
    Cordialement

    18 décembre 2013
    Reply
  8. K said:

    Bonsoir,

    Petit déterrage car je suis en train de tester PAW qui semble correspondre à mon besoin.

    Pensez-vous qu’il soit possible d’envoyer cette requette HTTP depuis une machine située hors du LAN ? (je souhaiterais avoir des notifications pour une machine située hors de chez moi)

    Cordialement

    23 janvier 2014
    Reply
  9. LACOSTE said:

    Bonjour,
    J’ai installé un Samsung Galaxy SII sur un serveur TSE et j’ai installé Paw Server. Tout est configuré comme vous l’indiquez.
    J’ai créé et importé le fichier sms.xhtml dans le répertoire que j’ai créé sous /sdcard/paw/html/actions/.
    J’ai développé des logiciels sous Access 2007 en VBA avec des tables SQL Server. Je veux pouvoir envoyer des SMS via l’URL mais cela ne fonctionne pas.
    Actuellement l’hébergeur de mon site internet ma communiqué une URL que j’utilise pour envoyer des SMS et cela fonctionne sauf que cela me coûte cher.
    Mon script est le suivant :

    Public Function Test_SendSMS(ByVal SMS_Numero As String, ByVal SMS_Message As String, Optional ByVal SMS_CoupeA160Characteres As Boolean = False)

    On Error Resume Next

    Dim SMS_URL As String, SMS_MessageEncode As String
    Dim http As MSXML2.ServerXMLHTTP

    If SMS_CoupeA160Characteres = True Then
    SMS_MessageEncode = URLEncode(OteAccents(Left$(Replace(Replace(SMS_Message, vbCrLf, “. “), “/”, “-“), 160)))
    Else
    SMS_MessageEncode = URLEncode(OteAccents(Replace(Replace(SMS_Message, vbCrLf, “. “), “/”, “-“)))
    End If

    If AJC_Nz(Len(OteAccents(Replace(Replace(SMS_Message, vbCrLf, “. “), “/”, “-“))), 0 > 0) Then

    SMS_URL = “http://PawAdresseIP:8080/actions/sms.xhtml?numero=” & SMS_Numero & “&message=” & SMS_MessageEncode

    Set http = New MSXML2.ServerXMLHTTP
    http.Open “POST”, SMS_URL, False
    http.send

    ‘ En cas de réussite, le code renvoyé est 200
    If (http.Status = 200) Then
    ‘ Afficher la réponse du serveur dans la fenêtre Exécution
    SendSMS_AJC_ReponseLong = http.responseText

    If (http.responseText = 1) Then
    SendSMS_AJC_ReponseTexte = “Réponse HTTP : ” & http.StatusText & ” le SMS a été envoyé.”
    ElseIf (http.responseText = 0) Then
    SendSMS_AJC_ReponseTexte = “Réponse HTTP : ” & http.StatusText & ” – erreur lors de l’envoi du SMS.”
    ElseIf (http.responseText = -1) Then
    SendSMS_AJC_ReponseTexte = “Réponse HTTP : ” & http.StatusText & ” – problème d’identification au WebService.”
    Else
    SendSMS_AJC_ReponseTexte = “Réponse HTTP : ” & http.StatusText & ” – aucune information communiquée.”
    End If
    Else
    SendSMS_AJC_ReponseTexte = “Réponse HTTP sur l’Erreur : ” & http.Status & ” – ” & http.StatusText
    End If

    Set http = Nothing
    End If

    End Function

    Le problème est que cela ne fonctionne pas.
    Peux-tu me donner un coup de main ?

    Je t’en remercie à l’avance.

    JCL

    5 juillet 2014
    Reply
    • Avatar photo Hervé said:

      Bonjour,
      Désolé, je ne connais pas trop VBA et n’ai pas Access 2007. Peut-être d’autres lecteurs pourront t’aider?

      7 juillet 2014
      Reply
  10. jCL said:

    Le principe est assez simple. Cela ressemble à du VB.
    Je pense que le script sms.HTML ne fonctionne pas!

    8 juillet 2014
    Reply
  11. jCL said:

    Quelqu’un a t’il testé le script SMS.xhtml ? Il me semble qu’il ne fonctionne pas lorsque l’on veut exécuter l’irlandais sous un script vba.
    J’arrive à faire fonctionner un lin URL SMS que m’a communiqué mon hébergeur mais le script sms.xhtml ne répond pas.
    Quelqu’un a t’il essaye ?
    Merci.

    11 juillet 2014
    Reply
  12. Gice said:

    Bonjour
    Je réactive ce post afin de savoir si quelqu’un a une idée pour provoquer le “raccrochage” du mobile via un script.
    Je m’explique, je voudrai au moment du déclenchement de mon alarme executer une appel vocal sur un numéro paramétré afin d’être prévenu de l’alerte car je suis dans un coin où les SMS ne passent pas.
    Ca, ca marche bien avec la fonction CALL de PAW. Par contre si personne ne répond au numéro paramètré, la messagerie vocale décroche comme si c’etait une personne et la communication est enclenchée sans que je puis plus rien faire. Je crains donc pour mon forfait mobile.
    C’est pour ca que je souhaiterai focer la fin de la communication du tel mobile au bout de 3mn.
    Quelqu’un a t’il une idée ou connaitrait la fonction PAW qui va bien ?

    13 novembre 2014
    Reply
  13. mickael said:

    bonjour,
    j’essaye d’installer paw depuis quelque jours mais j’obtiens ce code erreur
    Got the error: Not Found
    while trying to obtain /actions/sms.xhtml

    pourtant j’ai verifier 3 fois j’ai bien suivis le tuto a la lettre, y a t’il une suptilité que j’aurai zappé? car je ne suis pas balaise en informatique,
    merci

    19 novembre 2014
    Reply
  14. Fred said:

    Mickaël
    Vérifie que le fichier action est bien au bon endroit, dans html.
    J’ai eu la meme erreur car je l’avais placé un cran plus haut …
    Ça fonctionne bien maintenant.

    26 novembre 2014
    Reply

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Prouvez que vous êtes humain: * Time limit is exhausted. Please reload CAPTCHA.