Smart Lighting
Turn on lights when robot runs.
Robot vacuums keep your home clean automatically every day. Modern models combine vacuuming and mopping, empty themselves, and can be controlled from Home Assistant based on when you leave home.
| Type | Description | Maintenance | Price |
|---|---|---|---|
| Vacuum only | Simple vacuuming | Empty bin | 💰 |
| Vacuum + mop | Combined cleaning | Change water | 💰💰 |
| Combo + auto-dock | Self-empty + mop wash | Minimal | 💰💰💰 |
| Premium all-in-one | Everything automatic | Almost none | 💰💰💰💰 |
graph TD A[Do you have hard floors?] -->|Mostly| B[Combo w/ mop] A -->|Mostly carpet| C[Vacuum only] B -->|Budget| D[Dreame L10s Ultra] B -->|Premium| E[Dreame L50/X50 Ultra] C -->|Budget| F[Roborock Q5 Max+] C -->|Premium| G[Roborock Saros 10R]Price: ~$1,100
Dreame L50 Ultra is best buy of the year:
Disadvantages:
| Spec | Value |
|---|---|
| Suction | 19,500 Pa |
| Battery | 6,400 mAh |
| Noise | ~67 dB |
| Mop | Rotating dual-pads |
Via Dreame integration (HACS):
# HACS → Integrations → Dreame Vacuum# Requires Dreame/Xiaomi account
# Entities:# - vacuum.dreame_l50_ultra# - sensor.dreame_l50_ultra_battery# - sensor.dreame_l50_ultra_cleaning_time# - button.dreame_l50_ultra_start_pause
# Example: Start when leavingautomation: - alias: "Start vacuum when everyone leaves" trigger: - platform: state entity_id: group.all_people to: "not_home" for: "00:05:00" condition: - condition: time after: "08:00:00" before: "20:00:00" - condition: state entity_id: vacuum.dreame_l50_ultra state: "docked" action: - service: vacuum.start entity_id: vacuum.dreame_l50_ultraDreame L-series supports Valetudo for 100% local control:
Supported models:
Root requires:
# After Valetudo installation# Connect via MQTT to Home Assistant
mqtt: broker: 192.168.1.x
# Entities autodiscover:# - vacuum.valetudo_dreame# - sensor.valetudo_dreame_battery# - camera.valetudo_dreame_mapBenefits of Valetudo:
Buy: Amazon, Dreame.com
Price: ~$1,200-1,500
Roborock’s 2025 flagships:
| Feature | Qrevo CurvX | Saros Z70 |
|---|---|---|
| Suction | 18,500 Pa | 22,000 Pa |
| Mop | Rotating | Rotating |
| Robot arm | No | ✅ OmniGrip |
| Threshold | 0.8” | 1.6” |
| Price | ~$1,200 | ~$1,500 |
Saros Z70 special:
Disadvantages:
Home Assistant has official Roborock integration:
# Settings → Devices → Roborock# Login with Roborock account
# Entities:# - vacuum.roborock_s8_maxv# - sensor.roborock_s8_maxv_battery# - sensor.roborock_s8_maxv_last_clean_area# - number.roborock_s8_maxv_mop_intensity# - select.roborock_s8_maxv_mop_mode
# Example: Room-specific cleaningautomation: - alias: "Clean kitchen after cooking" trigger: - platform: state entity_id: binary_sensor.stove_active from: "on" to: "off" for: "00:10:00" action: - service: vacuum.send_command entity_id: vacuum.roborock_qrevo data: command: app_segment_clean params: - segments: [16] # Kitchen segment ID repeat: 1Buy: Roborock.com, Amazon
Price: ~$1,250
Ecovacs X11 has market’s strongest suction:
Disadvantages:
# HACS → Integrations → Ecovacs# Requires Ecovacs account
# Entities:# - vacuum.deebot_x11# - sensor.deebot_x11_battery
automation: - alias: "Notification when vacuum is done" trigger: - platform: state entity_id: vacuum.deebot_x11 from: "cleaning" to: "returning" action: - service: notify.mobile_app data: title: "Cleaning done" message: "Deebot is returning to dock"Buy: Ecovacs.com, Best Buy
Price: ~$350
Perfect for carpet-dominated homes:
Price: ~$550
Still excellent in 2025:
Valetudo is cloud replacement for robot vacuums:
| Benefit | Description |
|---|---|
| 100% Local | No data to cloud |
| No account | No login required |
| MQTT | Perfect HA integration |
| Fast | No cloud latency |
| Privacy | Camera/mic data stays local |
| Brand | Support | Root Difficulty |
|---|---|---|
| Dreame | ✅ Good | Easy (UART) |
| Roborock | ⚠️ Older models | Harder |
| Xiaomi/Viomi | ✅ Good | Varies |
| Ecovacs | ❌ No | N/A |
# 1. Check if your model is supported# https://valetudo.cloud/pages/general/supported-robots.html
# 2. Order hardware# - 3.3V USB UART adapter (~$7)# - Dreame Breakout PCB (~$15)
# 3. Use Dustbuilder for firmware# https://builder.dontvacuum.me/
# 4. Flash via UART# (follow guide on valetudo.cloud)
# 5. Configure MQTT in Valetudo# → Home Assistant autodiscovery# Valetudo uses MQTT autodiscovery# No manual configuration needed!
# Entities:# - vacuum.valetudo_[robot_name]# - camera.valetudo_[robot_name]_map# - sensor.valetudo_[robot_name]_battery# - button.valetudo_[robot_name]_locate
# Lovelace card for map display# HACS → Frontend → Xiaomi Vacuum Map Cardautomation: - alias: "Vacuum - Start when everyone leaves" trigger: - platform: state entity_id: group.all_people to: "not_home" for: "00:05:00" condition: - condition: time after: "08:00:00" before: "20:00:00" - condition: state entity_id: vacuum.robot state: "docked" - condition: template value_template: > {{ now().weekday() < 5 }} # Weekdays only action: - service: vacuum.start entity_id: vacuum.robotautomation: - alias: "Vacuum - Stop when someone comes home" trigger: - platform: state entity_id: group.all_people to: "home" condition: - condition: state entity_id: vacuum.robot state: "cleaning" action: - service: vacuum.return_to_base entity_id: vacuum.robot - service: notify.mobile_app data: title: "Vacuum stopped" message: "Robot returning to dock since you came home"automation: - alias: "Clean kitchen after cooking" trigger: - platform: state entity_id: sensor.stove_energy to: "idle" for: "00:15:00" condition: - condition: template value_template: > {{ states('sensor.stove_energy_today') | float > 0.5 }} action: - service: vacuum.send_command entity_id: vacuum.dreame data: command: app_segment_clean params: segments: [kitchen]automation: - alias: "Weekly deep cleaning" trigger: - platform: time at: "10:00:00" condition: - condition: time weekday: - sat - condition: state entity_id: group.all_people state: "not_home" action: - service: vacuum.set_fan_speed entity_id: vacuum.robot data: fan_speed: "max" - service: vacuum.start entity_id: vacuum.robotautomation: - alias: "Remind about filter cleaning" trigger: - platform: template value_template: > {{ states('sensor.vacuum_total_cleaning_time') | float > 50 }} action: - service: notify.mobile_app data: title: "🧹 Maintenance" message: "Time to clean vacuum filter (50+ hours)" - service: counter.reset entity_id: counter.vacuum_cleaning_hoursSmart Lighting
Turn on lights when robot runs.
Presence Detection
Automate based on who’s home.
Last updated: December 2025