Use an away check, a time window and a daily record
To run a Home Assistant vacuum when nobody is home, combine three checks: all selected people are away, the time is suitable, and this automation has not already attempted a start today. Add an obvious permission switch so a visitor or a pet does not get overlooked.
Use this with a robot that already works in Home Assistant. An integration is its connection to Home Assistant; its entity, such as vacuum.downstairs, is the named control your automation uses. Confirm that exact connection can start cleaning, report its state and return to the dock. These are separate capabilities in the vacuum documentation.
Start with the notification rehearsal below. It checks the household rules without moving the robot. Once those rules behave correctly, replace the notification with the supported start action. Leave an unreliable presence setup on manual control; fix a person stuck home or away before relying on it.
Research method: researched from current Home Assistant documentation on October 9, 2026. This is an original configuration walkthrough, not a tested Tara household or robot review. The cover is an AI-generated illustration of a room prepared for cleaning.
1. Check the robot and the people first
- Confirm the controls while you are home. With the floor clear and the manufacturer’s safety instructions followed, check Start and Return to base separately. Observe the reported
cleaning,returninganddockedstates. A successful action call alone does not prove the robot moved or docked. - Choose one schedule owner. Disable duplicate cleaning schedules in the vendor app if Home Assistant will own this routine. Otherwise the robot can start independently of the conditions below.
- Check every regular resident. Under Settings → People, confirm each person has the intended tracker. Watch real departures and arrivals before enabling unattended cleaning. A named place such as Work also counts as away in this example.
- Prepare the floor and household. Clear cords, liquids and pet accidents; follow the robot’s guidance for stairs and restricted areas. Keep cleaning disabled when untracked people or pets make it unsuitable.
Person states come from device trackers, not a physical head count. A phone left at home can block cleaning; a stale “away” state can incorrectly allow it. Rejecting unknown and unavailable helps, but does not detect every stale reading. The Person documentation explains how multiple trackers affect the result.
A robot can also set off an armed motion alarm, as the Roborock integration warns. Keep unattended cleaning disabled until your security arrangement is compatible; do not disable alarm protection just to make this routine run.
Home Assistant scheduling does not remove a vacuum’s cloud requirements. For the connection decision, use the existing robot vacuum local-control comparison.
2. Create three helpers
A helper is a small setting or calculated value stored by Home Assistant. Open Settings → Devices & services → Helpers → Create helper. Use the names below, then confirm the entity IDs in each helper’s settings; adjust the examples if yours differ.
- Create a Toggle named Vacuum away cleaning allowed:
input_boolean.vacuum_away_cleaning_allowed. Leave it off initially and put it on your dashboard. It is household permission, not a sensor. - Create Date and/or time named Vacuum last auto attempt, selecting date only:
input_datetime.vacuum_last_auto_attempt. Set its value to yesterday using its date picker, so the first rehearsal is eligible. - Create Template → Binary sensor named Vacuum house empty:
binary_sensor.vacuum_house_empty. Paste the following into its state template, replacing Alex and Sam with your actual person IDs. Leave optional device class and delays unset.
{{ has_value('person.alex')
and has_value('person.sam')
and not is_state('person.alex', 'home')
and not is_state('person.sam', 'home') }}
For another resident, add both a has_value check and a “not home” check, joined with and. For one resident, remove both Sam checks. Do not leave out a regular occupant just because their tracking is inconvenient.
The binary sensor is a yes/no result: on means every listed person has a known state outside home; off means that is not established. The Template helper recalculates from the referenced entities, and state-template functions distinguish missing values from usable ones.
The date helper restores its saved value after a normal restart when no YAML initial value forces a reset. There is no midnight reset automation to miss. This is a household convenience record, not crash-proof transaction storage; after restoring an older backup, check it before re-enabling cleaning.
3. Add the notification rehearsal
Go to Settings → Automations & scenes → Create automation → Create new automation, then use the menu’s Edit in YAML option. Paste this as one automation, without an outer automation: line. It uses ordinary state and time checks; menu wording can vary by release.
The automation checks every five minutes. It allows a start from 10:00 until before 16:00, using Home Assistant’s configured local time, after the empty-house helper has stayed on for ten minutes. The robot must report docked. The window restricts starting; it does not end an ongoing clean at 16:00. These are example household settings, not recommended cleaning times for every home.
Notification-only automation
alias: Vacuum - one daytime away attempt
mode: single
triggers:
- trigger: time_pattern
minutes: "/5"
conditions:
- condition: state
entity_id: input_boolean.vacuum_away_cleaning_allowed
state: "on"
- condition: state
entity_id: binary_sensor.vacuum_house_empty
state: "on"
for: "00:10:00"
- condition: time
after: "10:00:00"
before: "16:00:00"
- condition: state
entity_id: vacuum.downstairs
state: "docked"
- condition: template
value_template: >-
{{ has_value('input_datetime.vacuum_last_auto_attempt')
and states('input_datetime.vacuum_last_auto_attempt')
!= now().strftime('%Y-%m-%d') }}
actions:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.vacuum_last_auto_attempt
data:
date: "{{ now().strftime('%Y-%m-%d') }}"
- action: persistent_notification.create
data:
title: "Vacuum rehearsal"
message: "The away-cleaning checks passed. No robot was started."
notification_id: vacuum_away_rehearsalThe date is written before the final action. This deliberately allows at most one automatic attempt per day, including a failed command. It does not measure cleaning completion. If the date helper is missing or unavailable, the example refuses to start.
A periodic check also handles someone leaving before 10:00, or Home Assistant being off at the start of the window. After restart, allow a fresh ten-minute empty-house check; the automation does not reconstruct unseen departures. It waits for an eligible check instead of replaying a missed start event. See the official state-duration condition and time-pattern trigger.
A worked morning: Alex leaves first, Sam leaves last
This is an illustrative timeline, not a measured robot test. Assume the helper states update at the times shown, permission is on, the date is yesterday and the robot is docked.
On a small screen, swipe the table sideways.
| Time and event | Decision | Reason |
|---|---|---|
| 09:10: Alex leaves; Sam is home | No start | Not everyone is away. |
| 09:52: Sam leaves | Wait | The ten-minute empty period begins. |
| 10:00: scheduled check | No start | Only eight minutes empty. |
| 10:05: next check | Record today; show rehearsal notice | All conditions pass. No robot moves in this version. |
| 12:00: both return, then leave again | No second start | Today’s attempt is already recorded. |
| Next day, a guest stays behind | Permission must be off | The two phone trackers cannot detect that guest. |
Verify the conditions without moving anything
- Keep the notification version installed. With permission off, wait for a five-minute check: there should be no rehearsal notice and no date change.
- Turn permission on while a tracked resident is home. The empty-house condition should still block it.
- During a real suitable departure, wait for ten minutes away and the next five-minute check inside the window. Open Home Assistant: expect a Vacuum rehearsal notification and today’s saved date. The vacuum should remain docked.
- Wait for another check. Expect no new attempt. Open the automation’s Traces to see which condition stopped it; the date check should now fail.
This uses a persistent notification inside Home Assistant, not a phone push notification. Do not use Run actions to verify the guards: it skips triggers and conditions. Once a physical action is installed, that button can start the robot while someone is home.
4. Enable cleaning after the rehearsal passes
Turn permission off while editing. Replace the whole actions: section with the following. Keep every trigger and condition above it. The date is still recorded before the robot command.
actions:
- action: input_datetime.set_datetime
target:
entity_id: input_datetime.vacuum_last_auto_attempt
data:
date: "{{ now().strftime('%Y-%m-%d') }}"
- action: vacuum.start
target:
entity_id: vacuum.downstairs
Start cleaning can start or resume a job; it does not guarantee a new mapped whole-home run on every model. Confirm your robot’s behavior before using it unattended. Room selection, mop modes and special saved routines need their own supported actions.
The rehearsal already used today’s attempt. The simplest next step is to leave the date alone and enable permission for the next suitable day. For an intentional same-day retry, inspect the robot first, turn permission off, set the date to yesterday, then re-enable permission only when the floor and household are ready.
Turn permission off for holidays if you do not want a daily attempt in an empty home. In the start automation alone, switching permission off prevents future starts; it does not stop a clean already underway.
5. Choose what should happen when someone comes home
If cleaning must be away-only, add the rule below. It requests a return to base when the robot reports cleaning and either the empty-house check or permission is no longer on. It also checks once a minute, which can recover a missed change after a restart. Actual response still depends on presence updates, integration updates and the robot.
This rule applies to any cleaning job on this entity, including a manual or vendor-app start. It has no way to prove which controller started that job. If you want manual cleaning while people are home, leave this rule disabled and use Return to base yourself, or build a separately tracked session policy. Disabling only the start automation does not disable this rule.
Optional away-only return rule
alias: Vacuum - enforce away-only cleaning
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.vacuum_house_empty
to: "off"
- trigger: state
entity_id: input_boolean.vacuum_away_cleaning_allowed
to: "off"
- trigger: state
entity_id: vacuum.downstairs
to: "cleaning"
- trigger: time_pattern
minutes: "/1"
conditions:
- condition: state
entity_id: vacuum.downstairs
state: "cleaning"
- condition: template
value_template: >-
{{ not is_state('binary_sensor.vacuum_house_empty', 'on')
or not is_state('input_boolean.vacuum_away_cleaning_allowed', 'on') }}
actions:
- action: vacuum.return_to_base
target:
entity_id: vacuum.downstairsFor a harmless first check, temporarily replace its vacuum.return_to_base action with a persistent notification. During a supervised, safe clean with someone home, expect a notice when the next check sees the policy violation. Restore the dock action only after confirming the behavior you want. With the real return rule enabled, permission off requests docking while the robot is cleaning.
Return to base requests travel to the dock; it is not an immediate stop or proof of arrival. The example does not act on a robot reporting paused, error or unavailable. Use its normal physical controls if immediate intervention is needed. This is a comfort routine, not a person- or pet-safety system.
If the behavior is wrong, check the first failed condition
| What happens | Check | Next step |
|---|---|---|
| Everyone leaves but nothing happens | Trace, person states, permission, date and docked state | A Work zone is allowed; an unknown person blocks the example. Do not bypass the whole condition list. |
| It only works with Run actions | A trigger or condition is failing | Read the real timed trace. Manual action execution does not validate the household rules. |
| Today’s date changed but no clean happened | Final action, robot status and integration error | The attempt is consumed. Inspect the failure before deliberately allowing a retry. |
| It cleans while a guest is home | Permission switch and independent vendor schedules | Pause the routine for untracked occupants; phone absence is not proof of an empty house. |
| Manual cleaning immediately heads home | The optional away-only rule | That is its stated policy. Disable that rule for supervised home cleaning. |
| It remains out after a return request | Reported state, path to dock and connectivity | A command is not a completed dock. Check the robot; do not repeatedly reset or re-pair it. |
For recurring missing contact, add an unavailable-device notification separately. If the family prefers approving each clean, use a Yes/No phone confirmation instead of assuming away always means ready.
Tara’s practical recommendation is to begin with a visible permission switch and the daily attempt record. Add room selection or more elaborate schedules only after the basic behavior is predictable. The home automation kit’s coordinated routines apply the same idea across devices: clear ownership and an understandable household pause.
Frequently asked questions
Can I just use zone.home equal to zero?
That count is useful for tracked people. It does not establish that guests, children without trackers or pets are out. The example checks each selected resident for a usable state and adds a household permission switch.
Will this work without internet?
The automation runs on Home Assistant, but phone location updates and vacuum commands retain their existing network requirements. A cloud integration does not become local because Home Assistant starts it.
Does one start per day mean the floor was cleaned?
No. The saved date records an attempted start, including the notification rehearsal. A failed command, stuck robot or interrupted run still uses that day’s attempt. Check the robot before allowing another attempt.
Can the vacuum clean just one room?
Only when the exact vacuum and integration expose that ability. Check area mapping and the supported cleaning action before replacing the whole-clean start action. A Home Assistant room name alone does not configure the robot’s map.
