Bonjour à tous,
Aujourd’hui, retour d’expérience sur la mise en place de communication SMS bidirectionnelle avec Jeedom.
Tout est parti d’un sujet (dispo ici) qui semblait promettre simplicité et efficacité.
Les versions utilisées :
Ubuntu 18 LTS
Jeedom 3.3.39
Commençons par la partie hardware. Le dongle préconisé sur le tuto n’existant plus, je me suis rabattu sur son grand frère le Huawei E3531 (dispo ici). On patiente le temps de recevoir la SIM et le dongle…
Comme indiqué sur le site et lu un peu partout, ces dongles ont la fâcheuse tendance à se faire passer pour un cd-rom et/ou un adaptateur ethernet. Je vous fait gagner du temps, voilà la configuration qui a marché chez moi parmi tout ce que j’ai lu :
créez le fichier /etc/usb_modeswitch.d/12d1:157d avec pour contenu
# Huawei E3531
DisableSwitching=1
TargetVendor=0x12d1
TargetProduct=0x1001
MessageContent="55534243123456780000000000000011062000000100000000000000000000"
NoDriverLoading=1
N’oubliez pas de débrancher rebrancher la clé pour voir la différence
lsusb me renvoie le bon device :
Bus 003 Device 040: ID 12d1:1001 Huawei Technologies Co., Ltd. E169/E620/E800 HSDPA Modem
Je poursuis le tuto (installation du plugin SMS, configuration, envoie d’un SMS de test, YOUHOU ça marche!)
NB : pour ceux qui ne cherchent pas à envoyer de SMS à leur Jeedom, félicitation, vous avez fini et ça marche. Pour les autres :
J’arrive au bout du tuto (mais pas du tunnel!) et je pense avoir terminé. Le temps de monter un scénario rapide, une action ask et en fonction de la réponse un autre SMS de confirmation. Surprise, le scénario ne fonctionne pas… Je reçois bien le 1er SMS, je réponds par l’affirmative, puis timeout. Je ne vois rien dans les logs qui m’aide.
Ne trouvant rien dans les logs, je cherche une alternative au plugin SMS et tombe sur le plugin gammu que j’installe.
Et j’arrive au même point, je peux recevoir des SMS de Jeedom mais pas en envoyer.
J’active les logs de gammu dans le fichier gammu-smsdrc du plugins (chez moi /var/www/jeedom/plugins/gammu/resources/gammu-smsdrc) :
[smsd]
...
logfile = /var/log/gammu-smsd.log
debugLevel = 255
...
Et je ne vois rien qui se passe quand j’envoi un SMS.
Un peu de recherche et je tombe sur ce topic : Gammu can not receive sms qui parle du même dongle GSM.
Je rajoute la modification préconisé dans le fichier gammu-smsdrc du plugins :
[gammu]
...
atgen_setCNMI=2,0,0,2,1
...
Je retente et toujours rien…
Mais en regardant les logs, je constate que la commande CNMI passée est 2,1,0,2.
Nouvelle recherche et je tombe là dessus : atgen_setCNMI not working.
Le support de 5 digits dans le CNMI n’est supporté que depuis le 21 octobre 2019, la dernière release date du 27 septembre.
Nous voilà bon pour une compile des sources.
# stop deamon gammu
sudo systemctl stop gammu-smsd
# Suppression de la version installé par le plugin gammu
sudo apt-get remove gammu gammu-smsd python-gammu
# clone de repo officiel
git clone https://github.com/gammu/gammu.git
# installation des dependances
sudo apt-get install cmake python-dev pkg-config libmysqlclient-dev libpq-dev libcurl4-gnutls-dev libusb-1.0-0-dev libdbi0-dev libbluetooth-dev libgudev-1.0-dev libglib2.0-dev unixodbc-dev
# Compilation
cd gammu-master
./configure
make
sudo make install
sudo ldconfig
Il faut modifier le fichier /lib/systemd/system/gammu-smsd.service pour changer l’emplacement du fichier de conf par defaut. Remplacez :
EnvironmentFile=-/etc/sysconfig/gammu-smsd
par
EnvironmentFile=-/etc/gammu-smsdrc
Puis il faut rafraichir le daemon systemd : sudo systemctl daemon-reload
Le daemon est « masqué » par défaut : sudo systemctl unsmask gammu-smsd
Dans le doute on l’active : sudo systemctl enable gammu-smsd
et enfin redémarrer le daemon gammu-smsd : sudo systemctl start gammu-smsd
Ok on retente. On regarde les logs, le CNMI est bon. J’envoie un SMS pour vérifier qu’il y a de la vie et surprise dans les logs:
Ignoring incoming SMS info as not a Status Report in SR memory.
En gros, le dongle a bien reçu le SMS mais n’a pas envoyé les infos nécessaires dedans pour en faire quelque chose avec gammu. On avance!
Nouvelle recherche, je tombe la dessus : Huawei E303 and E3531 Ignoring incoming SMS info as not a Status Report in SR memory.
Pas de réponse probante…
Puis sur : Randomly Ignoring incoming SMS info as not a Status Report in SR memory
Pas de réponse du tout…
Je farfouille le web et tombe sur ces documents très interessants : Aide AT V13 ainsi que sur celui-ci AT commands
Pour résumer : la commande CNMI configure le système de notification des SMS (réception + accusé réception).
Une intuition me dit que mon réglage CNMI ne doit pas être bon.
En regardant la documentation et en tatonnant, la configuration CNMI 1,2,0,0,0 est une combinaison gagnante avec le réseau Free.
[gammu]
...
atgen_setCNMI=1,2,0,0,0
...
Je regarde les logs de gammu-smsd et quand j’envoie un SMS :
Received IN20200311_104334_00_+xxxxxxxxxxx_00.txt
gammu-smsd[23342]: Starting run on receive: /var/spool/gammu/SMSDreceive.sh IN20200311_104334_00_+xxxxxxxxxxx_00.txt
gammu-smsd[23342]: Process finished successfully
Et Jeedom me répond qu’il ne comprend pas ma requête. C’est plus qu’un progrès, c’est un début de quelque chose qui marche!
Je retente mon scénario avec l’action ask. Qui ne marche toujours pas mais avec Jeedom me répète qu’il ne comprend pas ce que je lui demande donc il reçoit bien les SMS.
Après recherche, le plugin gammu n’est pas compatible avec l’action ask. Qu’à cela ne tienne, je rajoute la compatibilité sans grosse difficulté.
Au moment de l’écriture de ce post, le pull request pour la compatibilité avec l’action ask a été accepté et mergé sur la branche master.
Si vous voulez en bénéficier avant la prochaine release officielle, il suffit de rajouter le plugin via le dépôt github (https://github.com/lunarok/jeedom_gammu/)
Ca y est, c’est terminé.
Je désactive les logs de gammu dans le fichier gammu-smsdrc du plugins (chez moi /var/www/jeedom/plugins/gammu/resources/gammu-smsdrc) :
[smsd]
...
debugLevel = 0
...
Normalement vous pouvez communiquer avec votre Jeedom via un dongle Huawei E3531 et une SIM Free
Infos complémentaire :
- Vous pouvez supprimer les dépendances de compilation après avoir installer gammu. Celles-ci ne sont nécessaires que pour la compilation
- Ne modifiez pas directement le fichier /etc/gammu-smsdrc, le plugin l’écrase après chaque modification de sa configuration
- N’oubliez pas de remettre les logs en normal, gammu-smsd est très bavard au niveau 255
- L’installation par les sources de gammu rend obsolète la gestion des dépendances par le plugins. Surtout ne pas tenter de les réinstaller, sinon il va écraser la version compilé par une version obsolète ne supportant pas les 5 digits du CNMI
Pour les modérateurs, désolé si je n’ai pas posté au bon endroit.
Pour les yeux des lecteurs, désolé pour les fautes d’orthographes.
Pour conclure, bon Jeedom à tous!
Edit n°1
Si comme moi vous avez plusieurs contrôleur sur port USB (Dongle GSM + dongle RFX par exemple), il peut être assez énervant que l’ordre des ttyUSB* change, mettant la configuration de Jeedom par terre.
Pour résoudre ce problème avec ce dongle, il suffit de créer un fichier dans le dossier /lib/udev/rules.d/99-usb-custom.rules avec pour contenu :
SUBSYSTEMS=="usb", ATTRS{modalias}=="usb:v12D1p1001*", KERNEL=="ttyUSB*", ATTRS{bInterfaceNumber}=="00", ATTRS{bInterfaceProtocol}=="ff", SYMLINK+="ttyUSB_utps_modem"
SUBSYSTEMS=="usb", ATTRS{modalias}=="usb:v12D1p1001*", KERNEL=="ttyUSB*", ATTRS{bInterfaceNumber}=="01", ATTRS{bInterfaceProtocol}=="ff", SYMLINK+="ttyUSB_utps_diag"
SUBSYSTEMS=="usb", ATTRS{modalias}=="usb:v12D1p1001*", KERNEL=="ttyUSB*", ATTRS{bInterfaceNumber}=="02", ATTRS{bInterfaceProtocol}=="ff", SYMLINK+="ttyUSB_utps_pcui"
On recharge et applique les règles :
udevadm control --reload-rules && udevadm trigger
Dans la configuration du plugin dans Jeedom, sélectionnez la clé USB ttyUSB_utps_modem. Celle-ci pointera toujours vers le bon ttyUSB*
Edit n°2
Si vous avez des problèmes d’emission et de réception de SMS, rajouter un n° SMSC dans la configuration de gammu permet de résoudre la plupart des problèmes :
[smsd]
...
SMSC=+33695000695
...
Ce numéro est celui pour free