Intégrations externes dans Gladys Assistant

Statut : brouillon, ouvert au débat
Discussion : ce sujet du forum


Salut à tous,

Je vous propose une nouvelle fonctionnalité qui va changer la manière dont les intégrations sont développées dans Gladys.

C’est un projet longuement mûri, et je serais ravi d’avoir vos retours, vos idées et vos remarques pour continuer à l’améliorer :slight_smile:

Pourquoi maintenant

Depuis le début du projet, toutes les intégrations de Gladys vivent dans le core. N’importe qui peut en développer une ou l’améliorer via une pull request, mais chaque ligne passe par ma review avant d’être mergée. Ce choix a un énorme avantage : quand vous installez Gladys, tout est déjà là. Pas de store, pas de dépendances à gérer, pas de plugin cassé après une mise à jour. C’est une des raisons pour lesquelles Gladys est plus simple à prendre en main que d’autres solutions.

Mais ce modèle a un plafond, et je suis en train de le toucher. Il existe des milliers de marques, de protocoles, de services, et la moindre modification d’une intégration, même un simple changement de traduction, doit passer par moi : review, merge, release. Ça ne passe pas à l’échelle, et ça fait de moi le goulot d’étranglement du projet.

On pourrait se dire que Matter va résoudre ce problème. Matter arrive, et va à mon avis devenir le protocole de référence qui contrôlera tous les appareils connectés à l’avenir : un seul standard, tous les appareils compatibles nativement, plus besoin d’une intégration par marque. Sauf qu’on ne sait pas quand cet avenir sera une réalité, et le projet ne peut pas se permettre d’attendre indéfiniment que le parc installé bascule.

Et surtout, Matter ne couvre que le contrôle des appareils connectés. Il reste tout un pan d’intégrations qui n’a rien à voir avec des appareils : la communication (Telegram, etc.), la météo (OpenWeather, Météo France), les calendriers (CalDAV, Google Calendar)… Tout ça ne passera jamais par Matter. Si on veut que Gladys devienne un projet avec la même ambition que Home Assistant, on doit pouvoir permettre l’installation d’intégrations externes.

Cette RFC propose donc d’ouvrir Gladys aux intégrations externes : des intégrations développées et publiées par n’importe qui, sans validation préalable de ma part, installables en un clic depuis l’interface.

Le défi, c’est de faire ça sans sacrifier ce qui fait Gladys. Concrètement, quatre exigences non négociables ont guidé cette proposition :

  1. Une intégration qui plante ne doit jamais faire planter Gladys.
  2. Pas d’états incompréhensibles : si une intégration ne répond plus, l’utilisateur doit le voir et pouvoir agir.
  3. Les interfaces doivent rester propres et cohérentes entre elles.
  4. Zéro manipulation technique pour l’utilisateur. Pas de terminal, pas de YAML, pas de redémarrage manuel.

Ce que cette RFC ne propose pas

  • On ne remplace pas les intégrations natives. Les intégrations des protocoles universels (Matter, Zigbee, Z-Wave…) resteront toujours dans le core, pré-installées, maintenues comme aujourd’hui. Le nouveau système s’ajoute à côté, et vise toutes les intégrations de protocoles ou de services qui ne sont pas universels : désormais, n’importe qui pourra créer une intégration séparée.
  • On ne vise pas la compatibilité avec les intégrations Home Assistant / HACS. Elles sont profondément couplées à l’architecture de HA ; les exécuter dans Gladys est irréaliste. En revanche, je m’inspire de leur modèle de distribution (dépôt Git + manifeste + store).
  • On ne permet pas aux intégrations d’injecter du code dans l’interface. C’est un choix assumé, détaillé plus bas.

Architecture proposée

Un conteneur Docker par intégration

Gladys tourne déjà exclusivement dans Docker, avec la socket Docker montée. On s’appuie dessus : chaque intégration externe tourne dans son propre conteneur, créé et supervisé par le core Gladys.

