This repository is a maintained fork of eufy-clean by jeppesens, which was originally based on eufy-clean by martijnpoppen.
This project provides an interface to interact with Eufy cleaning devices via MQTT, with a specific focus on maintaining a robust Home Assistant Custom Component. It allows you to control cleaning scenes, specific rooms, and manage station configurations (wash frequency, auto-empty, etc.) directly from your smart home dashboard.
- This repo only has support for MQTT enabled Eufy Vacuums, which means you need to have a device that supports MQTT. E.g the Robovac X10 Pro Omni.
- This code was ported and tested on a Robovac X10 Pro Omni, but it should work on other models as well 🤞🏼
- This is a personal project maintained for Home Assistant users. Contributions are welcome!
This custom component provides comprehensive control over your Eufy robot vacuum and its cleaning station:
- Start/Stop/Pause cleaning operations
- Return to dock command
- Scene Selection - Trigger pre-configured cleaning scenes (e.g., "Full Home Deep Clean") directly via a dynamic select entity or service call
- Room-specific cleaning - Clean individual rooms or combinations of rooms
- Battery monitoring - Track battery level and charging status
- Find Robot - Locate your device by playing a sound (toggle via switch)
Fine-grained cleaning settings are exposed as select entities (shown only when supported by your device firmware):
- Suction Level -
Quiet,Standard,Turbo,Max,Boost_IQ - Cleaning Mode -
Vacuum,Mop,Vacuum and mop,Mopping after sweeping - Water Level -
Low,Medium,High - Mop Intensity -
Quiet,Automatic,Max(Matter-compatible alias for Water Level) - Cleaning Intensity -
Normal,Narrow,Quick
Note
These entities are hidden until the device reports the relevant DPS field at least once. Entities that your device does not support will remain unavailable.
- wash mop - trigger washing of the mop
- dry mop - trigger drying of the mop
- stop dry mop - stop the drying process
- empty dust bin - trigger emptying of the dust bin
All dock settings are organized under the Configuration category in your device settings:
- Wash Frequency Mode: Choose between
ByRoom(wash after each room) orByTime(wash after set duration) - Wash Frequency Value: Set wash interval from 15-25 minutes (when using ByTime mode)
- Auto Mop Washing: Enable/disable automatic mop washing
- Dry Duration: Choose drying time -
2h,3h, or4h
- Auto Empty: Enable/disable the auto-empty feature
- Auto Empty Mode: Configure emptying frequency:
Smart: Intelligent auto-detection15 min,30 min,45 min,60 min: Fixed time intervals
The integration tracks the usage of consumable accessories and allows you to reset them after replacement.
- Consumable Life: Monitors the remaining life (in hours) for:
- Filter
- Side Brush
- Rolling Brush
- Sensors
- Mop
- Cleaning Tray (Scrape)
- Dedicated buttons are available to reset the usage counter for each accessory when you replace them.
Note
The Eufy App displays two types of accessory tracking: "Maintenance" (recommended cleaning) and "Replacement". The "Maintenance" alerts are often calculated locally by the App based on time intervals and are not transmitted via MQTT. This integration only tracks the "Replacement" life, which is the actual usage data reported by the device firmware.
- Battery level percentage
- Charging status
- Work status and mode
- Extended Device Info: Serial number, MAC address, and Firmware version are now available in the device info panel.
- Error Tracking: Real-time error monitoring with detailed descriptions (e.g., "Wheel Stuck", "Sensor Dirty") available as attributes and sensors.
When the vacuum's room map changes (rooms added, removed, or renamed), the integration raises a Repair issue in Home Assistant under Settings → System → Repairs. This is especially important if you use the home-assistant-matter-hub bridge, where stale room names can cause automations to break. Once you have re-synced your area mapping, the issue will be cleared automatically on the next map update.
For exposing your Eufy vacuum to Apple Home, Google Home, or other Matter-compatible ecosystems we recommend home-assistant-matter-hub. This integration is designed to work alongside it. The following properties are exposed for Matter discovery:
- Room segments with guaranteed unique names (duplicates are automatically suffixed, e.g.
Kitchen (2)) to prevent bridge crashes - Mop Intensity select entity uses Matter-compatible option names (
Quiet,Automatic,Max)
Note
Both Water Level (Low/Medium/High) and Mop Intensity (Quiet/Automatic/Max) control the same device setting. Water Level uses human-readable device names; Mop Intensity uses the names expected by the Matter specification. The Matter bridge discovers the Mop Intensity entity.
- Open HACS in Home Assistant.
- Add this repository as a custom repository.
- Install "Eufy Robovac MQTT".
- Restart Home Assistant.
- Go to Settings -> Devices & Services.
- Click "Add Integration".
- Search for "Eufy Robovac MQTT" and follow the setup flow.
- Login with your Eufy App credentials.
The integration provides a dynamic Scene select entity (under the Configuration category) that automatically populates with all valid scenes from your Eufy app. Selecting an option in the UI will immediately trigger that cleaning routine.
Alternatively, you can use the following service call:
action: vacuum.send_command
metadata: {}
data:
command: scene_clean
params:
scene_id: 5
target:
entity_id: vacuum.robovac_x10_pro_omni- scene_id : Default scenes are typically 1-3 with custom scene IDs starring from 4+. You can find the scene IDs in the Scene Selection drop down.*
The integration provides two ways to clean specific rooms:
- Room Selection Entity: A dynamic select entity (under the Configuration category) that automatically populates with all discovered rooms from your current active map. Selecting a room will trigger a clean for that specific room.
- Service Call: For more advanced automation, you can use the following service call. You can optionally specify
fan_speed,water_level, andclean_timesto customize the cleaning for these rooms.[!TIP] You can apply the same custom parameters to ALL selected rooms using the simple list format below. For advanced per-room configuration (e.g., Turbo in Kitchen, Standard in Hallway), see the Advanced: Multi-Room Custom Settings section.
action: vacuum.send_command
target:
entity_id: vacuum.robovac_x10_pro_omni
data:
command: room_clean
params:
map_id: 4
room_ids: [3, 4]
# global params applied to both rooms...
fan_speed: "Turbo"To replicate the Eufy App's functionality of setting different parameters for different rooms in a single session, use the rooms parameter (list of objects) instead of room_ids.
action: vacuum.send_command
target:
entity_id: vacuum.robovac_x10_pro_omni
data:
command: room_clean
params:
map_id: 4
rooms:
- id: 3 # Kitchen
fan_speed: "Turbo"
clean_mode: "vacuum_mop"
water_level: "High"
- id: 4 # Hallway
fan_speed: "Quiet"
clean_mode: "vacuum"- Active Map Sensor: Use the
sensor.[vacuum_name]_active_mapentity to see which map the vacuum is currently on (e.g.,4,6). This is useful for providing the correctmap_idin service calls. - Map Switching: Currently not supported. If you need to switch the active map, you must do so within the official Eufy Clean app. Once switched, the integration will automatically update the
Active Mapsensor andRoom Selectionlist. - Room IDs: Room IDs are available in the vacuum entity's
roomsandsegmentsstate attributes (e.g.,{"id": 3, "name": "Kitchen"}). You can inspect these via Developer Tools → States in Home Assistant.
Tip
If you get an error like "Unable to identify position", it's likely that the map_id provided in your service call doesn't match the vacuum's current hardware map. Check the Active Map sensor to verify.
This project is maintained as a Home Assistant component. Issues and PRs should be relevant to the integration's functionality within Home Assistant.
- Map management
- Current position
Included in this repository is a docker-compose.yml file to facilitate local testing of the integration.
- Ensure you have Docker and Docker Compose installed.
- Run
docker compose upin the root directory. - This will start a local Home Assistant instance accessible at
http://localhost:8123. - The
custom_components/robovac_mqttdirectory is mounted into the container, making the custom component available in Home Assistant. - You will have to follow the steps mentioned in ### configuration to add your device to home assistant the first time you start the container. After that, you can stop the container and restart it whenever you want to make changes to the custom component.
For any questions or issues, please open an issue on the GitHub repository.
Happy Cleaning! 🧹✨