..:: Domotique Store : Le Blog ::..
Raspberry Tous les articles

Donner une adresse persistante à un périphérique sur Domoticz et Raspberry Pi

Le principe d’une adresse persistante sur un appareil Linux (comme un Raspberry Pi faisant tourner Domoticz) est de permettre une redirection systématique d’un même matériel sur le même emplacement.

En effet, lors de son démarrage, il est possible de Linux attribue des noms différents aux ports USB. Ce qui fait que si vous êtes amené à redémarrer votre Domoticz, il est possible que la configuration ne fonctionne pas directement. En principe, s’il n’y a qu’un seul appareil relié à votre Rapsberry Pi, il n’y a aucun risque, mais s’il y a plusieurs appareils, des hub USB, il est possible que le problème se présente.

Par l’exemple du RFPlayer, nous allons voir ci-dessous comment faire en sorte que son adresse affichée sur Domoticz soit un nom de type ttyUSBRFP plutôt que ttyUSB0, ttyUSB1, etc. La même méthode est utilisable pour toute clé de communication utilisable sous Domoticz : Dongle Z-Wave, dongle EnOcean, RFXCom…

Nous allons donc créer une règle qui cherche le RFPlayer parmi les ports USB, et lui attribue un nom de port USB de notre choix. Pour cela nous utiliserons la fonction des symlink de linux (« liens symboliques », donc une adresse A virtuelle qui mène vers une adresse B réelle).

Il faut accéder au Raspberry Pi en ligne de commande. Deux solutions : soit brancher un clavier et un écran au Raspberry Pi (attention, le clavier sera en QWERTY par défaut), soit se connecter au Raspberry Pi à distance, en SSH, en utilisant un utilitaire dédié (comme Putty sous Windows). Nous utilisons Putty et nous nous connectons à l’adresse IP du Raspberry Pi.

L’identifiant par défaut est pi et le mot de passe par défaut est raspberry (donc, il faut taper rqspberry en Qwerty)

Connexion au Raspberry Pi avec Putty

En ligne de commande, nous nous déplaçons jusque dans le registre des règles :

cd /etc/udev/rules.d

Nous créons un nouveau fichier de règles (ou nous l’ouvrons, s’il existe) pour les ports USB et série :

sudo vi 99-usb-serial.rules

sudo vi signifie que nous démarrons en mode root (avec toutes les permissions) un éditeur de texte (vi) pour ouvrir le fichier indiqué dans la ligne.

Dans ce fichier, nous ajoutons la ligne suivante :

SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ENV{ID_MODEL}=="RFPLAYER", SYMLINK+="ttyUSBRFP"

Petit décodage : nous indiquons dans quel sous-système est le périphérique (tty et USB), et ensuite nous indiquons une donnée qui permet de le reconnaître (ENV{ID_MODEL}=="RFPLAYER"). Et enfin, nous indiquons le SYMLINK, le nom sous lequel l’appareil sera vu par le système. Nous choisissons ttyUSBRFP, voir l’explication ci-dessous.

Saisissez la commande :w pour enregistrer vos modifications et :q! pour quitter l’éditeur de texte vi.

Modification des règles de réécriture dans vi

[box type= »info » ]L’éditeur vi peut être assez compliqué à prendre en main pour les non initiés, car il est différent des éditeurs de textes dont vous avez probablement l’habitude. Nous vous recommandons de faire juste un clic droit pour copier la commande ci-dessus, de faire « Echap » pour passer en mode commande, et juste saisir la commande :w puis :q!, respectivement pour enregistrer les modifications (w comme write) puis fermer l’éditeur (q comme quit).[/box]

Pour que Domoticz fasse apparaître l’alias parmi les propositions, il faut qu’il soit de la forme ttyUSB*, ttyAMA*, tty S* ou tty.usbserial*. Donc nous reprenons ttyUSB en ajoutant un nom reconnaissable : ttyUSBRFP. Si vous avez d’autres matériels, vous pouvez leur attribuer d’autres noms (ou des chiffres de votre choix, en indiquant un chiffre élevé (car les chiffres peu élevés sont pris par de vrais périphériquesà. Pour ajouter ces autres matériels, il vous faudra modifier le ID_MODEL qui permet de différencier chaque appareil. Voir à la fin de l’article la manière de récupérer ces informations.

Après avoir éventuellement ajouté vos autres règles de réécriture, il vous faut redémarrer le système pour que la modification soit prise en compte (soit avec la commande sudo reboot, soit avec la fonction « Redémarrer » de Domoticz). Vous pouvez ensuite vérifier la bonne prise en compte de la redirection en tapant la commande suivante qui permet de lister les connexions au Raspberry :

ls -l /dev/tty*

Ou pour ne lister que les connexions en USB :

ls -l /dev/ttyUSB*

Avec cette commande, vous aurez le listing des connexions existantes :

Domoticz : redirections symlink

Nous voyons bien ici le nom attribué ttyUSB0, et le nom persistant qui redirige vers la connexion : ttyUSBRFP -> ttyUSB0.

Il ne nous reste plus qu’à aller dans la configuration du RFPlayer dans Domoticz et sélectionner le nom persistant que nous avons choisi (ttyUSBRFP).

En utilisant le type par défaut de Domoticz :

Choix du port série du RFPlayer (avec symlink)

Ou en utilisant le plugin RFPlayer pour Domoticz :

Choix du port série du RFPlayer (avec symlink et plugin)

Dorénavant, nous pouvons ajouter différents matériels en USB au Raspberry, le RFPlayer sera toujours adressé sur ce port /dev/ttyUSBRFP en plus de son port réel.

Méthode pour récupérer l’identifiant propre à chaque matériel

Comme évoqué ci-dessus, vous pouvez indiquer autant de règles de réécriture que vous avez besoin. Cependant, vous aurez besoin d’informations pour chacun des périphériques à ajouter. Nous avons reconnu le RFPlayer par le critère (ENV{ID_MODEL}=="RFPLAYER"), il nous faut un critère équivalent pour les autres appareils.

Avant de continuer, quelques éléments supplémentaires sur les ports reconnus par Domoticz :

  • Les adresses de forme /dev/ttyACM*/ sont les ports de type « abstract control model » et correspondent généralement à des périphériques reliés au Raspberry Pi en USB. S’ils apparaissent sous la forme ttyACM plutôt que ttyUSB, c’est lié au firmware propre au dongle USB. Par exemple certaines clés Z-Wave apparaissent sous cette forme.
  • Les adresses de forme /dev/ttyAMA*/ sont les ports permettant de communiquer avec les ports GPIO du Raspberry Pi. Typiquement, si vous avez une extension RaZberry de communication Z-Wave, c’est sous une adresse de ce type qu’elle sera identifiée. Notez qu’il n’est généralement pas nécessaire de faire une redirection symlink dans ce cas de figure, il est assez rare qu’une RaZberry soit changée de place après son installation.
  • Les adresses de la forme /dev/tty.usbserial*/ et /dev/tty S*/ sont destinées aux adaptateurs USB – port série et aux ports série réels. Je n’ai pas rencontré de passerelle de communication correspondant à cette configuration dans ce que j’ai essayé, mais sachez qu’ils existent et sont vus dans Domoticz si vous avez des matériels correspondant à cette

Vous pouvez obtenir ces informations avec la commande suivante, qui affichera les informations nécessaires. Pensez à modifier le tty*** par le port sur lequel l’appareil à reconnaître est branché, et notez qu’il faut bien utiliser le port réel utilisé par l’appareil.

sudo udevadm info --query=all --name=tty***

Par exemple, pour une clé Z-Wave de Sigma Design, l’adresse est ttyACM0. Nous envoyons donc la commande :

sudo udevadm info --query=all --name=ttyACM0

Sur l’écran d’information, nous avons différentes caractéristiques de cet appareil.

Identification de la clé Sigma Designs dans Domoticz

Nous pouvons faire la vérification sur ID_MODEL (qui est 0200 pour cet appareil), ou pour ID_VENDOR (qui est 0658 comme montré ci-dessus)

La ligne que nous ajouterons dans le fichier 99-usb-serial.rules comme expliqué plus haut est donc :

SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ENV{ID_VENDOR}=="0658", SYMLINK+="ttyACMZWave"

Vous l’aurez compris, les paramètres présentés sur l’écran de description d’un appareil sont tous exploitables pour l’identifier. Bien sûr, nous n’utiliserons pas un critère de type « ID_TYPE=generic » car ce critère est très probablement partagé par de nombreux appareils, mais ID_MODEL et ID_VENDOR sont généralement suffisant pour reconnaître à coup sûr un périphérique. Nous pourrions même envisager de mettre plusieurs fois le même appareil sur un seul Raspberry et le différencier avec son numéro de série propre, ID_SERIAL !

Pour conclure, voici ci-dessous un écran avec des adresses persistantes utilisant ces critères :

Notre fichier 99-usb-serial.rules est comme ceci :

SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ENV{ID_MODEL}=="RFPLAYER", SYMLINK+="ttyUSBRFP"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ENV{ID_MODEL}=="RFXtrx433", SYMLINK+="ttyUSBRFXCOM"
SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ENV{ID_VENDOR}=="0658", SYMLINK+="ttyACMZWave"

En utilisant la commande ls -l /dev/tty* évoquée plus haut, nous listons les différentes connexions, et les trois appareils réécrits apparaissent sous la forme demandée : ACMZWave, USBRFP et USBRFXCOM !

Exemple de trois redirections Symlink sur le Raspberry Pi

Ainsi, les ports d’origine comme les ports réécrits apparaissent sous Domoticz :

Choix d'un port Symlink sous Domoticz

Nous espérons que ce tutoriel aura pu vous aider à affiner votre installation comme vous le souhaitez. La partie la plus compliquée est sans doute la prise en main de vi, mais en cherchant « vi linux » ou « éditeur vi » sur Internet, vous trouverez des ressources pour vous aider.

0
0
Pierre

Technophile, ludophile et bidouilleur dans l'âme, j'aborde les nouvelles technologies avec passion, curiosité et ouverture d'esprit. Je faisais partie de l'équipe de Planète Domotique de juin 2013 à mai 2017, d'où l'écriture de nombreux articles de blog pendant cette période.

Laisser un commentaire