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

Publié le 18 mars 2026 Temps de lecture : 8 min.

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é.

  1. Ouvrez HACS dans votre menu Home Assistant.
  2. Cliquez sur Intégrations puis recherchez « Dreame Vacuum« .
  3. 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.
  4. Redémarrez Home Assistant.
  5. 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 !

1 commentaire

  1. 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…

Laisser un commentaire