Ce conteneur est verrouillé au maximum :

  • pas de mode privilégié, pas d’accès à la socket Docker
  • pas d’accès à la base de données ni aux fichiers de Gladys
  • système de fichiers en lecture seule, sauf un petit répertoire de données qui lui est propre
  • limites strictes de mémoire, CPU et nombre de processus
  • réseau restreint aux hôtes que l’intégration a déclarés dans son manifeste.

Une intégration qui crashe, qui fuit de la mémoire ou qui part en boucle infinie reste confinée dans sa boîte. Et une intégration malveillante ou mal écrite ne peut pas « aller modifier la base en direct » : le fichier SQLite n’existe tout simplement pas dans son système de fichiers.

Ce choix apporte un bonus important : les intégrations ne sont plus limitées à Node.js. Une image Docker peut contenir du Python, du Go, du Rust. Chaque auteur embarque ses dépendances dans son image, et tout le build est fait en amont, au moment de la publication, jamais au runtime chez l’utilisateur.

À terme, ce choix apporte aussi quelque chose d’intéressant : il sera possible de faire tourner des intégrations déportées !

Toute communication passe par l’API-hôte

Une intégration ne touche jamais les internals de Gladys. Sa seule porte d’entrée est une API-hôte : l’intégration dialogue avec le core via une API REST HTTP JSON toute simple, dans le même esprit que ce qui existe déjà dans Gladys aujourd’hui.

Les primitives envisagées pour la v1 :

  • déclarer des appareils et leurs fonctionnalités, dans le modèle device/feature existant de Gladys ;
  • publier des états et recevoir des commandes
  • stocker sa configuration et ses secrets (stockés en DB côté core)
  • écrire des logs structurés
  • demander une découverte réseau médiée : c’est le core, qui a accès au réseau de l’hôte, qui effectue les scans mDNS et le passthrough des périphériques USB, puis transmet les résultats. L’intégration n’a ainsi jamais besoin du mode host ni d’accès matériel direct.

Ce contrat au niveau du protocole est le vrai fondement de la proposition. Le conteneur n’est « que » le mécanisme qui rend ce contrat impossible à contourner. Il permet aussi de faire évoluer le schéma interne de Gladys sans casser l’écosystème : tant que l’API-hôte est stable, les intégrations continuent de fonctionner.

Supervision : pas d’états zombie

Le core embarque un superviseur qui gère le cycle de vie complet de chaque intégration, avec une machine à états toujours visible dans l’interface :

Installée → Démarrage → En fonctionnement → Dégradée → En panne → Arrêtée

Le superviseur envoie un heartbeat régulier à chaque intégration. Pas de réponse ? L’intégration passe en « Dégradée » et est redémarrée automatiquement, avec un délai croissant entre les tentatives. Si elle crashe en boucle, on arrête d’insister : elle passe en « En panne », et l’utilisateur voit un message clair avec les logs de l’intégration et les actions possibles (redémarrer, désactiver, signaler au développeur).

Tous les appels entre le core et l’intégration ont un timeout. Une intégration qui pend ne bloque jamais Gladys.

L’objectif : qu’il n’existe plus aucun état non observable ou non récupérable. Quand quelque chose ne va pas, on le voit, on comprend, on agit, depuis l’interface.

Interface : déclarative, pas de code arbitraire

C’est probablement le choix le plus discutable de cette RFC, donc autant l’assumer clairement.

Les intégrations ne fournissent pas de composants d’interface. Elles décrivent leurs besoins, et c’est Gladys qui rend l’interface avec son propre design system :

  • la configuration est décrite par un schéma (type JSON Schema) : Gladys génère le formulaire, la validation, les messages d’erreur, de façon identique pour toutes les intégrations ;
  • les appareils sont déclarés dans le modèle device/feature existant : ils s’affichent automatiquement avec les mêmes cartes et les mêmes contrôles que les intégrations natives ;
  • pour les besoins plus spécifiques, un vocabulaire de widgets déclaratifs sera défini et enrichi progressivement, en fonction des besoins réels remontés par les développeurs.

Ce que ça coûte : un développeur ne pourra pas créer un écran totalement sur mesure. Ce que ça garantit : une interface cohérente partout, aucune faille XSS venue d’un plugin, aucun conflit de versions front, et une expérience identique pour l’utilisateur quelle que soit l’origine de l’intégration. Vu les priorités du projet, je pense que c’est le bon compromis. Mais c’est exactement le genre de point sur lequel j’attends vos retours.

Distribution : un store dans Gladys

L’utilisateur découvre et installe les intégrations depuis un store intégré à l’interface. Installer = un clic. Le core télécharge l’image, la vérifie, lance le conteneur, affiche le formulaire de configuration si l’intégration a besoin d’identifiants. Aucun terminal, aucun fichier à éditer.

Chaque intégration est publiée avec un manifeste : nom, version, versions de Gladys compatibles, permissions demandées (hôtes réseau, périphériques), schéma de configuration. Les permissions sont affichées à l’utilisateur avant l’installation, comme sur un store mobile.

Toutes les intégrations externes sont « community based » : je ne prévois pas de les relire une par une, ce serait retomber dans le goulot d’étranglement que cette RFC cherche justement à supprimer. Un avertissement clair est affiché à l’installation pour rappeler qu’il s’agit de code tiers non audité. C’est le rôle des permissions déclarées et de l’isolation par conteneur de rendre cette ouverture acceptable.

Développer une intégration à l’ère de l’IA

Un point qui change tout par rapport à il y a quelques années : développer une intégration est devenu très facile grâce à l’IA. Mon intention est de fournir un template d’intégration officiel, propre et documenté. À partir de ce template, avec Claude Code/Cursor, créer une intégration pour un service ou un protocole donné devient l’affaire de quelques heures plutôt que de quelques jours.

C’est ce qui rend cette proposition réellement puissante : au lieu d’attendre que je développe ou que je relise chaque intégration, la communauté pourra en produire beaucoup plus, beaucoup plus vite.

Le rythme d’apparition de nouvelles intégrations ne sera plus limité par ma disponibilité.

Feuille de route proposée

  1. Définir l’API-hôte et le SDK, puis proposer à quelques développeurs de créer les premières intégrations externes dessus.
  2. Spécifier le manifeste et le schéma d’interface déclarative.
  3. Implémenter le superviseur et le lancement de conteneurs verrouillés, en preuve de concept sur une seule intégration.
  4. Construire le store et le parcours d’installation, avec le template d’intégration officiel.
  5. Ouvrir la publication à tous.

Mon objectif est de sortir ce nouveau système le plus vite possible : avec les IA, il est possible d’aller très vite.

Je compte commencer le travail dès cette semaine avec Fable 5, tant qu’il est disponible.

Questions ouvertes à la communauté

  • Le compromis « UI déclarative uniquement » vous semble-t-il acceptable ? Quels cas d’usage réels ne rentreraient pas dedans ?
  • Quelles primitives manquent à l’API-hôte pour vos intégrations rêvées ?
  • Faut-il limiter la v1 aux intégrations en Node.js (avec un SDK officiel) pour simplifier, ou ouvrir tous les langages dès le départ ?

Cette proposition est un point de départ, pas une décision gravée dans le marbre : vos critiques, vos objections et vos idées sont exactement ce que j’attends pour la rendre meilleure :slight_smile:

Bonjour @pierre-gilles ,

Je ne suis pas expert en domotique, mais je suis bien sûr très heureux d’apprendre cette possibilité d’integration sur-mesure de besoin !

Je suppose que si une extension est super pertinente et fortement demandé, elle sera integrée à terme au core de Gladys ?

Il n’y aura aucun problème de performance à avoir une centaine de docker qui passe par la une seule voie l’API Host ?

Je suis Gladys depuis moins de 2 mois mais je suis choqué de la réactivité et de la vitesse de développement de cet outil !

Merci encore !

C’est en effet un gros changement mais je pense aussi que c’est nécessaire. Toi seul tu ne peux pas développer, relire et maintenir toutes les intégrations même avec de l’IA. Même avec de supers contributeurs, la relecture des contributions te prend sûrement beaucoup de temps.

Aussi, même si c’est à privilégier, il faut aussi reconnaître que l’intégration MatterBridge peut connaître ses limites quand le protocole Matter ne supporte pas certaines fonctionnalités.

Je suis d’accord avec ton approche de bien séparer le core et les intégrations. Ne pas permettre aux intégrations d’accéder au système est aussi un très bon point. Je préciserai aussi que les intégrations doivent être gratuites et open source pour être acceptées.

En ce qui concerne une version v1 je rajouterais le langage Python qui est très utilisé en domotique et facile à prendre en main. De plus les agents IA fonctionnent très bien pour produire du code Python.

Bonne question, mais rassure-toi : l’API n’est pas une file d’attente unique où les requêtes passent une par une. C’est un serveur HTTP, exactement comme celui que Gladys expose déjà aujourd’hui pour le frontend.

Node étant asynchrone, pendant qu’une requête attend la base de données, l’event loop en traite plein d’autres en parallèle. 100 conteneurs qui tapent dessus, c’est une charge ridicule.

Le vrai point d’attention, ce n’est pas l’API, c’est la RAM. Un conteneur en lui-même ne pèse presque rien (ce n’est pas une VM), mais chaque process Node embarque le runtime V8, donc il faut compter 50-80 Mo de RAM utilisée par intégration selon ce qu’elle fait. À la dizaine d’intégrations, aucun souci sur un mini-PC. À la centaine tournant en simultané, là cela dépend de ta RAM disponible :smiley:

En pratique, la plupart des installations auront entre 5 et 20 intégrations externes, ce qui est totalement confortable sur la plupart des mini-PC.

Merci !!

De toute façon, l’API sera totalement ouverte et documentée, donc chaque développeur pourra l’utiliser comme il le souhaite :wink:

Le vrai sujet est plutôt de voir quels exemples on fournit et dans quels langages. Personnellement, je n’ai pas d’expérience en Python, donc je pourrais éventuellement faire générer un exemple par IA, mais je ne serais pas vraiment en mesure de le relire, de le valider ou d’aider efficacement les utilisateurs dessus.

Mais c’est la force de ces intégrations externes : chacun sera libre et je ne serais pas le goulot d’étranglement :smiley:

Pour le futur store d’intégrations, je souhaite partir sur une architecture 100 % décentralisée, sans validation manuelle, sans review et sans avoir à demander une autorisation pour publier.

Concrètement, chaque développeur publiera simplement son intégration dans son propre dépôt GitHub en y ajoutant un topic spécifique. Ce dépôt restera la source de vérité : chacun garde le contrôle de son code et de ses mises à jour.

De son côté, un indexeur entièrement automatique (une GitHub Action publique) parcourra régulièrement tous les dépôts portant ce topic. Il vérifiera uniquement des critères objectifs : présence d’un manifeste valide, respect du schéma, accessibilité des images, cohérence des versions, etc. Si tout est conforme, l’intégration sera automatiquement ajoutée à un index.json statique, qui sera ensuite distribué via GitHub Pages et un CDN.

Les instances Gladys téléchargeront uniquement cet index statique, ce qui garantit des performances élevées, évite les limitations de l’API GitHub et permet de mettre facilement le contenu en cache. Et même si l’indexeur venait à être indisponible, le dernier index publié continuerait de fonctionner.

L’objectif est simple : personne n’a besoin de mon approbation pour publier une intégration. Les seules règles sont celles vérifiées automatiquement par le script, dont le code sera lui aussi public. Ainsi, chacun pourra comprendre immédiatement pourquoi son intégration est indexée… ou pourquoi elle ne l’est pas.

Bon je n’ai pas tout compris :face_with_head_bandage:, mais je trouve l’idée excellent car elle va permettre de faire un bond en avant concernant les possibilités de Gladys à rivaliser avec HA. Et cela va permettre à chacun de pouvoir contribuer « facilement » au perfectionnement de Gladys qui restera avec un core intact !

Il serait bien dans un second temps de laisser le choix d’utiliser une autre plateforme de dépôt Git comme GitLab et Codeberg.

Salut les @contributors :waving_hand:

J’ai bien avancé sur ce sujet aujourd’hui ! J’ai passé la journée à rédiger la spécification technique avec Fable 5.

La spécification de l’implémentation est disponible ici :

