Vacuum Agent — room control, live map, learning/ETAs & automation for Eufy + Roborock vacuums Previously Eufy Vacuum Manager

Every room painted with its real floor material — wood, marble, granite, tile, carpet — rendered live over your robot's actual map.


Vacuum Agent adds a whole control-and-intelligence layer on top of your robot vacuum — room-level cleaning, a live map you can actually drive from, a learning/ETA system, saved zones, battery-health tracking, a themeable dashboard, seven languages, and automation events — for Eufy and Roborock (it's adapter-based, so more brands can follow).

It doesn't replace your vacuum integration, it builds on it: for Eufy that's eufy-clean by jeppesens, for Roborock it's Home Assistant's built-in Roborock integration. Vacuum Agent consumes whatever they already expose and adds everything the stock integrations don't.

:information_source: This is the project I first posted here as "Eufy Vacuum Manager." It's now multi-brand and renamed Vacuum Agent — same author, much bigger.


The map is the centerpiece


bot in motion (2)

  • Tap a room to queue it.
  • Draw a box to clean just that spot — no rooms to set up first — and save those boxes as named zones you reuse later.
  • Rotate the map to match how your home is actually oriented, and mask sensor noise with hide-areas.
  • Floor textures (newest release) — paint every room with its real material (wood planks, tile + grout, carpet, marble, concrete, granite) as one continuous, themeable floor. It reads like a floor plan of your house.
  • Furnished render — trace your real rooms, drop in a to-scale drawing of your home, and align it once so the robot, dock, and cleaning path drive across your actual furniture.

Per-room control that learns



  • Room-level cleaning — pick rooms by name, build and reorder a queue, send targeted jobs instead of cleaning the whole floor.
  • Run & room profiles — save suction / mop / passes per room, or as named run profiles you trigger from the UI or an automation (the Save This Setup panel).
  • Learning + ETA — it records how long each room actually takes and predicts completion; the estimate sharpens every run (the per-room minutes + Learning / Uncertain confidence badges). Cleans you start from the vendor app get captured and folded into learning too.
  • Room rules — skip a room when a door's open, switch profiles when someone's home — any Home Assistant entity can drive a per-room rule.
  • Stall detection — fires an event when a room runs far over its learned average.

Saved zones

Beyond one-off box-cleaning, save a zone, name it, and file it under a room — then re-clean it any time (the Saved Zones panel above, e.g. a stove area filed under the Kitchen). Multi-select several, apply shared suction/mop settings, and clean the whole selection at once.


Battery health you can trend

Cycle counter, zone-aware charge-rate tracking (low / high / mid-job), CC/CV charge-speed indices, and per-job drain rates (%/min, %/hour, %/m²) against a baseline health proxy — built to spot degradation 6–12 months before it costs you cleaning time.


Make it yours — themes & languages

A built-in theme editor with three layers: ready-made presets, a high-level palette editor, and full token-level control with live previews (the floor materials above are a custom Core Slate theme). There's a validated colorblind-safe theme plus always-on shape-coded status badges.

The card speaks seven languages out of the box — German, French, Spanish, Dutch, Italian, Portuguese, Russian — with a per-user language globe in the header and drop-in support for your own locale. (Native reviewers very welcome — see the translations discussion.)


Also on Roborock

Same per-room map, floor textures, tap-to-queue, draggable labels, and draw-a-zone — the Roborock adapter (tested on the S6) brings the stock integration up to parity with Eufy.


Automation events

Wire the vacuum into the rest of your home. Vacuum Agent fires:

eufy_vacuum_job_finished · eufy_vacuum_room_started · eufy_vacuum_room_finished · eufy_vacuum_room_skipped · eufy_vacuum_path_blocked · eufy_vacuum_stall_detected · eufy_vacuum_run_incomplete

Plus run/room profiles and zone cleans are triggerable straight from automations and scripts.


📋 Full tab-by-tab tour (click to expand)

Maintenance — filter, brush, mop, and dock-water status against service intervals, plus lifetime usage totals and dock firmware where the device reports them.

Base Station — live dock state, water-reservoir projection, and gated dock actions (wash mop, dry mop, empty dust).

Metrics — job and learning history, filtered by room, profile, status, or learning use.

Learning Review — inspect every recorded run, exclude outliers (test runs, false completions, bad attribution), and see which profiles match the current settings.

External Jobs review — runs you start from the vendor app are captured here; confirm the room count, name each room, correct its settings, so app-started cleans feed learning too.

Room Rules — per-room blocker/modifier rules driven by any Home Assistant entity.

Map Bounds — per-room bounding-box review across runs, with outlier detection so one bad run doesn't poison your learned bounds.

Setup — register the vacuum, import maps, set floor type per room; it also watches for new rooms the vacuum reports later and for configured rooms that disappear, surfacing both for one-click review.


Supported hardware

Brand Model Status
Eufy X10 Pro Omni :white_check_mark: Tested — Eufy adapter reference
Eufy Other mapping models (X8, X9, S1, L-series, LR-series…) :warning: Untested — may work, report back
Roborock S6 :white_check_mark: Tested — Roborock adapter reference
Roborock Other models :warning: Untested — may work, report back

Each brand's adapter was built and validated against one reference model (the Eufy X10 Pro Omni and the Roborock S6). Other models of the same brand reuse that adapter and often work — if you try one, please open an issue with the model and what worked, and the table grows.

Eufy note: the per-room / live-map / learning value depends on the robot building a room map with per-room segments over Eufy's MQTT transport. Bump-and-go models (RoboVac C/G series) never map rooms, so there's nothing to add there. eufy-clean's newer Tuya transport also doesn't send the map/room list, so the map features go dark on that path.


What you need

  • Home Assistant 2025.6.0+
  • A working vacuum.* entity for your robot, from your brand's upstream integration — eufy-clean for Eufy, or the built-in Roborock integration. (Vacuum Agent sits on top; it doesn't replace them.)
  • Optional: a provider map/camera entity for the live backdrop (Eufy: eufy-clean v1.11.1+; Roborock: the built-in map image). Without it, room control / queues / profiles still work — you just don't get the live map and its tools.
  • Optional: the Python science stack (numpy/Pillow/scipy) for Auto-CV room segmentation. Not needed — manual room setup is fully supported.

Install (HACS)

  1. HACS → Integrations → ⋮ → Custom repositories.
  2. Add https://github.com/kingchddg901/Vacuum_Agent as an Integration.
  3. Search Vacuum Agent, install, and restart Home Assistant.
  4. Settings → Devices & Services → Add Integration → Vacuum Agent, then pick your vacuum.* entity.
  5. A Vacuum Agent panel appears in your sidebar — the card registers itself, no manual dashboard editing needed. (There are also two drop-in dashboard cards in the card picker if you'd rather embed it in your own views.)



Links

Credits

Built on top of eufy-clean by jeppesens (and Martijn Poppen's original) for Eufy, and Home Assistant's built-in Roborock integration. Thanks to everyone who's tested, reported models, and reviewed translations. :broom: