Unofficial, model-specific Home Assistant integration for
xiaomi.vacuum.d109gl (Xiaomi Robot Vacuum X20 Max).
Integration prepared by Smart Service.
If this integration helps you, you can support Smart Service:
- Native vacuum entity: start, pause, stop, locate and return to base.
- Exact room IDs and names from the active map.
- Clean one or multiple rooms by ID or exact name.
- Vacuum/mop mode, suction, water level, 1–3 passes and route selection.
- Omni station actions: empty bin, wash mops and dry mops.
- Battery, cleaning history, faults and consumable-life sensors.
- Controls for carpet handling, obstacle avoidance, DND and detergent.
- Buttons for mapping and resetting consumable counters.
- Advanced raw MIoT property and action services.
- English and Polish translations.
- Home Assistant 2026.7.0 or newer.
- Xiaomi Robot Vacuum X20 Max with model ID
xiaomi.vacuum.d109gl. - The robot configured in the Xiaomi Home mobile app.
- The official Xiaomi Home integration configured in Home Assistant with the same Xiaomi account and region. It supplies the initial OAuth grant.
- Internet access from Home Assistant to
*.ha.api.io.mi.com.
- In HACS, open Integrations.
- Open the menu and choose Custom repositories.
- Add
https://github.com/SmartServicePL/xiaomi-x20-maxas an Integration repository. - Install Xiaomi Robot Vacuum X20 Max.
- Restart Home Assistant.
- Go to Settings → Devices & services → Add integration.
- Search for Xiaomi Robot Vacuum X20 Max and select the robot.
If setup reports that OAuth credentials are unavailable, configure or reload the official Xiaomi Home integration first and retry.
Copy custom_components/xiaomi_x20_max into the custom_components
directory in your Home Assistant configuration, restart Home Assistant and
add the integration from the UI.
Room IDs and names are available in the Rooms and IDs sensor and in the vacuum entity attributes.
action: xiaomi_x20_max.clean_rooms
data:
entity_id: vacuum.my_x20_max_control
rooms:
- Kitchen
- 10
mode: vacuum_and_mop
suction: turbo
water_level: medium
passes: 2
route: carefulrooms accepts IDs, exact room names, or a mixture of both.
action: xiaomi_x20_max.station_action
data:
entity_id: vacuum.my_x20_max_control
action: wash_mopsAvailable actions: empty, wash_mops, dry_mops, leave_station,
stop_washing, stop_drying and return_to_wash.
The optional blueprint creates reusable alerts for station faults, detergent, mops, filter, brushes and dust bag. Import it once for each robot and select your own mobile notification action:
On first setup the integration imports an existing Xiaomi OAuth grant from the official Xiaomi Home integration into its own Home Assistant storage. After that it refreshes the OAuth token independently. Xiaomi account passwords and local device tokens are not stored by this integration.
Credentials remain inside Home Assistant and are only sent to Xiaomi Cloud. Diagnostics redact the cloud device ID and room names.
- Cloud polling; this is not a local integration.
- One Xiaomi OAuth account/region per Home Assistant installation.
- No map rendering.
- The device does not expose continuous clean/dirty-water percentages.
- Some MIoT properties are undocumented and can change with firmware.
The raw set_property and execute_action services are intended for advanced
users. Incorrect values may change maps or device settings.
Open an issue and
attach Home Assistant diagnostics. Never attach .storage files or tokens.
MIT licensed. This project is not affiliated with Xiaomi. Xiaomi Cloud API use is intended only for personal, non-commercial Home Assistant installations; see LICENSE_XIAOMI.md.