Ma nouvelle installation en conteneur
Liaison série entre Domoticz et un PI équipé d'une carte modem suite de l' article consacrée au modem GSM
Dans l'article précédent j'ai expliqué pourquoi j'utilisai un Raspberry consacré uniquement aux différentes sauvegardes , à la communication par GSM et à la surveillance de mon PC sur lequel sont installées mes différentes machines virtuelles. En réalisant une liaison série du Raspberry vers le PC ,on évite pour la communication entre Le PI et Domoticz: - le routeur ,qui peut tomber en panne ou soumis à une panne secteur (mon mini PC et le Raspberry sont alimentés en 12 Volts)si bien que par le GSM on assure une continuité minimale du système domotique ; je pense en premier à l'alarme . Pour résumer , on réunit 2 machines pour n'en faire qu'une seule dont chaque moitié surveille l'autre
les UARTUne liaison série est déjà utilisé pour le GSM aussi il faut activer un ports UART supplémentaire Un petit rappel : - Liste des UART sous Ubuntu 20.x il faut installer la librairie : libraspberrypi-bin,
Sous Ubuntu :librairie libraspberrypi
Infos d’un UART , ex UART2 :
Les informations suite à cette commande montrent les GPIO utilisés qui sont:- 0-3 pour UART 2, Ce serait :- 4-7 pour UART3,- 8-11 pour UART4 ,- 12-15 pour UART5.Il y a un chevauchement entre l'UART standard sur 14 & 15(TXD1 et RXD1) , voir la copie d’écran ci-après) , ou UART5 a ses signaux de contrôle de flux pour afficher toutes les fonctions alternatives disponibles:
Photo : https://www.programmersought.com/article/92047061453/
Activer un UART il faut ajouter "dtoverlay=uartn" à /boot/config.txtPour UART2 :
le noyau rejettera les tentatives d'activation des UART si les pins GPIO sont déjà utilisés (pour I2C par exemple).liste des ports AMA* avant et après la modification du fichier config.txt:- avant modification de config.txt
après modification de config.txt
PORTS SERIES Afficher les ports série
Serial1 : Bluetooth Faut -il créer d’un lien symbolique pour ajouter un serial2 pour ttyAMA1 ? souvent indiqué sur le Net: Je ne le conseille pas car à chaque reboot il faut recréer le lien , donc utiliser crontab( pour automatiser la création au reboot).....autant conserver ttyAMA1 pour ceux qui souhaitent créer ce lien:
Si des UART supplémentaires sont activés, ils apparaîtront comme /dev/AMAn , il suffira de faire des liens symboliques vers serialn+1 ; l’ordre des UART est sans importance : si UART5 est ajouté en premier :ttyAMA1 sera ajouté .
ESSAI de COM entre un PC et le PI pour les premiers essais, j'utilise mon PC Windows 10
- Sur le PI4 j’utilise minicom et Putty ; une carte GMS sim800c est ajouté car c’est le PI qui assure l’envoi et la réception des SMS, voir cette page consacrée à la partie modem.- Sur le PC : Teraterm , http://www.teraterm.org/ - J’utilise l’UART5 , les pins GPIO 12 et 13 et GND raccordés sur une interface USB/TTL cp2102
Lancement des programmesTera term :- choisir le bon com et la vitesse commune
Consoles PC et PI :
La communication s’effectue sans problème , il suffit maintenant de déplacer le PI vers le PC domotique.
Communication UART entre le Pi et Domoticz à l'aide de Python- Domoticz est installé sur une VM Proxmox- ne pas oublier d'ajouter l’utilisateur à dialout
Pour faire des essais sur la VM Debian buster "Domoticz" on utilise minicom ou Gtkterm , si il n'est pas installé , l'installer: sudo apt install gtkterm
essai de com entre la VM Proxmox Domoticz et le PI minicom du pi et GtkTerm (ou minicom si l'interface graphique n'est pas installée) du debian domoticz
Communication sur Domoticz à l'aide de Lua ? Lua est intégré à Domoticz aussi l’intégrateur n’est pas disponible pour ajouter des modules comme la bibliothèque lua-periphery (GPIO, LED, PWM, SPI, I2C, MMIO, série)….c’est dommage , comme pour le PI ,il faut donc utiliser Python-periphery Python-périphéry est une pure bibliothèque Python pour l'accès aux interfaces d'E/S GPIO, LED, PWM, SPI, I2C, MMIO et série dans l'espace utilisateur Linux. Python-périphéry est compatible avec Python 2 et Python 3Installation Avec pip (s'il n'est pas installé l'installer, voir cette page):
Script d'essai série: essai.py , il suffit d"adapter suivant la machine ,le Port et le texte
....ttyAMA1(ou Serial2) sur le PI et ttyUSB0 sur la VM domoticz Doc: https://python-periphery.readthedocs.io/en/latest/serial.html#code-example
Pour des exemples d'utilisation, consulter https://python-periphery.readthedocs.io/en/latest/serial.html . On lance les programmes essai.py sur le PI et la VM domoticz
Le fichier d'essai modifié avec la boucle While:
#!/usr/bin/env python3.7 -*- coding: utf-8 -*- from periphery import Serial import time # control serial = Serial("/dev/ttyUSB0", 115200) #pour le PI , ttyAMA1 while True: serial.write(b"Bonjour michel") # pour le PI bonjour Domoticz time.sleep(5) # Read up to 128 bytes with 500ms timeout buf = serial.read(128, 0.5).decode() print("read {:d} bytes: _{:s}_".format(len(buf), buf)) time.sleep(5)
Piloter Domoticz par GSM Il suffit d'adapter les scripts décrits précédemment (voir cette page). Script installé sur le PI :
Script installé sur le mini PC :com_serie_dz.py dans le dossier /scripts/python de Domoticz
Important: comme tout port USB , en cas de reboot , ce dernier peut avoir changé, pour y remédier il faut :-soit créer une règle UDEV .- soit tester le port dans le script python (c'est ce que j'ai retenu car sur ma VM debian10 installée sur Proxmox la règle ne fonctionne pas) ;Pour la VM Proxmox il faut choisir l'ID vendeur:
REMARQUES IMPORTANTES:- en cas de response=401 (ajouter print(response) au script), il faut indiquer dans l'url le login et le mot de passe .- Si la passerelle zigbee (ou une autre passerelle) utilise aussi un port /dev/ttyUSB* , il faut utiliser /serial/by-id/ : exempleser = Serial("/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0", 115200) Les consoles PI et PC Domoticz:l'essai est réalisé sous python3.7
Essai avec le smartphone:
le script 'rec_sms.py' est lancé par le fichier bash 'start_rec_sms.sh' ; voir la page consacrée au modem GSM pour le démarrage automatique de ce script avec Crontab. Le script 'com_serie.py sur le serveur Domoticz, que j'ai rebaptisé sms_dz.py dans la version définitive lors de l'installation du modem Ebyte ( voir cette page) peut être lancer automatiquement avec systemd (sur le PI avec GPIO systemd ne fonctionne pas toujours c'est pourquoi il est préférable d'utiliser Crontab). La version définitive de ce fichier comprend l'envoi de SMS sur cette liaison série , à partir de Domoticz,(voir cette page qui est consacrée au modem Ebyte , mais le fichier python ne concerne que la liaison série et peut être utilisée pour tous les modems raccordés sur un PI) Avec nano , dans le répertoire /etc/systemd/system: - créer un service pour sms_dz.py (ex com_serie.py dans la 1ere partie de ce paragraphe) : sms_dz.service par exemple ,
Ne pas oublier d'activer le service , ensuite les commandes sont habituelles , systemctl (start , status, stop) sms_dz.
Par SMS il est possible d'exécuter toutes les commandes de l’api de Domoticz , il suffit pour cela ,de choisir des mots clés qui utiliseront la bonne url, voir l'exemple pour les interrupteurs sur cette page.