logo domo-attitude

Domo-attitude.fr

Blog spécialiste de la domotique

Temps de lecture : 4 minutes

Dans cet article, nous allons explorer comment communiquer par SMS avec Domoticz en utilisant un modem USB 3G. Cette méthode présente de nombreux avantages par rapport à l’utilisation d’un téléphone comme passerelle. En effet, un modem USB dédié permet de se concentrer exclusivement sur les échanges SMS, assurant ainsi une communication fiable et constante. De plus, les notifications par SMS ne dépendent pas de la connexion internet, ce qui permet à Domoticz de continuer à communiquer même en cas de panne de votre box internet.

Pré-requis

Avant de commencer, assurez-vous d’avoir les éléments suivants :

  • Domoticz installé sur une distribution Linux. Dans cet exemple, nous utiliserons un Raspberry Pi 3.
  • Un modem USB 3G, tel que le Huawei E220. Bien qu’ancien, n’importe quel modem USB 3G devrait fonctionner.
  • Une carte SIM dédiée à cet usage.

Voici à quoi ressemble le Huawei E220 :

Installation

Configuration matérielle

Pour commencer, insérez la carte SIM dans le modem USB, puis connectez ce dernier à la machine hébergeant Domoticz. Bien que le modem puisse être connecté à une autre machine, il est plus simple de le connecter directement à celle qui héberge Domoticz.

Configuration logicielle

Une fois le modem connecté, nous allons utiliser des commandes Linux pour l’interfacer avec Domoticz. La commande dmesg vous permettra de vérifier sur quel port USB le modem est branché (par exemple, ttyUSB0, ttyUSB1, etc.).

Le problème est qu’au redémarrage, le port peut changer. Nous devons donc configurer un périphérique USB persistant. Pour ce faire, tapez la commande suivante :

sudo lsusb -v | more

Notez les paramètres suivants :

  • idVendor
  • idProduct
  • iSerial (si c’est 0, vous pouvez l’ignorer)

Par exemple, pour le Huawei E220, nous avons :

idVendor 0x12d1 Huawei Technologies Co., Ltd.
idProduct 0x1003 E220 HSDPA Modem / E230/E270/E870 HSDPA/HSUPA Modem
iSerial 0

Ensuite, créez ou modifiez le fichier /etc/udev/rules.d/99-usb-serial.rules :

sudo nano /etc/udev/rules.d/99-usb-serial.rules

Ajoutez la ligne suivante, en remplaçant les valeurs par celles retournées par la commande précédente :

SUBSYSTEM=="tty", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1003", SYMLINK+="ttyUSB31"

Redémarrez ensuite le système avec la commande suivante :

sudo shutdown -r now

Le modem sera désormais toujours sur le port USB /dev/ttyUSB31.

Envoi de SMS

Pour envoyer et recevoir des SMS, nous utiliserons Gammu, un logiciel permettant d’envoyer des SMS et de déclencher des scripts lors de la réception de SMS. Commencez par vous connecter à votre terminal et mettez à jour la liste des paquets :

sudo apt-get update

Ensuite, installez Gammu et gammu-smsd :

sudo apt-get -y install gammu gammu-smsd

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

[gammu]
port = /dev/ttyUSB31
connection = at
# Debugging
#logformat = textall

Si vous n’avez pas désactivé le code PIN de votre carte SIM, ajoutez la ligne suivante :

pin = XXXX

Pour prendre en compte les modifications, démarrez le service Gammu :

sudo service gammu-smsd start

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

sudo -u gammu gammu-smsd-inject TEXT 06xxxxxxxx -text "MESSAGE"

Remplacez « MESSAGE » par le message de votre choix. Si cela ne fonctionne pas, vérifiez que l’utilisateur Linux sous lequel vous êtes peut faire un sudo -u gammu.

Pour tester l’envoi d’un SMS depuis Domoticz, vous pouvez ajouter ceci dans un script LUA :

os.execute ('sudo -u gammu gammu-smsd-inject TEXT "+336xxxxxxxx" -text "TEST"')

Réception de SMS

Maintenant que Domoticz peut envoyer des SMS, nous allons configurer la réception de SMS. Pour cela, nous devons revenir au fichier /etc/gammu-smsdrc. Ajoutez à la fin du fichier :

runonreceive = /root/gammu/receivesms.py

Puis relancez Gammu :

sudo /etc/init.d/gammu-smsd restart

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

  • $SMS_1_NUMBER : le numéro de l’expéditeur
  • $SMS_1_TEXT : le contenu du message

Avant tout, dans Domoticz, créez une variable sms de type chaîne et notez son index.

Voici un exemple de fichier receivesms.py :

#!/usr/bin/python
import os
import sys
import urllib

# Mise à jour dans Domoticz
DOMO_IP="127.0.0.1"  # Adresse IP de Domoticz
DOMO_PORT="8080"     # Port de Domoticz
IDX="11"             # Index de la variable "sms"

urllib.urlopen("http://"+DOMO_IP+":"+DOMO_PORT+"/json.htm?type=command&param=updateuservariable&idx="+IDX+"&vname=sms&vtype=2&vvalue="+urllib.quote(os.environ['SMS_1_TEXT'])+";"+urllib.quote(os.environ['SMS_1_NUMBER']))

Explications : à chaque réception de SMS, le script mettra à jour une variable sms dans Domoticz. Ensuite, nous créerons un script qui réagira au changement de cette variable.

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

sudo chmod +x /root/gammu/receivesms.py

Je vous invite à lire cette page qui vous donnera un exemple de script LUA pour la réception de SMS et l’interaction avec Domoticz.

Notifications Domoticz par SMS

Si vous voulez recevoir toutes les notifications de Domoticz par SMS, rien de plus simple !

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

#!/usr/bin/python
import sys
import os
import datetime

now = datetime.datetime.now()
text = "["+now.strftime("%d/%m/%Y @ %H:%M")+"] "+sys.argv[1]
phone_numbers = ["+336xxxxxxxx"],["+336yyyyyyyy"]

for number in phone_numbers:
    command = "sudo -u gammu gammu-smsd-inject TEXT "+number+" -text \""+text+"\""
    os.system(command)

Dans Domoticz, allez dans Réglages, Paramètres, puis sur l’onglet Notifications. Dans la partie HTTP personnalisé/Action, cochez Activé et renseignez le script sendsms.py dans URL/Action.

Sauvegardez, et Domoticz vous enverra toutes les notifications par SMS !

Réinitialisation du Modem

Dernier point : comme mentionné 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 solution alternative via 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.

Pour commencer, il faut installer minicom :

sudo apt-get install minicom

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

send AT+CFUN=0
sleep 3
send AT+CFUN=0
sleep 3
send AT+CFUN=1
sleep 3
! killall -9 minicom

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

#!/bin/bash
TERM=vt100
export TERM

sudo /etc/init.d/gammu-smsd stop
sleep 5
/usr/bin/minicom -D /dev/ttyUSB31 -S /root/modem_reset.minicom
sleep 5
sudo /etc/init.d/gammu-smsd start

N’oubliez pas de rendre ce script exécutable :

chmod +x modem_reset

Enfin, mettez en place un cron job pour exécuter cette tâche toutes les nuits, par exemple à 4h25 du matin (sudo crontab -e) :

25 4 * * *

 /root/modem_reset > /root/modem_reset.log

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.

Conclusion

Grâce à ces étapes, vous avez maintenant un Domoticz capable d’envoyer et de recevoir des SMS de manière fiable et autonome. Cette méthode assure une communication continue même en cas de panne d’internet, offrant ainsi une solution robuste pour la gestion de vos notifications et interactions avec Domoticz.