Nouvelle table pour stocker les "supported_options" d'une feature

Salut les @contributors :waving_hand:

Je suis en train d’ajouter une nouvelle table au data model et j’aimerais avoir votre avis pour être sûr que ça colle bien aux besoins avant d’aller plus loin.

:light_bulb: Contexte

Dans certaines intégrations, on a besoin de stocker les valeurs supportées par une feature donnée.

Exemple simple : une climatisation avec un “mode de fonctionnement”.

  • Certains modèles supportent : Chaud / Froid / Auto
  • D’autres : uniquement Froid

Aujourd’hui, on ne modélise pas vraiment cette notion de “capacité par device”, ce qui commence à poser problème.

On le voit déjà côté scènes / Zigbee2MQTT : pour les boutons, on affiche une liste d’actions possible assez large (plusieurs dizaines), alors qu’un device donné n’en supporte qu’une petite partie. Résultat : UX moins claire et risque d’erreurs côté utilisateur.

:brick: Proposition

Je propose d’ajouter une table :

t_device_feature_supported_option :

- `id` UUID PK
- `device_feature_id` UUID FK → `t_device_feature`
- `value` INTEGER NOT NULL 
- `label` STRING NOT NULL
- `sort_order` INTEGER NOT NULL DEFAULT 0

Elle permettrait de stocker, pour une feature d’un device donné, la liste des options réellement supportées.

Le label sera une valeur en anglais qui ensuite sera traduite dans les traductions.

Si le label n’existe pas, le fallback sera d’afficher le label en anglais.

Côté API, ça donnerait quelque chose de ce genre :

:red_question_mark: Pourquoi maintenant ?

Je vois ce besoin revenir de plus en plus souvent, notamment :

  • avec Matter, où certains appareils (aspirateurs robots, climatisations) exposent des clusters avec une liste dynamique d’options possibles
  • avec Zigbee2MQTT, où certaines features (notamment les boutons / actions) explosent en nombre d’options possibles

On va clairement vers un modèle où on ne peut plus se contenter d’une liste globale d’options par feature.


Vous en pensez quoi ? Est-ce que vous voyez des cas où ce modèle ne fonctionnerait pas ?

Merci pour votre retour :slight_smile:

Totalement d’accord, j’ai pas encore vu l’impact a mon niveau côté matter mais c’est clair que la liste d’actions pour les boutons devient énorme.
Faire des scènes avec c’est totalement perturbant pour ceux qui ne savent pas comment récupérer les valeurs

La PR :

Ça me paraît ok.

  • Il faut toujours que toutes les valeurs soient mappées quelque part dans Gladys (comme aujourd’hui) ?
  • Comment ça va se passer pour les devices existants ?
  • Et comment les supported_options d’une feature sont remplies ?

Oui ! Rien ne change là dessus.

On pourra rajouter une mise à jour des appareils, comme on fait quand une fonctionnalité évolue :slight_smile:

C’est l’intégration qui le rempli si c’est disponible/possible !

Dans Matter par exemple, il y a un tableau fourni par le protocole avec toutes les valeurs que l’appareil supporte.

Salut @pierre-gilles,

Où en es-tu sur la réflexion sur ce sujet ? C’est quelque chose de proche à paraitre ?
J’ai le « soucis » sur l’intégration des fil pilote thermostat et climatisations dans Tuya que je prépare, du coup j’ai codé une guard pour ne pas envoyer les modes qui ne sont pas pris en charges par les appareils en question, mais avec ce développement, on en aura plus besoin :wink:

Oui c’est terminé même :smiley:

Je viens de merger ! Tu peux l’utiliser dans ta PR :slight_smile:

Aaaaah trop bien !! Je te remercie ^^ :joy: :smiling_face_with_three_hearts:

Ca fonctionne nickel ! En espérant qu’ « on » a bien implémenté, j’ai été obligé de le reprendre, il était barré dans un truc ultra complexe avec répétition.
Appareil avec 4 modes :

Appareil avec tous les modes :

Excellent !!