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 UART

Une 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

 

ser33

 

 

ser1

Infos d’un UART , ex UART2 :

ser2

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:

ser3

ser4

Photo : https://www.programmersought.com/article/92047061453/

 

Activer un UART

il faut ajouter "dtoverlay=uartn" à /boot/config.txt
Pour UART2 :

 

ser5

ser6

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

ser7

après modification de config.txt

ser8

 

 

PORTS SERIES

Afficher les ports série

ser9

 

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:

ser10

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

ser11

- 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 programmes

Tera term :

- choisir le bon com et la vitesse commune

ser12

ser13

ser14

ser15

Consoles PC et PI :

ser16

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

ser34

 

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

ser17

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 3

Installation
Avec pip (s'il n'est pas installé l'installer, voir cette page):

ser18

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

ser19

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

ser20

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)

ser21

 

 

Piloter Domoticz par GSM

Il suffit d'adapter les scripts décrits précédemment (voir cette page).

Script installé sur le PI :

 

ser25

 

Script installé sur le mini PC :com_serie_dz.py dans le dossier /scripts/python de Domoticz

ser29

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:

ser23

ser22

 

ser24

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 .
ser35
- Si la passerelle zigbee (ou une autre passerelle) utilise aussi un port /dev/ttyUSB* ,
il faut utiliser /serial/by-id/ : exemple
ser = 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

ser27

ser26

Essai avec le smartphone:

ser28

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 ,

ser30

ser31

Ne pas oublier d'activer le service , ensuite les commandes sont habituelles , systemctl (start , status, stop) sms_dz.

ser32

 

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.

 

 

 

 

 

 

crée le /06/2021
maj 16/07/2021 install libraspberrypi-bin pour Ubuntu (dtoverlay)
maj 21/08/2021 ajout Gtkterm
maj 27/12/2022 ajout remarque concernant l'appel domoticz avec localhost

page:70