Recevoir des notifications et effectuer
des commandes envoyées par GSM

avec ou sans Raspberry

 

 

Le matériel .


La deuxième génération du réseau cellulaire (2G) est vieille de 25 ans mais elle couvre pratiquement tout le territoire. Il est prévu qu'elle disparaisse à partir de 2025
en attendant un modem GSM 2G coute jusqu'à 10 fois moins cher qu'un modem GSM 4G .....il est préférable d'attendre quelques années pour investir dans un modem 3G /4G dont le prix aura fortement diminué, mais.......
..... les opérateurs interdisent désormais les communications GSM aux machines, seules sont autorisées à envoyer des SMS avec un forfait classique les personnes physiques.
Si votre opérateur résilie votre forfait pour ce motif il vous reste à acheter une carte SIM M2M , plus chère évidemment, et vous équiper d'un modem compatible.

Il existe des modem 2G à base de la puce SIM800 qui prennent en charge le quadri-bande 850/900/1800/1900 MHz; ces modules peut transmettre des informations vocales, SMS et de données avec une faible consommation d'énergie. Ces modules redémarre automatiquement lors d'un retour de la tension après une coupure.

Suivant l'utilisation que l'on veut en faire, différents modules modules existent :
- pour Raspberry , module SIM800C monté directement sur les pins (pas d'alimentation externe):

gsm1

- module USB SIM800L, le plus simple à installer mais qui offre moins de possibilités

gsm2

- Pour le M2M, il existe un module SIM7020 LTE4G, compatible avec les commandes de la SIM800 , qui peut être utilisé seul avec une interface USB/série ou monté sur un Raspberry.
Ce module fonctionne uniquement avec une carte SIM M2M.
https://www.waveshare.com/wiki/SIM7020E_NB-IoT_HAT

gsm57

- Pour la 4G LTE classique + M2M il existe un modem chinois, d'un prix abordable: Ebyte 4G/LTE DTU.
https://www.ebyte.com/en/product-view-news.html?id=755
Pour ce modèle , les commandes AT sont différentes de celles des SIM800 ou SIM7020 et font l'objet d'un autre tuto

gsm58

Avantages d'utiliser un Raspberry en plus de la machine hébergeant le système domotique:
- Le PI surveille le mini PC (ou un autre PI hébergeant Domoticz, etc....) et les VM Proxmox (si comme moi vous utiliser des machines virtuelles) et alerte par SMS en cas d’anomalies. Nagios,LibreNMS ,...ou autres systèmes de surveillance réseau peuvent y être installés.
- le PC (ou l'autre PI hébergeant Domoticz) surveille le PI et alerte par SMS (internet api Free ou pushover) , voir cette page pour une description complète.
- on évite le noir complet en cas d'anomalie sur la machine.
- et , si vous êtes dans mon cas , le Raspberry est déjà installé pour les sauvegardes RAID1;

Pour aller encore lus loin , pour ne faire qu'une seule machine , et ne plus être dépendant du routeur entre Domoticz et le PI
- réaliser une liaison série entre le mini PC et le PI.
voir la page consacrée à ce sujet.

Indépendamment du choix de matériel le mode d'emploi pour l'envoi d'un SMS reste le même.
Si le modem GSM est installé sur le serveur Domoticz ou sur un PI avec une liaison série avec Domoticz, pensez à utiliser l' IP 127.0.0.1:PORT pour l'API json.

 

 

 

Configuration du RPI et librairies à installer

Pour Activer le port série du PI , ouvrir le terminal en tapant la commande:

Si vous êtes comme moi, sous Ubuntu 20.x (j'ai choisi cette solution afin de booter sur un SSD , voir cette page) et non sous PI OS , il faut installer Raspi-config:

 

Ubuntu : installer Raspi-config

Sous Putty:

gsm59

gsm60

gsm61

 

 

gsm3

gsm4

gsm5

gsm6

gsm7

 

les packages à installer :

gsm8

gsm9

Installer pyserialgsm10

gs11

gs12

pour un RPI seulement :
pas utile pour l'instant mais pourra l'être plus tard,
- pour PI OS

gs13

- pour Ubuntu 20.x :

gs62

Autoriser l'accès des ports série au pi:

gs14

Installer minicom , la console de communication série,

gs15

déterminer le port de notre périphérique:

gs16

 

 

Essai des commandes AT avec minicom

Les Commandes Hayes, appelées souvent AT, constituent le langage de commandes développé pour le modem.
Avec Putty:
- configurer minicom

gs17

https://www.elecrow.com/wiki/images/2/20/SIM800_Series_AT_Command_Manual_V1.09.pdf

https://www.technologuepro.com/gsm/commande_at.htm

 

les principales commandes:

- Vérifier la connexion avec le module : AT
...........réponse:

gs18

- Envoyer le code PIN si nécessaire :AT+CPIN="XXXX"
...........réponse:

gs19

- Activer le mode texte pour l'envoi du SMS.: AT+CMGF=1
...........réponse:

gs20

- Envoi d'un SMS: AT+CMGS="+336xxxxxxxx"
...........réponse:> écrire message
...........Entrée pour une 2eme ligne
...........CTRL+Z pour l'nvoi du message
...........réponse:

gs21

 

 

des commandes utiles:

- pour tester la présence du réseau:

gs22

- pour connaitre la qualité du réseau:

gs23

gs24

- pour connaitre les opérateurs disponibles:

gs25

- Pour connaitre l’opérateur connecté :

gs26

- Pour sélectionner la zone de stockage des messages texte SMS: AT+CPMS="SM"

gs32

- "AT+CMGL" renvoie tous les messages texte non lus ,"REC UNREAD"

gs33

- Pour enregistrer la configuration: AT&W

gs34

 

 

 

Envoi d'un SMS

L’envoi complet d’un message en ligne de commande avec minicom:

gs27

Le script python qui assurera le travail d'envoi et aussi la réception des SMS :
des scripts existent sur github , j’ai retenu :
https://github.com/jakhax/raspberry-pi-sim800l-gsm-module
Ce script date de 2 ans et la version actuelle du package "serial" impose quelques modifications:
- depuis la version 3.0 : modifié en propriété de inWaiting() , concerne la reception des SMS

Ce script fonctionne très bien avec le PI4 et le module SIM800C ou la clé SIM800L, il suffit de modifier le port et la vitesse;
par contre , il ne gère pas le code PIN de la carte SIM, ce dernier devra être désactiver;
pour cela:
- entrer le code PIN actuel : AT+CPIN=0000
- exécuter la désactivation : AT+CLCK="SC",0,"0000"
- vérifier que cela a fonctionné : AT+CPIN?

gs35

le fichier sim800l.py modifié

Copier ce script dans un répertoire , par exemple, « scripts ».
Création du répertoire et du fichier sim800l.py avec nano

gs28

gs38

- Utilisation : créer le fichier envoi_sms.py avec nano (sudo nano envoi_sms.py)

gs29

- essai du script :

gs30

réception du SMS:

gs31

 

Pour envoyer un SMS de cette façon à partir de Domoticz il suffit de lancer ce script Python avec Lua :
voir cette page consacrée à l'envoi d'une notification avec Free.

 

 

Réception d'un SMS

SMS envoyé:

gs46

Avec minicom on peut vérifier la réception par le modem d'un ou plusieurs SMS, mais si l'envoi de SMS fonctionne , il n'y a aucune raison que la réception ne fonctionne pas.
"AT+CMGL" :

gs36

Le script Python "rec_sms.py"(la class SIM800L de sim800l.py, est, comme pour l'envoi ,utilisée) ;

Ce script se charge de mettre à jour une variable de Domoticz ou commander un dispositifs ,....,c'est l'API de domoticz qui est utilisée.
- Il se charge également d'envoyer un accusé de réception de l’exécution de l'API Domoticz.

 

gs39

Un essai en batch: python3.7:

gs37

gs40

sur le smartphone :

gs53

 

Réception par Domoticz de commandes ou variables envoyées par SMS

Comme on peut le voir sur les images précédentes ,Le SMS est composé de 3 parties séparées par «#»
- L’id : idx
- Le nom : name
- La valeur : valeur

Tout est possible mais il faut récupérer , pour l'API Json de Domoticz l'Idx et le nom de la variable ou l'idx du dispositif. Pour commander un interrupteur il n'est pas nécessaire de fournir à l’api de Domoticz le nom du dispositif aussi cette situation permet de sélectionner la bonne url lors de l'envoi du SMS ; j'ai choisi "switch" pour le nom qui sélectionnera l'url de commande d'interrupteur;
soit on choisit "switch pour un dispositif les valeurs étant ON,Off,Closed,....., soit on choisit le nom de la variable et sa valeur .

 

gs46

gs41

gs43

gs44

Comme on peut le voir ci-dessus,pour les variables , le séparateur de fin de chaine n'est pas obligatoire , Lua peut se charger de supprimer /n.

 

exemple de script dzVent

Au changement de valeur un script dz effectue l’ action demandée.
Je n’tilise pas de mise à jour par GSM de variables avec lua (pour l'instant) car j'utilise PHP .

gs45

Pour commander des interrupteurs:
Pour la mise en service ou l' arrêt de l'alarme , j'utilise un interrupteur virtuel que le peux actionner de cette façon:

gs46

copies d'écran de domoticz

gs47

je reçois par SMS la confirmation de l'exécution de l' API et une notification Free (par internet ) de l'activation de l'alarme.

 

 

Démarrage automatique du script de réception des SMS

Le PI , le module sim800 redémarrent automatiquement , il faut donc que le script python chargé de réceptionner les SMS redémarre également automatiquement. Pour cela on va utiliser un script Shell et Crontab.
On pourrait aussi utiliser PM2 , voir cette page
- crontab permet d’exécuter des scripts en tâche de fond à des instants ou évènements précis.

nous avons crée précédemment un répertoire /home/USER/scripts , nous allons y ajouter le script pour lancer "rec_sms.py:

- avec nano , création de "start_rec_sms.sh" :

gs48

Contenu du script:

gs52

- rendre ce script exécutable ,changer le propriétaire si besoin et l'essayer:

gs49

gs54

gs56

- ajouter une commande dans crontab :
voir cette page : https://voilier-idem.com/accueil/page/1104

sudo crontab -e :

gs50

Commande à ajouter:
@reboot sh /CHEMIN DU SCRIPT A EXECUTER > /CHEMIN ET NOM DU FICHIER LOG

gs51

- Rebooter le PI pour vérifier que rec_sms.py fonctionne :

gs55

 

 

 

crée le 05/06/2021
04/07/2021 maj ajout modems M2M et install raspi-config sous Ubuntu
19/07/2021 ajout lien PM2
22/09/2021 correction IP 127.0.0.1 (au lieu de 127.0.0.0)
page:69