Dreame Robot Vacuum + Home Assistant: Automations (2026)

Illustrative image, not evidence of a product test.

Dreame Robot Vacuum + Home Assistant: Automations (2026)

Published · Updated

A set of Home Assistant automations can run a Dreame vacuum without manual input: clean when the house is empty, skip rooms where people are sitting, do a kitchen run after dinner, and empty the dock at night when nobody’s awake to hear it. This guide is a configuration walkthrough based on manufacturer and Home Assistant documentation; no measurements or test results are published here.

You can find this walkthrough alongside our other Home Assistant setups and practical guides.

Why Automate a Robot Vacuum?

A robot vacuum that you have to manually start is barely better than a regular vacuum. The whole point is hands-free cleaning, and that means proper automation. Pressing “clean” in an app every day isn’t automation, it’s just a remote control.

With Home Assistant, your vacuum can react to context: when you leave, which rooms are occupied, what time it is, and whether the dustbin is full. That context turns a cleaning robot into something that fits your life without daily input.

If you haven’t picked a robot vacuum yet, check our best robot vacuum 2026 roundup or our Dreame vs Roborock comparison.

Example Hardware

  • Dreame L20 Ultra (auto-empty dock, mop washing, hot air drying)
  • Home Assistant on a mini PC (Intel N100)
  • Aqara FP2 presence sensors (2x, living room and office)
  • Phone-based presence detection for away/home status

Check current prices in your region. The auto-empty dock and self-cleaning mop are what make the “runs itself” approach practical. The Aqara FP2 detects room occupancy with mmWave radar (presence, not just motion).

Connecting Dreame to Home Assistant

Home Assistant has no core Dreame integration. The route used here is the community-developed Dreame Vacuum custom integration (GitHub: Tasshack/dreame-vacuum), which is installed through the built-in Marketplace on Core 2026.11 or later, or HACS on older supported Core versions. Its documentation states that it is not affiliated with or endorsed by Dreame Technology. Setup:

  1. On stable Core 2026.11 or later, open Settings → Marketplace, locate the community Dreame Vacuum integration and follow its installation instructions. Existing HACS packages and custom repositories migrate automatically. On older Core versions, use HACS. The November release notes explain the transition; the standalone HACS installer does not support 2026.11.
  2. Log in with your Dreamehome account (or Xiaomi Home, MOVAhome or TROUVER account, depending on which app manages the vacuum)
  3. Select your vacuum from the device list

The documentation notes that Dreamehome login needs the app’s username and password (not the website), and that the account must be registered with an email address, not a phone number.

According to the integration’s documentation, it provides:

  • Vacuum state and battery level
  • Live and multi-floor map support with room cleaning
  • Room-specific cleaning commands (dreame_vacuum.vacuum_clean_segment)
  • Consumable (brush/filter) sensors
  • Auto-empty controls on vacuums with an auto-empty station
  • Controls (start, stop, pause, return to dock)

The integration exposes room segments by ID, so you can tell the vacuum to clean only specific rooms. This is critical for the automations below.

For more on making the most of HA integrations, see our best Home Assistant integrations guide.

5 Example Automations (With YAML)

Entity IDs and room segment IDs are examples. Yours depend on the device name you gave the vacuum in Home Assistant and on your own map.

The YAML uses the current Home Assistant automation keys (triggers:, conditions:, actions:, with trigger: and action: inside the lists), which Home Assistant’s automation documentation lists as renamed from the older service:, platform: and singular top-level keys in Home Assistant 2024.8 to 2024.10. Older versions need the older keys. The snippets have not been run on a live Home Assistant instance; check them in the automation editor (Developer Tools > Actions and the automation trace) before relying on them.

Automation 1: Clean When Everyone Leaves

This is the foundation. When the last person leaves the house, start a full clean.

How it works: The Home Assistant companion app on each phone provides presence detection through a person entity. The zone.home entity’s state is the number of people currently in the home zone (Zone integration), so a count below 1 means nobody is home.

automation:
  - alias: "Vacuum - Start when everyone leaves"
    triggers:
      - trigger: numeric_state
        entity_id: zone.home
        below: 1
        for: "00:05:00"
    conditions:
      - condition: state
        entity_id: vacuum.dreame_l20_ultra
        state: "docked"
      - condition: numeric_state
        entity_id: sensor.dreame_l20_ultra_battery_level
        above: 50
    actions:
      - action: vacuum.start
        target:
          entity_id: vacuum.dreame_l20_ultra

The 5-minute delay avoids false triggers (stepping outside to grab a package shouldn’t start a cleaning cycle). The battery check avoids starting with insufficient charge for a full run; the Dreame integration’s documentation lists battery_level as a sensor entity.

Phone-based presence can glitch (for example a phone briefly dropping off WiFi), which is what the 5-minute buffer is for.

