Comment fixer les ports USB sur mini-PC?

Bonjour,
ça fait plusieurs fois deja, que les ports USB1 et UB0 s’inversent au redemarrage, apres que le disjoncteur ai sauté. Sur le port USB0 j’ai branché ma clé zigbee et sur le port USB1 mon Rflink, et donc à chaque fois le systeme initialise la cle zigbee sur USB1 et Le Rflink sur USB0.
J’ai bien essayé d’installer cette config, mais sur node red quand le rflink est sur USB0 il ne se connecte pas. Donc je retablie à chaque fois : clé zigbee sur USB0 et et Rflink sur USB1. J’avais deja ce probleme sur le RPI et @VonOx , avant resolu ce probleme

docker run -d \
--log-opt max-size=10m \
--restart=always \
--network=host \
--name node_red \
-u node-red:dialout \
--device=/dev/ttyUSB0 \
--device=/dev/ttyUSB1 \
--label com.centurylinklabs.watchtower.enable=false \
-v /var/lib/node-red:/data \
nodered/node-red

Tout fonctionne actuellemnt et je ne suis pas chaud pour reinstaller tout Node-red avec cette commande.
Donc je voulais savoir, si on pouvait fixer l’etat des ports USB, ou alors faut-il que j’insiste pour inverser les ports USB?
Merci pour votre aide

Tu peux fixer l’attribution des ports USB avec des règles udev :slight_smile:

J’ai demandé à ChatGPT d’écrire un petit tuto, voilà ce qu’il me donne (ça me semble pas mal):

1. Utiliser des règles udev pour assigner des noms persistants aux périphériques USB

Les ports /dev/ttyUSB0 et /dev/ttyUSB1 sont attribués dynamiquement au démarrage du système, ce qui peut provoquer l’inversion aléatoire des périphériques. Avec udev, on peut assigner un nom unique et persistant à chaque périphérique en fonction de ses caractéristiques (comme son ID de produit, son fabricant ou son numéro de série).

Voici les étapes :

  1. Identifier les périphériques USB :

Utilisez la commande suivante pour repérer les informations sur chaque périphérique :

udevadm info -q all -n /dev/ttyUSB0

udevadm info -q all -n /dev/ttyUSB1

Vous cherchez des attributs comme ID_VENDOR_ID, ID_MODEL_ID ou ID_SERIAL.

  1. Créer une règle udev :

Éditez ou créez un fichier dans /etc/udev/rules.d/ (par exemple /etc/udev/rules.d/99-usb-serial.rules) et ajoutez une règle pour chaque périphérique :

SUBSYSTEM==« tty », ATTRS{idVendor}==« XXXX », ATTRS{idProduct}==« YYYY », SYMLINK+=« zigbee_adapter »

SUBSYSTEM==« tty », ATTRS{idVendor}==« ZZZZ », ATTRS{idProduct}==« WWWW », SYMLINK+=« rflink_adapter »

Remplacez XXXX, YYYY, ZZZZ, et WWWW par les valeurs correspondantes trouvées à l’étape précédente.

  1. Redémarrer le service udev :

Appliquez les règles en redémarrant udev :

sudo udevadm control --reload-rules

sudo udevadm trigger

  1. Mettre à jour la commande Docker :

Modifiez votre commande Docker pour pointer vers les nouveaux noms persistants (/dev/zigbee_adapter et /dev/rflink_adapter) :

docker run -d \

–log-opt max-size=10m \

–restart=always \

–network=host \

–name node_red \

-u node-red:dialout \

–device=/dev/zigbee_adapter \

–device=/dev/rflink_adapter \

–label com.centurylinklabs.watchtower.enable=false \

-v /var/lib/node-red:/data \

nodered/node-red

2. Utiliser les options de Docker pour spécifier les périphériques via leur chemin stable

Si vous ne souhaitez pas utiliser udev, vous pouvez spécifier directement les périphériques via leur chemin matériel stable, accessible dans /dev/serial/by-id/.

  1. Lister les périphériques USB :

Exécutez la commande suivante pour identifier les noms stables :

ls -l /dev/serial/by-id/

Vous verrez des liens symboliques comme :

usb-1a86_USB2.0-Serial-if00-port0 → …/…/ttyUSB0

usb-0403_6001_RFLINK-if00-port0 → …/…/ttyUSB1

  1. Mettre à jour la commande Docker :

Modifiez la commande Docker pour utiliser ces chemins :

docker run -d \

–log-opt max-size=10m \

–restart=always \

–network=host \

–name node_red \

-u node-red:dialout \

–device=/dev/serial/by-id/usb-1a86_USB2.0-Serial-if00-port0 \

–device=/dev/serial/by-id/usb-0403_6001_RFLINK-if00-port0 \

–label com.centurylinklabs.watchtower.enable=false \

-v /var/lib/node-red:/data \

nodered/node-red

Résumé

Solution recommandée : Utiliser des règles udev pour attribuer des noms persistants, ce qui est flexible et indépendant de Docker.

Alternative rapide : Utiliser les chemins /dev/serial/by-id/ directement dans la commande Docker.

Ces solutions garantiront que vos périphériques USB ne s’inverseront plus, même après un redémarrage ou une panne électrique.