v1.11.1
Eufy Robovac MQTT — v1.11.1-beta1
Zone cleaning — point the robot at one or more free-form rectangles instead of whole rooms, and draw those boxes right on the live map with a bundled dashboard card. Both land in #138 by @kingchddg901 — their first contribution. 🎉
Requires the live map camera added in v1.11.0 — zones are drawn against the rendered map, so the map must have been received at least once (run a clean or dock first).
Live-validated on: Eufy X10 Pro Omni — the device reports "Zone Cleaning" and cleans the drawn rectangle in the correct map location.
✨ Highlights
🧹 Zone cleaning via vacuum.send_command
A new zone_clean command cleans one or more free-form rectangles rather than full rooms. Zones are given as normalized [x0, y0, x1, y1] coordinates — fractions (0–1) of the map camera image, (0,0) top-left to (1,1) bottom-right — and converted to the robot's world frame against the current map.
action: vacuum.send_command
target:
entity_id: vacuum.eufy_omni_c28
data:
command: zone_clean
params:
zones:
- [0.05, 0.70, 0.35, 0.95] # bottom-left corner
- [0.40, 0.40, 0.60, 0.60] # a box in the centre
clean_times: 1map_idis taken from the current map automatically; pass it explicitly to override.- The robot uses its current cleaning mode (vacuum / mop) and fan settings for the run.
- Rides the existing
send_commandpath (mirrorsroom_clean) — no new dependencies, no proto recompile, no new services.
🖱️ Bundled zone-clean Lovelace card (auto-registered)
Hand-writing normalized coordinates is fiddly, so the integration now ships a Lovelace card and registers it on setup — no www/ copy, no Lovelace Resources entry, and the card can't drift out of sync with the handler. A ?v=<manifest version> query busts the browser cache on update. Drop it on a dashboard:
type: custom:zone-clean-card
vacuum: vacuum.eufy_omni_c28
camera: camera.eufy_omni_c28_map
# title: Zone Clean # optional
# selects: # optional — defaults to auto-discovering the vacuum's selects
# - select.eufy_omni_c28_cleaning_mode
# - select.eufy_omni_c28_clean_speedWhat the card does:
- Draw on the live map — the vacuum's map camera is the backdrop; rubber-band a box with mouse or touch (pointer events, so it works on phones and tablets). Draw up to 10 zones, each numbered, with a dashed draft rectangle while you drag. Degenerate drags (smaller than ~1% of the map) are rejected.
- Live settings — it auto-surfaces the vacuum's setting
selectentities (suction, mode, water level, …) so you change them inline before cleaning. Omitselects:and it discovers everyselect.<vacuum-slug>_*automatically; list them to pick or order a specific subset. Changes apply live to the device — no params are baked into the command. - Passes — a
1–10input maps toclean_times(passes per zone). Clear wipes the boxes; Clean firesvacuum.send_command { command: zone_clean, params: { zones, clean_times } }and reports what was sent. - Always-fresh map — the camera re-renders the map without always bumping
last_updated, so the card polls the image (~3s while the robot is moving, every 10s while parked) and refreshes instantly on a real state change. It never swaps the backdrop mid-draw. - Visual editor — added through the dashboard UI, it ships a no-YAML config editor: pick the vacuum, map camera, title, and which selects to surface by clicking. Sensible defaults are pre-filled when you add the card.
- Zero dependencies — a vanilla web component (no Lit, no build step) that themes itself from Home Assistant CSS variables, so it follows your light/dark theme.
The map only renders after the robot has cleaned once (or you've edited the map in the app). Until then the card shows a "waiting for the map" placeholder.
New Contributors
- @kingchddg901 made their first contribution in #138 🎉
Full Changelog: v1.11.0...v1.11.1