Automation 2: Avoid Occupied Rooms

When someone is in a room, skip that room. This uses the Aqara FP2 sensors for occupancy detection. At a fixed time, the automation works out which rooms are free and cleans only those.

automation:
  - alias: "Vacuum - Clean unoccupied rooms"
    triggers:
      - trigger: time
        at: "10:00:00"
    conditions:
      - condition: state
        entity_id: vacuum.dreame_l20_ultra
        state: "docked"
    actions:
      - variables:
          occupied: >-
            {{ ([3] if is_state('binary_sensor.fp2_living_room_presence', 'on') else [])
               + ([5] if is_state('binary_sensor.fp2_office_presence', 'on') else []) }}
          free_rooms: >-
            {{ [1, 2, 3, 4, 5, 6] | reject('in', occupied) | list }}
      - condition: template
        value_template: "{{ free_rooms | count > 0 }}"
      - action: dreame_vacuum.vacuum_clean_segment
        target:
          entity_id: vacuum.dreame_l20_ultra
        data:
          segments: "{{ free_rooms }}"

The room segment IDs (1-6) are examples. The integration’s vacuum services documentation says that when the map feature is in use, segment IDs can be read from the vacuum entity attributes, so check your own mapping since these are specific to your floorplan. The same page notes that the service’s cleaning parameters are ignored by the device when customized cleaning or a cleaning sequence is enabled.

Limitation: the list of rooms is calculated once, when the automation runs. If someone walks into another room afterwards, the automation does not react. If every room is occupied the list is empty, and the template condition stops the run.

Automation 3: Kitchen-Only Clean After Dinner

Every evening, if the kitchen was occupied and then becomes unoccupied, run a kitchen-only clean. The idea is to catch crumbs and food debris right after a meal.

automation:
  - alias: "Vacuum - Kitchen after dinner"
    triggers:
      - trigger: state
        entity_id: binary_sensor.fp2_kitchen_presence
        to: "off"
        for: "00:10:00"
    conditions:
      - condition: time
        after: "19:30:00"
        before: "21:00:00"
      - condition: state
        entity_id: vacuum.dreame_l20_ultra
        state: "docked"
      - condition: state
        entity_id: input_boolean.kitchen_cleaned_today
        state: "off"
    actions:
      - action: dreame_vacuum.vacuum_clean_segment
        target:
          entity_id: vacuum.dreame_l20_ultra
        data:
          segments: 2
          suction_level: "high"
      - action: input_boolean.turn_on
        target:
          entity_id: input_boolean.kitchen_cleaned_today

An input_boolean helper prevents the kitchen from being cleaned multiple times in one evening (otherwise it would trigger every time someone leaves and returns to the kitchen). The helper needs to be reset at midnight via a separate automation.

The 10-minute presence timeout is meant to ensure dinner is actually over, not just a bathroom break mid-meal. The suction_level parameter is documented for vacuum_clean_segment with values such as "high" and "quiet" in the integration’s examples; the levels a given model accepts depend on the model, so check the fan speed options on your own vacuum entity.

Automation 4: Empty Dock at 11 PM

The Dreame dock’s auto-empty cycle can be triggered at a time that suits the household. One approach: turn off automatic dust collecting on the vacuum (the integration documents an auto_dust_collecting setting, “automatic dust collecting when cleaning completed”, on vacuums with an auto-empty station), then trigger the empty cycle from HA at a time when nobody is nearby. The integration also provides a start_auto_empty button entity for this.

automation:
  - alias: "Vacuum - Empty dock at 11pm"
    triggers:
      - trigger: time
        at: "23:00:00"
    conditions:
      - condition: state
        entity_id: vacuum.dreame_l20_ultra
        state: "docked"
    actions:
      - action: button.press
        target:
          entity_id: button.dreame_l20_ultra_start_auto_empty

Adjust the entity ID to match your device. The integration’s documentation also lists a dust_bag_status sensor (for example Present, Full, Missing) on vacuums with an auto-empty station, which can be used for a dust bag alert.

Automation 5: Maintenance Alerts

The vacuum tracks brush, filter and mop pad wear. The integration exposes these as consumable sensors with remaining life in percent (main_brush_left, side_brush_left, filter_left, and so on). A notification can tell you when anything needs attention.

automation:
  - alias: "Vacuum - Maintenance alerts"
    triggers:
      - trigger: numeric_state
        entity_id: sensor.dreame_l20_ultra_main_brush_left
        below: 10
      - trigger: numeric_state
        entity_id: sensor.dreame_l20_ultra_side_brush_left
        below: 10
      - trigger: numeric_state
        entity_id: sensor.dreame_l20_ultra_filter_left
        below: 10
    actions:
      - action: notify.mobile_app_your_phone
        data:
          title: "Vacuum Maintenance"
          message: >-
            {{ trigger.to_state.name }} is at {{ trigger.to_state.state }}%.
            Time to replace it.

