lundi 22 février 2010

2e étape (3)

Comment assigner un alias sur un device qui change de nom ?

Il faut utiliser la commande udevadm
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0)
qui donne un max d'info sur les caractéristiques du device

Le problème est comment discriminer la carte relais, de la carte compteur ?
Lorsque je branche individuellement chaque carte, elles apparaissent sur /dev/ttyUSB0
Je branche la carte relais et je tape :

udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) > usbrelais

Puis je débranche la carte relais pour brancher la carte compteur, et je tape :

udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) > usbcompteur


Puis je fais la différence des deux fichiers ainsi créés.

43c43
<> ATTRS{urbnum}=="1060205"
54c54
<> ATTRS{devnum}=="3"
61c61
<> ATTRS{serial}=="A60084Pi"
72c72
<> ATTRS{urbnum}=="57"



On voit clairement que la seule vraie différence c'est le numéro de série :
A600bqCb pour le compteur et A60084Pi pour la carte relais

Il faut maintenant grâce à la doc de cette page modifier les règles du démon udev
Attention la doc est un peu vielle, il faut remplacer udevinfo par udevadm et udevtest par l'option test de udevadm

Dans mon cas j'ai créé un fichier 99-domotique.rules sous /etc/udev/rules.d contenant
BUS=="usb", ATTRS{serial}=="A600bqCb" , SYMLINK+="compteur"
BUS=="usb", ATTRS{serial}=="A60084Pi" , SYMLINK+="relais"

Maintenant je peux hard coder dans les programmes en C, le /dev/relais ou le /dev/compteur à la place de mes /dev/ttyUSB0 et USB1 qui changeaient tout le temps !

Vive le libre !



Aucun commentaire: