Bonjour,
voici les éléments :
A - Principe :
Sous Jeedom, via le plugin script, un fichier contenant le message du SMS et le numéro de tel du destinataire est écrit dans un répertoire dédié sur le disque. Un script python vérifie régulièrement le contenu de ce répertoire. Si un fichier est présent sous le répertoire, un SMS est envoyé via la clé Huawei et le fichier est déplacé dans un autre répertoire. Le script python vérifie également la réception de SMS au niveau de la clé Huawei. Si un SMS est reçu venant du numéro autorisé, une interaction basée sur le contenu du message est envoyé à Jeedom ; les SMS reçus sont supprimés de la clé.
B - Mon installation
Elle est probablement un peu atypique car composée de 2 machines (une pour Jeedom et une pour la clé Huawei), mais je pense que cela n’a pas d’importance sur la solution proposée qui pourra être transposée facilement sur une seule machine.
Mon Jeedom est sur une VM Vmware et malheureusement la clé n’est pas reconnue ; je l’ai installée sur une VM Freebox et là elle est reconnue. J’ai également testé sur un RPI3B+ quelques jours et pas de pb.
C - Installation
Allons-y :
1 - Installation de la clé
1.1 - Brancher la clé sur la machine
Puis se connecter à l’interface d’administration de la clé selon le mode d’emploi et vérifier que tout est fonctionnel.
Si vous changez le mot de passe administrateur (ce qui est recommander), notez le, vous en aurez besoin dans le script python.
1.2 - Se connecter en SSH sur la machine recevant la clé Huawei.
Le travail se fera avec l’utilisateur « jeedom » sous son répertoire /home/jeedom, si vous choisissez un autre utilisateur certains éléments décrits ci-après seront à adapter.
1.3 - Identifier l’interface réseau créée par la clé afin de la configurer (Je crois me souvenir que sur RPI la configuration se fait toute seule) :
sudo dmesg
Identifier une ligne qui ressemble à ça :
Récupérer la référence de l’interface réseau : ici : enx824c1af6a789
1.4 - Vérifier qu’elle n’est pas déjà configurée :
ip a
Si elle apparait dans la liste, noter son adresse IP (a priori elle apparait toujours sous 192.168.8.100) et passer à l’étape 2 sinon étape suivante.
1.5 - Configurer cette interface réseau
sudo nano /etc/network/interfaces
Ajouter en fin de fichier les lignes suivantes en les adaptant au besoin avec la référence de votre interface réseau
allow-hotplug enx824c1af6a789
iface enx824c1af6a789 inet dhcp
Redémarrer
sudo reboot
Après redémarrage vérifier que l’interface est configurée
ip a
Si elle apparait dans la liste, noter son adresse IP (a priori : 192.168.8.100) et passer à l’étape 2 sinon je ne sais pas… mais d’autres membres du forum auront peut-être une piste.
2 - Script Python
2.1 - Intaller pip et les librairies nécessaires pour le script.
La librairie centrale est : huawei-modem-api-client : huawei-modem-api-client · PyPI
sudo apt install python3-pip
pip install huawei-modem-api-client
pip install daemonize
2.2 - Répertoires de fichiers SMS
Sous /home/jeedom créer les répertoires Outbox et Sentbox :
mkdir Outbox
mkdir Sentbox
2.3 - Le script lui-même
Créer le fichier SMS_Gestion.py
nano SMS_Gestion.py
Y coller le contenu suivant ci dessous en remplaçant les « X » par vos propres valeurs et sauvegarder :
#!/usr/bin/env python3
import glob
import huaweisms.api.user
import huaweisms.api.wlan
import huaweisms.api.sms
import sys
import os
import json
import requests
from time import sleep
from daemonize import Daemonize
pid = "/tmp/SMS_Huawei.pid"
def main():
while True:
ctx = huaweisms.api.user.quick_login("admin", "XXXX")
# Réception des SMS
SMSRecus = huaweisms.api.sms.get_sms(ctx)
if (SMSRecus['response']['Count']) != '0':
index = (SMSRecus['response']['Messages']['Message'][0]['Index'])
SMSDelete = huaweisms.api.sms.delete_sms(ctx,index)
numero = (SMSRecus['response']['Messages']['Message'][0]['Phone'])
message = (SMSRecus['response']['Messages']['Message'][0]['Content'])
if numero == "+33XXXXXXXXX":
reponse = requests.get('http://192.168.X.X/core/api/jeeApi.php?apikey=XXXX&type=interact&query='+message)
huaweisms.api.sms.send_sms(
ctx,
numero,
reponse.text
)
# Envoi des SMS
SMSaEnvoyer = []
x = 0
for NomFichier in glob.glob("/home/jeedom/Outbox/*.txt"):
SMSaEnvoyer.append(NomFichier)
x += 1
if x >= 1:
for fichier in SMSaEnvoyer:
file = open(fichier, 'r')
lines = file.readlines()
file.close()
numero = lines[1]
message = lines[0]
huaweisms.api.sms.send_sms(
ctx,
numero,
message
)
stream = os.popen('mv '+fichier+' /home/jeedom/Sentbox')
sleep(1)
huaweisms.api.user.logout(ctx)
sleep(1)
daemon = Daemonize(app="/home/jeedom/SMS_Gestion.py", pid=pid, action=main)
daemon.start()
Plusieurs choses peuvent être adaptées comme l’attente entre chaque boucle de vérification, l’attente entre l’envoi de plusieurs SMS, la suppressions des SMS reçus etc…
2.4 - Rendre le script exécutable
chmod +x SMS_Gestion.py
2.5 - Lancer le script
./SMS_Gestion.py
2.6 - Exécuter le script au démarrage de la machine
Je le fais via Crontab
sudo nano /etc/crontab
à la fin du fichier ajouter et sauvegarder
@reboot jeedom /home/jeedom/./SMS_Gestion.py
3 - Coté Jeedom
3.1 - Créer via le plugin script un script nommé « SMS_Script_Huawei » (ne pas oublier de l’activer, de le rendre visible et d’éventuellement de l’associer à un objet parent)
3.2 - Dans ce script créer une commande script de type action message que vous pouvez nommer au nom du destinataire ex SMS_Test
3.3 - Dans cette commande créer un script « SMS_Test.sh » contant le code ci-dessous avec « XXXXXXXXXX » le numéro de téléphone destinataire du SMS :
sudo ssh jeedom@192.168.0.90 'echo -e '\"$1\"'"\nXXXXXXXXXX" > Outbox/$(date +%Y%m%d-%H%M%S)-XXXXXXXXXX.txt'
A noter que le début du code « sudo ssh jeedom@192.168.0.90
» est lié à ma configuration avec la clé déportée sur ma VM Freebox et pourra donc être simplifié si la clé et Jeedom sont sur une seule machine.
Toutefois la seconde partie du code devra alors être adaptée pour écrire le fichier au bon endroit (cf 2.2) et avec les droits utilisateurs adaptés. C’est à dire quelque chose comme cela :
echo "$1""\nXXXXXXXXXX" > /home/jeedom/Outbox/$(date +%Y%m%d-%H%M%S)-XXXXXXXXXX.txt
3.4 - ajouter "#message#"
après le nom du script
3.5 - vérifier que cela fonctionne en tapant votre message depuis le widget du script.