Recycler un smartphone pour envoyer des SMS avec Home Assistant et Tasker

Home Assistant permet d’envoyer des notifications dans pleins de formats différents en utilisant des intégrations de notification. J’utilise déjà les notifications vers l’application native, ainsi que des mails ou des alertes TTS (text-to-speech) vers des enceintes connectées par exemple; mais que se passe-t-il si il n’y a plus internet à la maison ? Ou bien une coupure d’électricité ? Il est intéressant d’avoir l’information par SMS dans cette situation. Je me suis acharné à faire fonctionner plusieurs clefs 3G, sans réelle satisfaction, je n’ai jamais réussi à avoir une stabilité suffisante.

Nous commençons tous à avoir de « vieux » smartphone dans les tiroirs, voici une façon d’en recycler un : le transformer en passerelle SMS ondulée !

La solution que je vous propose ici se base sur :

Les applications Tasker coutent quelques euros, mais sont fournies à vie, sans abonnement mensuel et fonctionnent sans cloud ou autre service tier; tout fonctionne en local.

Installer et configurer Tasker

Installer Tasker et Auto Remote depuis le play store. Je vous encourage à passer par le store officiel et payer l’application. Le développeur de tasker fait un super boulot et mérite qu’on le soutienne !

La tâche tasker permettant d’envoyer un SMS

  1. Lancez Tasker et créez votre premier « profil »
  2. Choisissez la source « évènement » puis « plugins » puis « AutoRemote » et « AutoRemote »
  3. Dans la configuration du profil AutoRemote,
    1. remplir « send » dans « Message Filter »
    2. dans « advanced » > « Comm Param Prefix » renseignez notel
  4. Une fois le profil configuré, vous passez à la création de la task que vous pouvez nommer « SendSms » par ex
    1. Choisir l’action « envoyer un SMS »
    2. Dans « numéro » saisir %notel(2)
    3. Dans « message saisir %arcomm

La tâche tasker pour activer le service wifi local de autoremote

  1. Toujours dans tasker, créez un deuxième profil
  2. Choisissez « état » comme source de profil
  3. Choisissez ensuite « wifi connecté » comme source
  4. Créez la tâche associée dans « plugins » > « Autoremote »
  5. Choisissez ensuite « AutoRemote Wifi »
  6. Dans la configuration de « Autoremove Wifi » (cliquez sur le crayon), cochez la case « Wifi Service »

Cette tâche permet d’activer le point d’accès local, nous permettant d’envoyer directement des requêtes HTTP à tasker afin qu’il exécute une tâche, sans passer par internet ou le cloud.

A cet instant, nous avons un tasker qui écoute des requêtes HTTP sur un port et qui est prêt à envoyer un SMS.

Le moyen d’adresser le smartphone

A présent, tasker écoute grace à AutoRemote et le service wifi activé sur le port 1817 (cf la doc de auto remote). Il vous faudra fixer l’adresse IP locale de votre smartphone, soit via une entrée statique dans votre DHCP, soit en définissant une adresse ip fixe dans le smartphone. Pour la suite de l’article, on considèrera l’IP [PHONE_IP]. Il ne faudra donc pas saisir les crochets.

Le format d’appel est malheureusement pas standard (et bien galère à intégrer !). Il s’agit d’appeler en GET avec un paramètre message bizarrement formaté avec des =:=.

http://[PHONE_IP]:1817/?message=send%20[votre numéro]=:=[votre message]

Il est primordial d’encoder (url_encode) proprement tout ce que vous passez dans le paramètre message.

Vous pouvez voir les logs des requêtes sur le smartphone dans AutoRemote et le petit (i)

Intégration à Home Assistant

Home assistant propose une intégration notify RestFul qui nous aurait parfaitement convenu si le format de AutoRemote n’était pas si farfelu. En effet, les « deux points égal deux points » ne nous arrangent pas du tout …

On est ainsi forcé de passer par un script shell qui fait du formatage de string.

Créez un fichier dans /config/scripts/sendSms.sh (par exemple) qui contiendra ceci :

#/bin/bash
MESSAGE=$(jq -sRr '@uri')
curl -s http://[PHONE_IP]:1817/?message=send%20[no de tel destinataire]=:=$MESSAGE

ce qui donnera par exemple

#/bin/bash
MESSAGE=$(jq -sRr '@uri')
curl -s http://192.168.1.45:1817/?message=send%200612345678=:=$MESSAGE

Vous noterez l’usage de jq ici afin de formater le message en url_encoded.

