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)
- 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.
- 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: If you are using service calls, you can find your room IDs directly in the Room Selection dropdown, where they are displayed alongside the room names (e.g.,
Kitchen (ID: 3)). This eliminates the need to dig through logs or the mobile app.
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! 🧹✨