Salut @spenceur, salut @Lokkye,
D’abord bravo à vous deux : @Lokkye pour avoir sorti les deux intégrations aussi vite et sans même avoir le matériel sous la main, et @spenceur pour être allé jusqu’au fork avec du code qui marche. C’est exactement comme ça que l’écosystème avance 
Sur ton souci de sélecteur @spenceur : ce n’est pas un bug, et surtout ce n’est pas un problème que tu as besoin de contourner dans ton code.
Deux choses :
- Quand tu ajoutes une fonctionnalité dans un widget du dashboard, tu peux lui donner le nom que tu veux directement dans l’écran d’édition du widget. Ce nom écrase tout le reste. C’est la réponse historique à ce sujet, et elle couvre ton cas : tu peux appeler ta ligne « Nettoyage cuisine » même si la fonctionnalité s’appelle autrement.
- Dans les endroits où ce renommage ne s’applique pas (les sélecteurs de scènes par exemple), Gladys bascule automatiquement sur le nom de la fonctionnalité dès qu’il y en a plusieurs du même type sur le même appareil. Si tu n’as vu que « Bouton poussoir », c’est parce que tu n’avais qu’une seule routine, avec deux routines ou plus, tes noms s’afficheront tout seuls. Et avec une seule, il n’y a de toute façon pas d’ambiguïté possible.
Donc pour répondre à ta question : surtout pas un appareil par routine. Garde tout sur un seul appareil, ton code actuel est bon.
Un petit détail au passage : pour un bouton poussoir en mode actionneur, mets plutôt min: 1, max: 1 (c’est la convention utilisée ailleurs dans Gladys). Avec min: 0, l’action de scène affiche un slider de 0 à 1, ce qui n’a pas beaucoup de sens pour un bouton.
Un point plus important, pour vous deux : Gladys a depuis peu une catégorie native VACUUM_CLEANER dans le core (ajoutée pour l’intégration Matter), avec les fonctionnalités state, run-mode, clean-mode et dock, leurs valeurs, leurs traductions et un affichage dédié dans le dashboard. Elle est dans server/utils/constants.js si tu veux regarder.
Est-ce que l’intégration Roborock s’appuie dessus pour les fonctions de base ? Si oui, parfait. Sinon ça vaut vraiment le coup de basculer avant d’aller plus loin : sans ça, un aspirateur remonté par Matter et un aspirateur remonté par Roborock ne se piloteront pas de la même façon dans le même dashboard, alors que c’est le même robot. Les routines, elles, restent tout à fait légitimement des boutons poussoirs.
Sur le mapping de pièces : c’est la demande la plus intéressante du sujet. Aujourd’hui, toutes les listes de choix de Gladys (modes de ventilation, fil pilote, clim…) sont figées dans le code avec une traduction par valeur. Ça ne peut pas accueillir des pièces définies par l’utilisateur dans l’appli Roborock.
À court terme, la solution qui marche déjà : une fonctionnalité bouton poussoir par pièce (« Nettoyer - Cuisine », « Nettoyer - Salon »…). C’est directement utilisable dans les scènes, et ça règle au passage l’affichage des noms puisqu’il y en a plusieurs.
Sinon je pense qu’il faudrait un type de fonctionnalité spécial pour ça dans les aspirateurs. C’est un chantier côté core, et il dépasse largement cette intégration !
Est-ce que vous pourriez créer une demande de fonctionnalité spécifique pour qu’on lance un développement sur ce sujet ? 
Continuez, c’est du très bon boulot 