Intégration Dreame et Mova dans Home Assistant : pilotez vos robots aspirateurs

Si vous possédez un robot aspirateur Dreame ou Mova, sachez qu’il est possible de l’intégrer dans Home Assistant grâce à une excellente intégration communautaire. Carte interactive, contrôle des nettoyages par pièce, suivi des consommables, automatisations : on fait le tour de ce que permet cette intégration et comment la mettre en place.
Une intégration pour tous les robots Dreame et Mova
L’intégration Dreame Vacuum (développée par Tasshack) est un projet open-source sur GitHub. Elle prend en charge une très large gamme de robots aspirateurs Dreame et Mova, les deux marques partageant la même base technique.

Côté Dreame, voici une sélection des modèles supportés (la liste complète est disponible sur le GitHub) :
- Série D : D9, D9 Pro, D9 Max, D10 Plus
- Série L : L10 Pro, L10 Plus, L10s Ultra, L10s Pro
- Série X : X10, X10 Ultra
- Série S : S10, S10+, S10 Pro, S10 Pro Plus
- Série W : W10, W10 Pro, W10s, W10s Pro
Côté Mova, voici les modèles pris en charge :
- Mova L600 et Mova Z500 : supportés dans la version stable (v1.0.8)
- Mova Z50 Ultra et Mova Z60 Ultra : supportés dans la version bêta (v2.0.0b22 au moment où j’écris ces lignes)
Si vous avez un modèle récent comme le Z50 Ultra ou le Z60 Ultra, il faudra donc installer la version bêta de l’intégration. Pas d’inquiétude, elle fonctionne très bien au quotidien.
Test Mova Z60 Ultra Roller Complete : un robot aspirateur haut de gamme qui impressionne
Pré-requis
Avant de vous lancer, assurez-vous d’avoir :
- Une instance Home Assistant fonctionnelle
- Le gestionnaire de paquets HACS déjà installé (si besoin, j’en parle dans cet article dédié)
- Vos identifiants de l’application Dreamehome ou Movahome selon votre robot
Installation via HACS
Bonne nouvelle, l’intégration Dreame Vacuum est disponible directement dans le catalogue HACS par défaut. Pas besoin d’ajouter un dépôt personnalisé.
- Ouvrez HACS dans votre menu Home Assistant.
- Cliquez sur Intégrations puis recherchez « Dreame Vacuum« .
- Installez l’intégration. Si vous avez besoin de la version bêta (pour les Mova Z50 Ultra ou Z60 Ultra par exemple), pensez à cocher l’option « Afficher les versions bêta » dans HACS avant de télécharger.
- Redémarrez Home Assistant.
- Rendez-vous dans Paramètres > Appareils et services > Ajouter une intégration et recherchez « Dreame Vacuum ».

Lors de la configuration, vous aurez le choix entre plusieurs modes de connexion : Xiaomi Home, Dreamehome, Movahome. Pour un robot Mova, sélectionnez Movahome.

Le mode cloud est le plus simple à configurer et permet d’accéder à la carte interactive. Le mode local fonctionne aussi mais nécessite que votre robot soit sur le même sous-réseau que votre instance Home Assistant.
Une fois configuré, vous avez accès à la configuration de votre robot avec différentes options à activer.

Ce que permet l’intégration
Une fois le robot ajouté, vous allez découvrir une liste d’entités disponibles (genre, vraiment beaucoup !). L’intégration se positionne comme un véritable remplacement de l’application, et c’est ce qui fait sa force.
On retrouve notamment :
- Carte interactive en temps réel avec support multi-étages
- Contrôle complet : démarrer, mettre en pause, retour à la base, nettoyage par pièce ou par zone
- Réglages : mode d’aspiration, humidité serpillière, température de l’eau, séchage automatique, etc.
- Suivi des consommables : brosse principale, brosse latérale, filtre, capteurs, bac eaux usées, etc.
- Statistiques : nombre de sessions, temps total de nettoyage, surface totale nettoyée
- Notifications persistantes et événements pour les automatisations
L’intégration est également compatible avec les cartes Lovelace populaires comme la Xiaomi Vacuum Map Card ou la Valetudo Map Card pour afficher la carte directement dans votre tableau de bord.
Idées d’automatisations
Comme d’habitude avec Home Assistant, le vrai intérêt c’est de pouvoir créer des automatisations. Voici quelques idées pour exploiter au mieux votre robot :
- Lancer le nettoyage quand tout le monde quitte la maison : en combinant les capteurs de présence, vous pouvez déclencher automatiquement un cycle de nettoyage quand le domicile est vide. Fini le bruit du robot pendant que vous travaillez.
- Notification quand un consommable est usé : surveillez le pourcentage restant de la brosse principale, du filtre ou du bac à eaux usées, et recevez une notification sur votre téléphone quand il est temps de les remplacer.
- Nettoyage de la cuisine après le dîner : déclenchez un nettoyage ciblé de la cuisine chaque soir à une heure fixe, ou en combinaison avec un autre événement domotique (extinction des lumières de la salle à manger par exemple).
Créer un mode présence / absence dans Home Assistant
Mon tableau de bord
J’ai travaillé un tableau de bord dédié à mon robot aspirateur directement dans Home Assistant. On y retrouve les contrôles, la carte de nettoyage, les statistiques et le suivi des consommables. Tout est centralisé et accessible en un coup d’oeil.