Il vous faudra autoriser le script en exécution, via une connexion ssh ou via l’add on SSH.

chmod u+x /config/scripts/sendSms.sh

Puis ajoutez l’intégration dans votre configuration.yaml

notify:
  - name: SMS_android
    platform: command_line
    command: /config/scripts/sendSms.sh

Un petit redémarrage, et vous pourrez utiliser l’intégration !

Exemple d’usage dans une automation ou un script :

service: notify.sms_android
data:
  message: "Ceci est un test SMS"

9 thoughts to “Recycler un smartphone pour envoyer des SMS avec Home Assistant et Tasker”

  1. Bonjour,

    merci pour ce tuto.
    Je n’ai pas compris la phrase « Je vous encourage à passer par le store officiel et payer l’application. ».
    Voulez-vous dire « je ne vous encourage pas à pirater l’application payante nécessaire pour la réalisation de ce tutoriel » ?

    1. absolument, aucune malice ici 🙂 Le prix est très raisonnable et encouragera le dev à maintenir la solution

      1. Effectivement, je pense aussi que cette application mérite l’investissement 😉

        Me concernant, je cherchais une solution libre (je n’ai pas le frame google services sur ce tel), et souhaitais éviter de passer par le réseau wifi.

        Je suis donc passé par la commande suivante :

        shell_command:
        smsintrusion: ssh -i /config/.ssh/id_rsa smsnotif@127.0.0.1 ‘adb shell service call isms 7 i32 1 s16 « com.android.mms.service » s16 « +336xxxxxxxx(myphonenumber) » s16 « null » s16 « Intrusion(mymessage) » s16 « null » s16 « null »‘

        Après avoir connecté mon vieux tel android (6) au port USB du PC hébergeant HA et activé ADB (en suivant ce post attentivement pour le paramétrage de l’appel d’ISMS : https://stackoverflow.com/questions/17580199/sending-a-sms-on-android-through-adb), je reçois bien les SMS de notification envoyés par :

        action: call-service
        service: shell_command.smsfabintrusion

        sous HA 🙂
        Merci d’avoir partagé votre solution qui est certainement plus simple.

  2. Salut,
    Merci pour ton tuto. Une question à ton avis est-il possible de faire une variable $NUM par exemple ?
    J’ai besoin d’envoyer des SMS à différentes personnes.
    Ce qui donnerais :
    #/bin/bash
    MESSAGE=$(jq -sRr ‘@uri’)
    curl -s http://192.168.1.45:1817/?message=send%20$NUM=:=$MESSAGE

    Et dans le script
    service: notify.sms_android
    data:
    message: « Ceci est un test SMS »
    num: « 0600000000 »

    Merci de ton aide.

  3. Salut,
    Je viens de suivre ton tuto, j’ai tout bien fait et recontrolé mais quand je tente l’envoi d’un SMS dans une action dans les log j’ai cette erreur.
    Logger: homeassistant.components.command_line.notify
    Source: components/command_line/notify.py:60
    Integration: command_line (documentation, issues)
    First occurred: 22:15:10 (1 occurrences)
    Last logged: 22:15:10

    Command failed (with return code 7): /config/scripts/sendSms.sh

    Je ne comprends pas car j’ai bien mis les droits sur le fichier, redémarré mais non 🙁
    Merci de ton aide.

    1. hello Sebr, essaye de lancer manuellement le script sendSms.sh en remplaçant les variables par les vraies valeurs le temps du test.
      Cela devrait pouvoir t’aider à débuguer le script 🙂

      1. Merci pour ta réponse. J’ai donc modifié le script comme ceci:
        #/bin/bash
        MESSAGE=$(jq -sRr ‘@uri’)
        curl -s http://192.168.1.66:1817/?message=send%200612345678=:=test

        Je suis ensuite passé par le Terminal depuis HA, remonté les dossiers et exécuté ./sendSms.sh
        Une fois validé la terminal ne revient pas à la ligne, comme si le script était encore en cours d’exécution. J’ai du faire un CTRL+C pour retrouver ma ligne de saisie.

  4. Bonjour

    Tout d’abord bonne année 2024 à tous ceux qui liront….

    J’ai suivi le tuto et je suis entrain de tester sur mon mobile de tous le jours avant de passer a un vieux mobile…
    Dans mon mobile je reçois bien le message de Home Assistant sur Tasker :
    – Il s’affiche en pop up sur le mobile (pop up autoremote)
    – il est bien dans les logs de Autoremote

    PAr contre impossible de faire partir un sms vers un mobile (ou le mien ou un autre)

Laisser un commentaire

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