Some hardware links on this page are affiliate links. We may earn a commission if you buy through them, at no extra cost to you. See the affiliate disclosure.
A door contact by itself is a bad occupancy signal. People leave a room door cracked; pets bump it; a draft moves it. This workflow only alerts after three cheap sensors agree: the door opened, mmWave sees a person linger, and the room camera reports a person — then it sends a snapshot and stays quiet for a cooldown.
It is written as a generic room pattern. You pick the contact, presence sensor, and camera in the blueprint inputs. Do not copy someone else’s entity names.
What problem it solves
You want a push when someone walks into a room that should be empty (office hours, a shop, a spare room), without a page every time the door is left open.
How it works
- Door opens — a contact sensor fires. That starts a short confirmation window; it does not alert by itself.
- Presence confirms — an LD2410 (or similar mmWave) must go occupied and stay occupied for a few seconds. That filters a door that swung and nothing walked in.
- Camera agrees (optional but recommended) — person detection on a room camera. Treat this as a second vote, not as a map of which doorway the camera covers.
- Snapshot + notify — Home Assistant takes a camera snapshot and sends it with Pushover or Companion.
- Cooldown — a helper boolean suppresses repeats (default ten minutes). A separate condition ignores “door has been open for a long time.”
Default timings in the pack are starting points, not a schedule of when a house is empty. Tune them for your room.
Hardware notes
- Contact. Any Zigbee/Z-Wave/ESPHome binary sensor is fine. Mount it so “open” means the door actually opened.
- mmWave. LD2410 over UART or the common ESP32 breakout, flashed with ESPHome. Keep it off metal and give it a clear view of the walk-in path. Pair it with the contact so a ghost occupancy blip does not page you.
- Camera. Any Home Assistant camera entity that can snapshot and, ideally, has a person binary sensor. Indoor PTZ/fixed RTSP cams (Reolink and similar) work. Do not publish or reuse clips from a real home; test with a dummy scene.
- Notify. Pushover is simple; Companion works if phones are already enrolled.
Some of those product links are affiliates — see the disclosure on this page.
Snippet
The pack ships a blueprint. Inputs replace real entity ids:
trigger:
- platform: state
entity_id: !input presence_sensor
to: "on"
for: "00:00:15"
condition:
- condition: state
entity_id: !input cooldown_helper
state: "off"
- condition: state
entity_id: !input door_sensor
state: "on"
action:
- service: camera.snapshot
target:
entity_id: !input room_camera
# notify + set cooldown — full blueprint in the pack
Setup outline
- Add the contact, mmWave, and camera to Home Assistant.
- Create the cooldown
input_boolean(or let the pack’s helpers do it). - Import the blueprint, fill the four inputs, pick a notify service.
- Walk the loop with the room occupied and empty. Confirm: open door only → no alert; walk in → one alert; repeat within cooldown → silence.
Troubleshooting
- Alerts on door-left-open. The contact is still
onand presence flickered. Tighten the “for” on presence, or require the camera person sensor. - Missed walk-ins. mmWave is aimed at a desk, not the doorway. Move it or drop the presence
forslightly. - Snapshot missing. The camera entity must support
camera.snapshotand the notify service must accept a file. Check HA media path permissions. - ESPHome LD2410 silent. UART pins and
rx/txswapped are the usual fault; the pack YAML comments the Super Mini / generic ESP32 pin choices.
Security note
This is a room-entry pattern, not an alarm system. Do not publish lock codes, arming schedules, or which camera covers which opening. Keep those in your private config.