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 :
- Téléinfo : votre compteur Linky dans Gladys avec le module LiXee TIC
- RFPlayer (RFP1000, 433/868 MHz)
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 :
- Demandée dans le manifest :
"devices": ["serial"], aussi pour le conteneur principal. - Autorisée par l’utilisateur dans l’interface (interrupteur à l’installation, retirable à tout moment).
- 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
/devlibre 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
- Cœur Gladys (montage du périphérique) : External integrations: allow access to a USB serial device · Issue #3194 · GladysAssistant/Gladys · GitHub
- Integration store (schéma du manifest) : External integrations: allow access to a USB serial device · Issue #18 · GladysAssistant/integration-store · GitHub
- SDK JS : External integrations: allow access to a USB serial device · Issue #39 · GladysAssistant/integration-sdk-js · GitHub
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 ![]()