A persistent Android notification card for robot vacuums that stays visible while your vacuum is running, shows a live map snapshot, exposes action buttons to control the robot, and sends a final completion notification with the last map frame when it docks. No extra helpers required — just your vacuum entity, a tank sensor and a camera.
How it works
The blueprint is triggered by state changes on the vacuum entity and the tank sensor. As long as the vacuum is active it maintains a single persistent notification, overwriting itself on every update using a fixed tag derived from the entity ID. When the robot docks, a separate completion notification is sent and the persistent one is cleared.
Notification content:
- Current state (Cleaning, Paused, Returning to base, Idle, Error) with emoji
- Battery level if available
- Tank fill percentage from a dedicated sensor
- Live map image from a camera entity (local or external URL)
Action buttons:
- Stop / Resume — dynamic label depending on current state. Uses a negative condition (
not in ['cleaning', 'returning', 'docked']) to handle any non-active state robustly, including integrations that reportidleinstead ofpaused - Go home — sends the robot back to base
Inputs
| Input | Description |
|---|---|
| Vacuum Entity | vacuum.* entity |
| Tank Percentage Sensor | sensor.* reporting dust tank fill level |
| Map Image URL | Full URL to the camera snapshot (see below) |
| Notification Service | e.g. notify.mobile_app_pixel_8 or notify.family |
Map Image URL must be reachable from the mobile device. For external access the recommended format is:
https://your-host.duckdns.org/api/camera_proxy/camera.your_map?token={{ state_attr('camera.your_map', 'access_token') }}
This injects the token dynamically at runtime so it never expires. The camera entity is not an input field — the URL is passed directly, which makes the blueprint compatible with any camera integration (Xiaomi Cloud Map Extractor, Valetudo, Roborock, etc.) and also allows using a static URL or a local one depending on your setup.
Compatibility
Optimized for Android. Functional on iOS but sticky, persistent and notification channels are not supported on that platform — all updates will produce sound and the notification can be dismissed freely.
Source
GitHub — txitxo0/ha-blueprints
Full disclosure: I’m @Jesus_De_Luis_Serran and I was too lazy to write this myself, so I had AI write it for me. I just couldn’t be bothered with the post. ![]()