Mon objectif est de faire avancer ce développement rapidement, tout en maintenant un haut niveau de qualité.

Comme toujours, tous vos retours sont les bienvenus. :slightly_smiling_face:

3 nouveaux repository créé :

Implémentation en cours par 3 agents Fable 5 :

Je prends de l’avance car Fable 5 n’est pas garanti de rester après le 19 juillet.

Si vous avez des retours, bien-sûr tout reste modifiable, je suis vraiment preneur de retours !

Je pense que c’est une bonne chose que les intégrations puissent être gérées de cette manière.

Plus de barrière de langage et du temps libéré de ton côté, car valider chaque PR, tu dois y passer pas mal de temps, surtout en ce moment avec l’IA.

Par contre, concrètement, si on prend l’exemple de l’intégration Meteo France, il y a la partie API à gérer avec l’intégration, mais la partie widget et déclencheur de scène et action de scène.
Il faudrait découper en plusieurs parties pour séparer la partie intégration de la partie widgets et scène ? Il y aurait donc une PR pour le core avec les widgets/scène et la partie intégration Meteo France pour le store Gladys ?

Et les intégrations déjà existantes ? Elles devraient basculer dans le store ou tu vas les laisser ?

A terme je pense que beaucoup d’intégrations peuvent sortir du core mais il est important de dire clairement ce qui concerne le core et l’externe. Comme les externes ne peuvent pas accéder au matériel on peut déjà dire que c’est le core qui gère les « protocoles » comme Zigbee, Zwave et Matter car on a besoin d’accéder aux dongles USB. L’IHM et le superviseur c’est également le core. Une liste avec explication serait la bienvenue.

Pour ajouter un nouveau langage plus facilement je propose deux choses:

  • Proposer un « JSON Schema » pour valider la structure des messages JSON
  • Un serveur sous Docker qui permet de valider un SDK. L’idée serait la suivante:
    • Je développe un SDK en langage X à partir de la version JS officielle avec les mêmes tests de validation
    • Une fois le dev terminé, je lance le serveur de validation de SDK
    • Je lance les tests de validation en me connectant au serveur
    • Mon SDK est validées lorsque 100% des tests sont valides
      Aussi, cette méthode permet d’automatiser le dev et la validation par un Agen IA.

Un autre point c’est à quel point il faut limiter les ressources des intégrations externes pour éviter d’avoir des monstre et de casser l’expérience Gladys. En fonction des langages ça peut passer du simple au triple niveau mémoire et charge CPU. Si on est trop stricte on se ferme la porte à beaucoup de langage interprété (Python, Ruby et même JS avec NodeJS) et si c’est trop souple alors il va falloir une machine avec beaucoup de RAM. Donc exit les machines comme les raspi, les NAS, la freebox, etc. En plus la RAM maintenant ça coute très chère.
Bon étant dev C/C++ je suis plutôt du coté stricte :slight_smile:

Petit point d’avancement : Fable 5 a bien travaillé hier et a généré des PR sur tous les dépôts concernés, en suivant quasiment à la lettre la spécification que j’ai rédigée lundi. :rocket:

De mon côté, je vais passer en phase de review et de tests d’ici la fin de la semaine.

C’est assez impressionnant, car c’est un chantier qui, il y a encore quelques années, aurait probablement demandé plusieurs mois de développement. Là, si tout se passe comme prévu, on devrait pouvoir sortir quelque chose très rapidement.

Je vous tiens au courant de la suite ! :slightly_smiling_face:


L’idée est vraiment de découpler complètement les intégrations du core et d’avoir une surface d’API claire et stable entre les deux.

Pour l’instant, la spécification et l’implémentation ne couvrent que la partie appareils. Je n’ai pas encore traité la météo, les communications ou les autres domaines, mais ils viendront naturellement s’ajouter sur le même modèle.

Pour donner une idée, une intégration ressemblera à ça :

Source : GitHub - GladysAssistant/integration-sdk-js: Gladys Assistant SDK for JS external integration · GitHub

