Intégrations externes : accès à une clé USB série (RFPlayer, Téléinfo, Zigbee…)

Bonjour à tous,

Suite à la fermeture de l’issue GitHub #18 (« discutons-en sur le forum »), je propose la fonctionnalité ici.

Le besoin

Les intégrations externes tournent dans un conteneur isolé, qui n’a pas accès aux ports série USB.

Aujourd’hui, le manifest permet de demander seulement ces classes de matériel : coral-usb, coral-pcie, gpu, video. Et seulement pour les sous-conteneurs (containers[]), pas pour le conteneur principal de l’intégration.

Résultat : impossible de lire directement une clé USB série.

Les intégrations concernées

J’ai développé deux intégrations qui en ont besoin :

Mais le besoin est plus large : clés Zigbee, Z-Wave, EnOcean, modems, etc.

La solution actuelle (pas idéale)

Passer par ser2net (ou socat) sur la machine hôte, qui expose le port série en TCP.

Les problèmes :

  • Il faut installer et configurer ser2net à la main, en SSH → pas adapté au public de Gladys.
  • Ça ouvre un port réseau sans authentification sur le réseau local.
  • Une brique de plus à maintenir et qui peut tomber en panne.

Ce que je propose

Ajouter une classe serial, qui suit exactement les mêmes règles que les classes existantes :

  1. Demandée dans le manifest : "devices": ["serial"], aussi pour le conteneur principal.
  2. Autorisée par l’utilisateur dans l’interface (interrupteur à l’installation, retirable à tout moment).
  3. Montée seulement si présente sur la machine.

Quelques idées en plus :

  • L’utilisateur choisit la clé dans une liste des ports série détectés (on ne monte qu’un seul périphérique, pas tout /dev).
  • Utiliser le chemin stable /dev/serial/by-id/... pour que ça marche encore après un redémarrage ou un changement de port USB.
  • Filtre optionnel dans le manifest (USB vendor/product ID ou un libellé) pour ne proposer que les clés compatibles.
  • Jamais de chemin /dev libre dans le manifest, comme pour les autres classes.

Questions ouvertes

  • Que faire si deux intégrations (ou une intégration native comme Zigbee2mqtt) veulent la même clé ?
  • Comment gérer la clé débranchée puis rebranchée à chaud ?
  • Un seul port série par intégration, ou plusieurs ?

Issues GitHub liées

Dès que la classe existe, je mets à jour mes deux intégrations pour supprimer ser2net.

Qu’en pensez-vous ? Si ça vous intéresse, n’hésitez pas à voter pour ce sujet :slightly_smiling_face: