Hi @spenceur, hi @Lokkye,
First of all, kudos to both of you: @Lokkye for releasing the two integrations so quickly and without even having the hardware on hand, and @spenceur for going as far as forking with working code. That’s exactly how the ecosystem moves forward 
Regarding your selector issue @spenceur: This is not a bug, and most importantly, it’s not a problem you need to work around in your code.
Two things:
- When you add a feature to a dashboard widget, you can give it the name you want directly in the widget editing screen. This name overrides everything else. This is the historical answer to this topic, and it covers your case: you can call your line « Kitchen Cleaning » even if the feature is named differently.
- In places where this renaming doesn’t apply (scene selectors, for example), Gladys automatically switches to the feature name as soon as there are multiple of the same type on the same device. If you only saw « Push Button », it’s because you only had one routine; with two or more routines, your names will display automatically. And with just one, there’s no possible ambiguity.
So to answer your question: definitely not one device per routine. Keep everything on a single device, your current code is good.
A small detail by the way: for a push button in actuator mode, use rather min: 1, max: 1 (this is the convention used elsewhere in Gladys). With min: 0, the scene action displays a slider from 0 to 1, which doesn’t make much sense for a button.
A more important point, for both of you: Gladys has had a native VACUUM_CLEANER category in the core for a while now (added for the Matter integration), with the features state, run-mode, clean-mode, and dock, their values, their translations, and dedicated display in the dashboard. It’s in server/utils/constants.js if you want to take a look.
Does the Roborock integration rely on it for basic functions? If so, perfect. If not, it’s really worth switching before going further: without it, a vacuum cleaner brought up by Matter and a vacuum cleaner brought up by Roborock will not be controlled in the same way in the same dashboard, even though it’s the same robot. The routines, on the other hand, remain quite legitimately push buttons.
Regarding room mapping: This is the most interesting request in the topic. Today, all of Gladys’ choice lists (ventilation modes, pilot wire, air conditioning…) are frozen in the code with a translation per value. It can’t accommodate rooms defined by the user in the Roborock app.
In the short term, the solution that already works: one push button feature per room (« Clean - Kitchen », « Clean - Living Room »…). This is directly usable in scenes, and it also solves the name display issue since there are multiple.
Otherwise, I think a special feature type would be needed for this in vacuum cleaners. It’s a core-side project, and it goes far beyond this integration!
Could you create a specific feature request to start development on this topic? 
Keep going, it’s great work 