# \[Demande d’évolution\] Intégrations externes : listes déroulantes alimentées par l’intégration dans les scènes et les widgets

**URL:** <https://community.gladysassistant.com/t/demande-d-evolution-integrations-externes-listes-deroulantes-alimentees-par-l-integration-dans-les-scenes-et-les-widgets/11004>\
**Category:** Développement\
**Created:** [Octobre 9, 2026, 5:57 UTC](https://community.gladysassistant.com/t/demande-d-evolution-integrations-externes-listes-deroulantes-alimentees-par-l-integration-dans-les-scenes-et-les-widgets/11004 "2026-10-09T17:57:50Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![lmilcent](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/lmilcent/32/7023_2.png) [@lmilcent](https://community.gladysassistant.com/u/lmilcent)\
**Post date:** [Octobre 9, 2026, 5:57 UTC](https://community.gladysassistant.com/t/demande-d-evolution-integrations-externes-listes-deroulantes-alimentees-par-l-integration-dans-les-scenes-et-les-widgets/11004/1 "2026-10-09T17:57:50Z")

</div>

Bonjour à tous,

Avec Gladys 5.1, une intégration externe peut déclarer ses propres actions de scène et ses widgets, c’est top. Il manque une chose pour que ce soit vraiment confortable : **des listes déroulantes dont l’intégration fournit le contenu**.

**Le constat**

Aujourd’hui, un champ `select` de manifeste ne peut prendre que deux formes :

- des `options` écrites en dur dans le manifeste, identiques pour tout le monde ;
- `"source": "devices"`, la liste des appareils de l’intégration.

Le reste de ce que connaît l’intégration doit donc être tapé au clavier, et bien orthographié. Quelques exemples :

- **aspirateur robot**  **:** les pièces et zones mémorisées (« Cuisine », « Salon + couloir »…). Pour mon intégration Lubluelu ([https://community.gladysassistant.com/t/integration-externe-robot-aspirateur-lubluelu-sl68-tuya-mode-local](https://community.gladysassistant.com/t/integration-externe-robot-aspirateur-lubluelu-sl68-tuya-mode-local)), l’action « Nettoyer une zone » demande de taper le nom à la main ;
- **TV :** les applications installées ou les entrées HDMI ;
- **caméras :** les presets PTZ ;
- **Sonos ou équivalents :** les playlists ou les favoris.

La description d’un champ est figée elle aussi. On ne peut même pas y afficher les choix possibles.

**La proposition**

Ajouter une seconde valeur à l’énumération `source`, par exemple `"integration"`, avec une clé de liste :

```auto
{
  "key": "zone",
  "type": "select",
  "source": "integration",
  "list": "zones",
  "depends_on": "vacuum",
  "label": { "en": "Zone", "fr": "Zone" },
  "required": true
}

```

Côté SDK, l’intégration **pousse** la liste quand elle change (modèle push, comme `publishState`) :

```auto
await gladys.setFieldOptions('zones', [
  { value: 'cuisine', label: 'Cuisine', parent: 'ext:lubluelu:vacuum:eb111' },
  { value: 'salon', label: 'Salon', parent: 'ext:lubluelu:vacuum:eb111' },
]);

```

- **Stockage par le cœur :** la liste est conservée par le cœur. L’éditeur de scène s’affiche donc sans appeler l’intégration, même si elle est arrêtée.
- **`depends_on` (optionnel) :** filtre les options selon un autre champ du formulaire, ici les zones de l’aspirateur choisi (`parent` = external\_id de l’appareil).
- **Valeur stockée :** la `value`, une chaîne. Le handler la reçoit comme aujourd’hui, et les variables de scène restent possibles.
- **Option disparue :** une valeur qui n’existe plus reste affichée telle quelle, avec un avertissement. On ne veut pas casser une scène parce qu’une zone a été renommée.
- **Bornes :** comme pour le reste du contrat, par exemple 200 options par liste, des libellés de 100 caractères maximum et des appels limités en débit.

**Ce que ça apporte**

- Plus de faute de frappe ni de nom à retrouver : c’est la même expérience que `source: "devices"`, sans créer de faux appareils pour ça.
- Le même mécanisme sert aux réglages des widgets et aux actions de configuration, puisqu’ils partagent le format de champ.
- C’est rétrocompatible : `options` et `source: "devices"` ne changent pas, et un manifeste qui n’utilise pas `"integration"` n’est pas concerné.

**Contournements actuels, et pourquoi ils ne suffisent pas**

- **Créer un appareil par zone, pour profiter de `source: "devices"` :** ces zones apparaissent alors partout, y compris dans le sélecteur « Aspirateur » des widgets.
- **Un bouton par zone sur l’appareil, utilisé avec l’action native « Contrôler les appareils » :** ça marche pour une action simple, mais on ne peut pas y ajouter de paramètres (nombre de passages, aspiration…).
- **Le texte libre, rendu tolérant (majuscules, accents, début de nom) :** c’est ce que fait mon intégration aujourd’hui, mais ça reste du texte libre