En revanche, si une intégration nécessite une nouvelle capacité du core (par exemple un nouveau type d’appareil), il faudra effectivement :

  1. Faire une PR sur le core pour ajouter cette fonctionnalité.
  2. Une fois cette fonctionnalité disponible, elle sera automatiquement exposée via l’API et pourra être utilisée dans les intégrations externes.

Ça dépendra de l’intégration.

Toutes les intégrations universelles (Matter, Zigbee, etc.) ont vocation à rester dans le core. Ma philosophie n’a pas changé : l’objectif est avant tout d’offrir la meilleure expérience utilisateur possible, et ces briques doivent être natives, sans installation supplémentaire.

En revanche, les intégrations très spécifiques à certains fabricants ou services (par exemple Mitsubishi) migreront progressivement vers le store.


Les intégrations externes pourront bien accéder au matériel, mais via des API fournies par le core.

C’est d’ailleurs prévu dans la spécification :

demander une découverte réseau médiée : c’est le core, qui a accès au réseau de l’hôte, qui effectue les scans mDNS et le passthrough des périphériques USB, puis transmet les résultats. L’intégration n’a ainsi jamais besoin du mode host ni d’un accès matériel direct.

L’objectif est d’offrir toutes les capacités nécessaires sans compromettre la sécurité.

Et si une intégration a réellement besoin de permissions particulières, je ne suis pas opposé à un système de permissions explicites, un peu sur le modèle d’iOS ou d’Android, où l’utilisateur valide les accès demandés.


Oui, c’est déjà prévu dans la spécification :Gladys/PLAN_INTEGRATIONS_EXTERNES.md at claude/focused-turing-q9vf41 · GladysAssistant/Gladys · GitHub

Pour le moment, chaque intégration est limitée à :

  • 0,5 vCPU
  • 256 Mo de RAM
  • 100 PID maximum (protection contre les fork bombs)

Ces valeurs sont un point de départ et pourront être ajustées en fonction des besoins réels des intégrations et des retours de la communauté.

Salut Pierre-Gilles,

Sujet qui tombe à pic : je travaille en ce moment sur deux intégrations qui sont les deux cas extrêmes de ton modèle — Zendure (cloud + token + polling, que tu cites d’ailleurs en exemple :grinning_face_with_smiling_eyes:) et une vidéosurveillance locale Frigate/go2rtc (voir mon post) qui orchestre des conteneurs Docker compagnons, du GPU et des flux vidéo. Mes retours sortent de ces deux vécus.

Partant pour servir de banc d’essai quand tu prototypes l’API-hôte — Frigate côté « supervision de système externe », Zendure côté « cloud simple ». Je privilégierais Zendure pour le coup ^^

Pour tester les limites de chaque intégration que tu as décidé, Frigate serait le bon candidat … Car pour le coup, je suis sur que ce ne sera pas suffisant, par exemple 256Mo de RAM c’est le préconisé de base pour une caméra, et pour 2 j’ai dû monter à 384Mo.

Merci @Terdious, c’est génial on va pouvoir intégrer tout ça dans des intégrations externes !!

Je suis entrain de tester, et c’est assez dingue, l’expérience utilisateur est vraiment la même qu’en natif, mais c’est juste beaucoup plus simple à développer, car il n’y a que le backend à développer, et surtout aucune review de PR :slight_smile: Tu vas pouvoir te lâcher :joy:

J’ai transposé l’intégration Melcloud native en intégration externe (GitHub - GladysAssistant/gladys-melcloud: Gladys Assistant external integration for Mitsubishi AC · GitHub), one-shotté par Fable 5 bien-sûr.

Exemple d’affichage d’une intégration « communautaire » vs « natif » :

La liste d’intégration mélange aussi bien les intégrations native que les intégrations communautaires, venant du store.

Il est aussi possible de lancer une intégration depuis Github :

Ou depuis une image Docker pour du testing :

Ensuite, pas beaucoup de différences avec une intégration classique :

Bref, ça marche vraiment bien !!

Je penses que si tu veux te lancer sur un dev Zendure, tu peux commencer dès maintenant pour tester et me faire des retours sur l’expérience globale.

Le template d’intégration externe que tu peux donner à Claude comme source : GitHub - GladysAssistant/integration-template-js: Gladys Assistant Integration template for a JS external integration · GitHub

Le SDK JS : GitHub - GladysAssistant/integration-sdk-js: Gladys Assistant SDK for JS external integration · GitHub

Pour tester dans Gladys, tu peux lancer Gladys en local sur ta machine sur cette branche : External integrations (RFC phase 1): Docker supervisor, host API, integration WebSocket, decentralized store and generic frontend by Pierre-Gilles · Pull Request #2665 · GladysAssistant/Gladys · GitHub

Et dans l’onglet « Intégrations », tu retrouveras le bouton « Installer depuis Github ».

Oui, Frigate est vraiment un cas particulier. Le principal défi concerne l’architecture des containers.

Aujourd’hui, une intégration externe correspond à un container dédié. Avec Frigate, deux approches sont possibles :

  • lancer trois containers distincts (Frigate + Mosquitto + l’intégration externe Gladys Frigate) ;
  • ou créer une image Docker basée sur Frigate qui embarque directement le code de l’intégration Gladys.

Chaque approche a ses avantages et ses inconvénients. C’est un cas qui n’est tout simplement pas géré aujourd’hui dans l’architecture actuelle, donc il faudra faire évoluer ce point. :slightly_smiling_face:

@Terdious J’ai écrit toute une spec avec Fable 5 pour la gestion des sous-containers.

L’idée générale est qu’une intégration externe puisse déclarer en JSON des « sous-containers » dont elle a besoin. Dans notre cas, ça permettrait par exemple de déclarer Frigate + Mosquitto directement depuis l’intégration.

La spec est disponible ici :

(voir la section Sous-conteneurs)

Ensuite, c’est Gladys qui prend en charge tout le lifecycle de ces containers : création, démarrage, arrêt, suppression… Et si l’intégration est supprimée, tout est automatiquement nettoyé (containers + volumes).

Pour le cas particulier de Mosquitto, il y a une contrainte intéressante : il a besoin de fichiers présents sur le disque avant de pouvoir démarrer (notamment pour les mots de passe). Du coup, les containers déclarés peuvent être créés mais arrêtés par défaut, puis démarrés explicitement par l’intégration quand elle a terminé sa configuration. Une API /start est prévue pour ça.

Qu’en penses-tu ?

J’ai lancé Fable 5 sur 2 chantiers :

  • Intégration type Frigate avec sous-containers
  • Intégration type « communication » (ex: Telegram)

1ère intégration sur le store !! :partying_face:

Si on veut l’installer :

Ensuite :

Je vais surement bosser dessus et découvrir tout ça cette nuit et demain soir, je te fais un point après ^^

Et ça du coup c’est top ^^ Je pars là-dessus, en plus on a la référence HA donc idéal pour l’IA :wink:
Je suis passé à Max+ pour le dev pro cette semaine, et ils m’ont réinitialisé mes crédits hier … je suppose en cadeau ^^ du coup j’ai de la marge d’ici lundi :

Incroyable, profites-en tant que Fable 5 est là :smiley:

Si tu veux créer des dizaines d’intégrations, lâche-toi ! Donne bien les références du template et du SDK, et l’IA devrait s’en sortir sans trop de problèmes.

Ensuite, pour tester une intégration, tu as 2 options, et rien à configurer, tout est déjà prêt dans le template, c’est clé en main :slight_smile:

Option 1 : test via GitHub

Tu crées une release en un clic, et ça génère automatiquement un tag Git + un push de l’image vers le GitHub Container Registry. Super simple :

Ensuite, dans Gladys, tu colles le lien du repo :

Option 2 : test via image Docker

Plus pratique pour tester une PR avant de la publier en production pour tous les utilisateurs de l’intégration.

Tu commences par choisir la branche à builder :

Ça publiera ensuite une image Docker taguée avec le nom de la branche.

Dans la release, tu retrouves toutes les informations à copier dans Gladys :

À copier dans l’interface :

Si tu as le moindre bug ou retour, dis-le moi ! Et n’hésite pas à publier un post sur le forum pour chaque intégration, je regarderai dès que je peux ce week-end :muscle: