Aller au contenu

Communiquer par SMS avec Domoticz via un modem USB 3G - Domo-Attitude.fr


Ldfa

Messages recommandés

Aujourd’hui je vous propose de communiquer par SMS avec Domoticz via un modem USB 3G. D’autres tutoriaux existent, utilisant un téléphone comme passerelle. Ici, nul besoin d’un téléphone. En revanche nous allons utiliser un modem USB 3G, qui aura l’avantage de servir exclusivement aux échanges SMS.

Le gros avantage du SMS par rapport aux autres notifications, c’est que cela ne dépend pas de la connexion internet. Ainsi, même si votre box internet tombe en panne, Domoticz sera toujours en mesure de communiquer.

Voici les pré-requis:

  • Avoir Domoticz installé sur une distribution Linux. Dans mon cas il tourne sur un Raspberry Pi 3.
  • Avoir un modem USB. J’utilise un Huawei E220. Il date un peu, mais en principe n’importe quel modem USB 3G devrait faire l’affaire.
  • Avoir une carte SIM dédiée à cet usage.

Voici à quoi ressemble le Huawei E220:

51ftqhEeljL__SL1000_.jpg?resize=481%2C4551XKUqMQ_8L__SL1000_.jpg?resize=480%2C48

Il faut donc dans un premier temps insérer la carte SIM dans le modem, puis connecter celui-ci en USB sur la machine hébergeant Domoticz. Ceci n’est pas obligatoire, le modem pourrait très bien être sur une autre machine, mais c’est plus simple à réaliser.

Nous allons ensuite passer par des commandes Linux, afin d’utiliser ce modem et l’interfacer avec Domoticz.

La commande dmesg devrait vous retourner le port sur lequel est branché le modem, du type ttyUSB0, ttyUSB1

Le problème, c’est qu’au redémarrage, le port peut changer. Nous allons devoir utiliser un périphérique USB persistant.

Taper la commande suivante:

Noter les paramètres suivants:

Par exemple, pour le Huawei E220, nous avons:

Ensuite créer (ou modifier s’il existe) le fichier /etc/udev/rules.d/99-usb-serial.rules:

Ajouter la ligne suivante:

En prenant soin évidemment de remplacer le valeurs par celles retournées par la commande précédente.

Ensuite redémarrer le système! Sous Linux:

Maintenant, le modem sera toujours sur le port USB /dev/ttyUSB31.

Pour envoyer et recevoir des SMS, nous utiliserons Gammu. Ce logiciel permet d’envoyer des SMS, et de déclencher des scripts lors de la réception de SMS.

Connectez-vous dessus avec un terminal et mettez à jour la liste des paquets. Ensuite installez gammu et gammu-smsd:

Il faut ensuite indiquer à Gammu quel port USB utiliser en éditant le fichier /etc/gammu-smsdrc :

Si vous n’avez pas désactivé le code PIN, vous devrez rajouter la ligne suivante :

Il faut bien entendu démarrer le service pour la prise en compte des paramètres modifiés :

Vous pouvez maintenant tester l’envoi de SMS avec la commande :

En remplaçant « MESSAGE » par le message de votre choix.

Je vous propose un exemple de script qui peut être appelé par Domoticz pour envoyer un SMS:

On peut appeler ce script via un script lua par exemple:

Voilà, Domoticz sait vous envoyer des SMS. Passons maintenant à la réception des SMS. Pour cela il faut revenir au fichier /etc/gammu-smsdrc. A la fin du fichier, placer:

Puis relancer gammu:

Ce fichier sera exécuté à chaque réception de SMS, avec 2 variables:

Voici un exemple de fichier receivesms.sh:

Explications:

  • Si le message vient de mon numéro personnel (+336xxxxxxxx), alors:
    • Si le message est « Ping », Gammu va me répondre « Pong »
    • Si le message est « Check », on va exécuter le script /root/gammu/check_domoticz.py
    • Si c’est un autre message, Gammu va me répondre « ??? »
  • Si le message vient d’un autre numéro, Gammu me renvoie sur mon téléphone le contenu de ce message

Note: il faut rendre le fichier receivesms.sh exécutable:

Toujours dans cet exemple, voici le script /root/gammu/check_domoticz.py:

Là aussi il faut le rendre exécutable:

Grâce à une commande json, le fait d’envoyer « Check » à mon système va déclencher un interrupteur virtuel dans Domoticz.

Note: ici, l’index 56 correspond à un interrupteur virtuel appelé « Check Domoticz »:

Screenshot_20170308_172431.png?resize=64

Ce qui donne:

Screenshot_20170308_172504.png?resize=31

Et voici le résultat sur le téléphone:

Screenshot_2017_03_09_15_07_48.png?resiz

La suite est facultative, mais je vais terminer mon exemple afin de faire une chaîne complète.

J’ai créé un script lua qui réagit à cet interrupteur:

Ainsi, si j’envoie le SMS « Check » depuis mon téléphone, cela va actionner un interrupteur dans Domoticz, ce qui aura pour conséquence de me renvoyer le message « Domoticz fonctionne correctement ».

Et voilà, vous avez un Domoticz qui sait envoyer et recevoir des SMS!

Pas de problème, voici un script sendsms.py un peu plus avancé:

Ainsi, il suffit d’appeler le script avec un paramètre en plus pour définir quels seront les destinataires, par exemple:

Dans ce cas, les 2 destinataires recevront le message. Et si on n’indique pas le « 2 », c’est le choix 0 qui sera pris par défaut.

Dernier point: comme je l’ai dit plus haut, cela devrait fonctionner avec n’importe quel modem USB. Ceci dit, je n’ai testé qu’avec le Huawei E220. Avec ce modem, j’ai rencontré quelques difficultés au début. En effet, au bout de quelques jours, il perdait la connexion, m’obligeant à le débrancher puis le rebrancher physiquement pour le réinitialiser (un redémarrage du système ne solutionnait pas le problème). J’ai trouvé une autre solution par un script de réinitialisation que je lance chaque nuit. Cela fonctionne pour ce modem, je ne sais pas si c’est utile et si ça fonctionne pour d’autres.

Tout d’abord, il faut installer minicom:

Ensuite créer un script pour minicom qui va envoyer les commandes de réinitialisation au modem. Je l’ai appelé modem_reset.minicom :

Puis créer un script shell qui va appeler ce script, en prenant soin de stopper puis relancer gammu-smsd. Je l’ai appelé modem_reset:

Ne pas oublier de rendre ce script exécutable:

Enfin mettre un cron qui va lancer cette tâches toutes les nuits, par exemple à 4h25 du matin (sudo crontab -e):

Explications:

Ce script va arrêter gammu-smsd (qui prend le contrôle exclusif du modem), envoyer au modem des commandes de réinitialisation, puis relancer gammu-smsd.

Afficher l’article complet

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.