Bien sûr, je vous partage le code ci-dessous s’il vous intéresse, vous pouvez le copier-coller. Il vous suffit de remplacer z60_ultra_roller_complete par le nom de votre entité.
views:
- title: Aspirateur
path: aspirateur
type: sections
icon: mdi:robot-vacuum
max_columns: 3
sections:
- title: ''
cards:
- type: heading
heading: Contrôle
heading_style: title
icon: mdi:robot-vacuum
badges:
- type: entity
entity: sensor.z60_ultra_roller_complete_battery_level
color: green
show_state: true
show_icon: true
- type: entity
entity: sensor.z60_ultra_roller_complete_status
color: blue
show_state: true
show_icon: true
- type: custom:mushroom-vacuum-card
entity: vacuum.z60_ultra_roller_complete
name: Z60 Ultra
icon_animation: true
commands:
- start_pause
- stop
- locate
- return_home
fill_container: true
grid_options:
columns: 12
rows: 2
- type: heading
heading: Réglages
heading_style: subtitle
icon: mdi:cog-outline
- type: tile
entity: select.z60_ultra_roller_complete_cleaning_mode
name: Mode nettoyage
icon: mdi:broom
color: teal
features:
- type: select-options
grid_options:
columns: 12
rows: 2
- type: tile
entity: select.z60_ultra_roller_complete_suction_level
name: Aspiration
icon: mdi:weather-windy
color: blue
- type: tile
entity: select.z60_ultra_roller_complete_mop_pad_humidity
name: Humidité serpillière
icon: mdi:water-percent
color: cyan
- type: tile
entity: select.z60_ultra_roller_complete_water_temperature
name: Température eau
icon: mdi:water-thermometer
color: red
- type: tile
entity: select.z60_ultra_roller_complete_auto_empty_mode
name: Auto-vidage
icon: mdi:delete-sweep
color: brown
- type: tile
entity: select.z60_ultra_roller_complete_drying_time
name: Séchage
icon: mdi:sun-clock
color: amber
- type: custom:mushroom-entity-card
entity: switch.z60_ultra_roller_complete_auto_drying
name: Séchage auto
icon: mdi:weather-sunny
icon_color: yellow
tap_action:
action: toggle
- type: custom:mushroom-entity-card
entity: switch.z60_ultra_roller_complete_dnd
name: Ne pas déranger
icon: mdi:moon-waning-crescent
icon_color: deep-purple
tap_action:
action: toggle
- type: custom:mushroom-entity-card
entity: switch.z60_ultra_roller_complete_child_lock
name: Verrouillage enfant
icon: mdi:lock
icon_color: grey
tap_action:
action: toggle
- title: ''
cards:
- type: heading
heading: Carte
heading_style: title
icon: mdi:map
badges:
- type: entity
entity: sensor.z60_ultra_roller_complete_state
color: cyan
show_state: true
show_icon: true
- type: entity
entity: sensor.z60_ultra_roller_complete_task_status
color: green
show_state: true
show_icon: true
- type: picture-entity
entity: camera.z60_ultra_roller_complete_map
name: Carte
show_state: false
show_name: false
camera_view: auto
- type: heading
heading: Dernière session
heading_style: subtitle
icon: mdi:clipboard-text-clock
badges:
- type: entity
entity: sensor.z60_ultra_roller_complete_cleaning_history
color: blue
show_state: true
show_icon: true
- type: custom:mushroom-template-card
primary: Durée
secondary: >-
{% set mins =
states('sensor.z60_ultra_roller_complete_cleaning_time') | int(0)
%}{% if mins >= 60 %}{{ (mins / 60) | round(0) }}h{{ '%02d' |
format(mins % 60) }}{% else %}{{ mins }} min{% endif %}
icon: mdi:timer-sand
icon_color: orange
- type: custom:mushroom-template-card
primary: Surface nettoyée
secondary: '{{ states(''sensor.z60_ultra_roller_complete_cleaned_area'') }} m²'
icon: mdi:ruler-square
icon_color: teal
- title: ''
cards:
- type: heading
heading: Statistiques
heading_style: title
icon: mdi:chart-bar
badges:
- type: entity
show_state: true
show_icon: true
entity: sensor.z60_ultra_roller_complete_cleaning_count
color: amber
- type: custom:mushroom-template-card
primary: Temps total
secondary: >-
{% set mins =
states('sensor.z60_ultra_roller_complete_total_cleaning_time') |
int(0) %}{{ (mins / 60) | round(0) }}h
icon: mdi:timer-outline
icon_color: deep-orange
- type: custom:mushroom-template-card
primary: Surface totale
secondary: >-
{{ states('sensor.z60_ultra_roller_complete_total_cleaned_area')
}} m²
icon: mdi:set-square
icon_color: indigo
- type: heading
heading: Consommables
heading_style: title
icon: mdi:wrench-outline
- type: custom:mushroom-template-card
primary: Brosse principale
secondary: >-
{{ states('sensor.z60_ultra_roller_complete_main_brush_left') }}%
— {{
states('sensor.z60_ultra_roller_complete_main_brush_time_left')
}}h
icon: mdi:car-turbocharger
icon_color: >-
{% if states('sensor.z60_ultra_roller_complete_main_brush_left') |
int > 50 %}green{% elif
states('sensor.z60_ultra_roller_complete_main_brush_left') | int >
20 %}orange{% else %}red{% endif %}
badge_icon: >-
{% if states('sensor.z60_ultra_roller_complete_main_brush_left') |
int <= 20 %}mdi:alert{% endif %}
badge_color: red
tap_action:
action: more-info
entity: sensor.z60_ultra_roller_complete_main_brush_left
- type: custom:mushroom-template-card
primary: Brosse latérale
secondary: >-
{{ states('sensor.z60_ultra_roller_complete_side_brush_left') }}%
— {{
states('sensor.z60_ultra_roller_complete_side_brush_time_left')
}}h
icon: mdi:pinwheel-outline
icon_color: >-
{% if states('sensor.z60_ultra_roller_complete_side_brush_left') |
int > 50 %}green{% elif
states('sensor.z60_ultra_roller_complete_side_brush_left') | int >
20 %}orange{% else %}red{% endif %}
badge_icon: >-
{% if states('sensor.z60_ultra_roller_complete_side_brush_left') |
int <= 20 %}mdi:alert{% endif %}
badge_color: red
tap_action:
action: more-info
entity: sensor.z60_ultra_roller_complete_side_brush_left
- type: custom:mushroom-template-card
primary: Filtre
secondary: >-
{{ states('sensor.z60_ultra_roller_complete_filter_left') }}% — {{
states('sensor.z60_ultra_roller_complete_filter_time_left') }}h
icon: mdi:air-filter
icon_color: >-
{% if states('sensor.z60_ultra_roller_complete_filter_left') | int
> 50 %}green{% elif
states('sensor.z60_ultra_roller_complete_filter_left') | int > 20
%}orange{% else %}red{% endif %}
badge_icon: >-
{% if states('sensor.z60_ultra_roller_complete_filter_left') | int
<= 20 %}mdi:alert{% endif %}
badge_color: red
tap_action:
action: more-info
entity: sensor.z60_ultra_roller_complete_filter_left
- type: custom:mushroom-template-card
primary: Capteurs
secondary: >-
{{ states('sensor.z60_ultra_roller_complete_sensor_dirty_left')
}}% — {{
states('sensor.z60_ultra_roller_complete_sensor_dirty_time_left')
}}h
icon: mdi:radar
icon_color: >-
{% if states('sensor.z60_ultra_roller_complete_sensor_dirty_left')
| int > 50 %}green{% elif
states('sensor.z60_ultra_roller_complete_sensor_dirty_left') | int
> 20 %}orange{% else %}red{% endif %}
badge_icon: >-
{% if states('sensor.z60_ultra_roller_complete_sensor_dirty_left')
| int <= 20 %}mdi:alert{% endif %}
badge_color: red
tap_action:
action: more-info
entity: sensor.z60_ultra_roller_complete_sensor_dirty_left
- type: custom:mushroom-template-card
primary: Bac eaux usées
secondary: >-
{{
states('sensor.z60_ultra_roller_complete_dirty_water_tank_left')
}}% — {{
states('sensor.z60_ultra_roller_complete_dirty_water_tank_time_left')
}}j
icon: mdi:cup-water
icon_color: >-
{% if
states('sensor.z60_ultra_roller_complete_dirty_water_tank_left') |
int > 50 %}green{% elif
states('sensor.z60_ultra_roller_complete_dirty_water_tank_left') |
int > 20 %}orange{% else %}red{% endif %}
badge_icon: >-
{% if
states('sensor.z60_ultra_roller_complete_dirty_water_tank_left') |
int <= 20 %}mdi:alert{% endif %}
badge_color: red
tap_action:
action: more-info
entity: sensor.z60_ultra_roller_complete_dirty_water_tank_left
- type: custom:mushroom-template-card
primary: Anti-calcaire
secondary: >-
{{ states('sensor.z60_ultra_roller_complete_scale_inhibitor_left')
}}% — {{
states('sensor.z60_ultra_roller_complete_scale_inhibitor_time_left')
}}j
icon: mdi:pipe
icon_color: >-
{% if
states('sensor.z60_ultra_roller_complete_scale_inhibitor_left') |
int > 50 %}green{% elif
states('sensor.z60_ultra_roller_complete_scale_inhibitor_left') |
int > 20 %}orange{% else %}red{% endif %}
badge_icon: >-
{% if
states('sensor.z60_ultra_roller_complete_scale_inhibitor_left') |
int <= 20 %}mdi:alert{% endif %}
badge_color: red
tap_action:
action: more-info
entity: sensor.z60_ultra_roller_complete_scale_inhibitor_left
Conclusion
L’intégration Dreame Vacuum est sans doute l’une des meilleures intégrations communautaires que j’ai pu tester sur Home Assistant. Elle transforme vraiment l’expérience d’utilisation de votre robot en le connectant à tout votre écosystème domotique. Que vous ayez un Dreame, un Mova ou même un Mijia, je vous encourage à l’essayer.
Si vous avez des questions ou des automatisations à partager, n’hésitez pas à en discuter dans les commentaires !




Super tuto ! En revanche, c’est moi ou c’est ultra pas stable ? J’ai du DL la dernière version en beta, la v 1.0.8 de l’intégration n’affichait pas le compte Dreame. Et depuis, toute mon install est instable…