Ma nouvelle installation en conteneur
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):
- module USB SIM800L, le plus simple à installer mais qui offre moins de possibilités
- 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
- 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
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-configSous Putty:
les packages à installer :
Installer pyserial
pour un RPI seulement : pas utile pour l'instant mais pourra l'être plus tard,- pour PI OS
- pour Ubuntu 20.x :
Autoriser l'accès des ports série au pi:
Installer minicom , la console de communication série,
déterminer le port de notre périphérique:
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
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:
- Envoyer le code PIN si nécessaire :AT+CPIN="XXXX"...........réponse:
- Activer le mode texte pour l'envoi du SMS.: AT+CMGF=1...........réponse:
- 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:
des commandes utiles:- pour tester la présence du réseau:
- pour connaitre la qualité du réseau:
- pour connaitre les opérateurs disponibles:
- Pour connaitre l’opérateur connecté :
- Pour sélectionner la zone de stockage des messages texte SMS: AT+CPMS="SM"
- "AT+CMGL" renvoie tous les messages texte non lus ,"REC UNREAD"
Envoi d'un SMS
L’envoi complet d’un message en ligne de commande avec minicom:
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-moduleCe 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?
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
- Utilisation : créer le fichier envoi_sms.py avec nano (sudo nano envoi_sms.py)
- essai du script :
réception du SMS:
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é:
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" :
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.
Un essai en batch: python3.7:
sur le smartphone :
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 .
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 dzVentAu 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 .
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:
copies d'écran de domoticz
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" :
Contenu du script:
- rendre ce script exécutable ,changer le propriétaire si besoin et l'essayer:
- ajouter une commande dans crontab :voir cette page : https://voilier-idem.com/accueil/page/1104sudo crontab -e :
Commande à ajouter:@reboot sh /CHEMIN DU SCRIPT A EXECUTER > /CHEMIN ET NOM DU FICHIER LOG
- Rebooter le PI pour vérifier que rec_sms.py fonctionne :