Replacement intervals depend on the model and your home; use the manufacturer’s guidance for your vacuum.

Automations Summary Table

AutomationTriggerConditionsWhat It Does
Clean when everyone leaveszone.home count below 1 for 5 minVacuum docked, battery above 50%Full house clean
Clean unoccupied roomsTime: 10:00Vacuum docked; FP2 presence per roomCleans only rooms without people
Kitchen after dinnerKitchen unoccupied for 10 minBetween 7:30-9 PM, not already cleaned todayKitchen-only clean
Empty dock at nightTime: 11:00 PMVacuum dockedRuns auto-empty cycle
Maintenance alertsBrush/filter life below 10%NonePush notification to phone

Dashboard Setup

A dedicated vacuum card on an HA dashboard can show:

  • Live map with vacuum position
  • Battery level
  • Current status
  • Last clean time and duration
  • Quick buttons: clean all, clean kitchen, return to dock
  • Brush/filter life gauges

The integration provides map entities and its own Dreame Vacuum Card for the dashboard, according to its documentation.

Practical Lessons

Presence detection is everything. Without reliable presence detection, most of these automations fall apart. Phone-based presence (GPS + WiFi) is suited to home/away. FP2 sensors are suited to room-level occupancy. Don’t try to do room-level with phone GPS, it’s not accurate enough.

Start simple, then add complexity. Begin with “clean when I leave” and add room avoidance and the kitchen schedule once the basic setup behaves.

The vacuum needs a consistent map. If you rearrange furniture frequently or remap, the room segment IDs might change. Keep your layout stable and re-check segment IDs after a remap.

Suction levels matter for different rooms. A sensible split is a higher level for the kitchen (food debris), quiet mode for bedrooms and standard elsewhere, as available on your model.

If you’re looking for other budget devices to pair with your vacuum setup, check out our list of best smart home devices under €50.

Common Issues and Fixes

Vacuum doesn’t start when triggered: Check battery level. Some models may refuse to start at low charge. Also verify the vacuum state is “docked” not “idle” (they’re different).

Room segments don’t match: After a firmware update or remap, segment IDs may change. Check the segment IDs in the vacuum entity attributes.

Presence detection false triggers: Add a time delay to your away trigger (for example 5 minutes). Also make sure all family members’ phones are in the HA companion app and tracking correctly.

Vacuum gets stuck during automated runs: Add an automation that notifies you if the vacuum has been in “error” state for more than a couple of minutes. Cables, socks and shoes are the usual culprits for any robot vacuum.

Is This Setup Worth It?

If you already run Home Assistant and have reliable presence detection, these automations are a practical way to make a Dreame vacuum run without daily input. The combination of presence detection and room awareness means it can clean at the right time, in the right rooms, without disturbing anyone.

The Dreame app can do scheduled cleans. What it cannot do on its own is react to Home Assistant context such as whether you just left the house, whether someone is working in the office, or whether dinner just ended.

For the full guide on getting Home Assistant running, start with our beginner guide. And for choosing the best ecosystem for your whole home, see our smart home ecosystem comparison.

FAQ

Which Dreame vacuums work with Home Assistant?

The community Dreame Vacuum integration publishes a supported devices list with model codes for Dreame, MOVA, Mijia and TROUVER robots. Check your exact model against that list before buying. The integration’s documentation also describes a local (LAN) connection method, but it only applies to devices manufactured before 2022 that work with the Xiaomi Home app, and it has no map support.

Do I need presence sensors for vacuum automation?

For basic “clean when I leave” automation, phone-based presence detection is enough. For room-avoidance (skipping occupied rooms), you need room-level presence sensors like the Aqara FP2. Regular motion sensors are a poor fit because they cannot detect someone sitting still. The FP2 uses mmWave radar for presence detection.

Can I control which rooms get cleaned from Home Assistant?

Yes. The Dreame integration exposes room segments, so you can send the vacuum to clean specific rooms with dreame_vacuum.vacuum_clean_segment. The integration’s documentation says segment IDs can be read from the vacuum entity attributes when the map feature is in use; use those IDs in your automations.

How reliable are these automations day-to-day?

That depends on your presence detection, WiFi and home layout; no reliability figures are published here. The main failure points to plan for are presence detection glitches (a phone briefly dropping off WiFi) and physical obstacles such as cables or shoes.

Does the Dreame vacuum need internet for Home Assistant control?

For most devices, yes. The integration’s cloud connection methods (Dreamehome, Xiaomi Home, MOVAhome, TROUVER accounts) use the manufacturer’s cloud, so internet access is needed. The local connection method is documented only for pre-2022 devices that work with the Xiaomi Home app, and it has no map support, which the documentation marks as not recommended.