Arrival warm-light handoff on the hall mmWave
A 60 GHz mmWave sensor in the entry hall turns on a 2400 K two-fixture scene the moment you step in, holds it for 12 minutes, and refuses to fire in daylight. Total detect-to-light latency measured at 850 ms.
# HearthNodes recipe 01 - arrival warm-light handoff
alias: "Presence - arrival warm light handoff"
id: hn_presence_arrival_warm_lights
description: "Hall mmWave arrival -> two-fixture 2400 K scene, 12 minute hold"
mode: restart
max_exceeded: silent
trigger:
- platform: state
entity_id: binary_sensor.hall_mmwave_presence
from: "off"
to: "on"
for: "00:00:03"
id: mmwave
- platform: state
entity_id: binary_sensor.hall_pir_presence
from: "off"
to: "on"
id: pir_backup
variables:
someone_home: >-
{{ is_state('person.primary','home') or is_state('person.partner','home') }}
genuinely_dark: >-
{{ state_attr('sun.sun','elevation') | float(0) < 0
or states('sensor.exterior_north_lux') | float(999) < 40 }}
condition:
- condition: template
value_template: "{{ someone_home }}"
- condition: numeric_state
entity_id: sensor.hall_illuminance
below: 120
- condition: template
value_template: "{{ genuinely_dark }}"
action:
- service: light.turn_on
target:
entity_id: light.hall_downlights
data:
brightness_pct: 35
color_temp_kelvin: 2400
transition: 1.5
- service: light.turn_on
target:
entity_id: light.coat_nook
data:
brightness_pct: 20
color_temp_kelvin: 2200
transition: 1.5
- service: timer.start
target:
entity_id: timer.arrival_hold
data:
duration: "00:12:00"
- service: counter.increment
target:
entity_id: counter.arrival_events
# Local binding retained on the Inovelli dimmer so the wall switch still works
# when the hub is unreachable. PIR is ORed in at trigger level for slow walkers.
Trigger · state
binary_sensor.hall_mmwave_presence
Hall mmWave presence changes off -> on and stays on for 3 seconds.
Step-by-step
- light.hall_downlightsRamp the two ceiling downlights to 35 % at 2400 K over 1.5 s so the change reads as a fade, not a snap.
turn_on · brightness_pct 35 · color_temp_kelvin 2400 · transition 1.5s - light.coat_nookBring the coat-nook strip up to 20 % as a wayfinding cue toward the hooks.
turn_on · brightness_pct 20 · color_temp_kelvin 2200 - timer.arrival_holdStart a single 12-minute hold timer; any new presence event restarts it rather than stacking timers.
start · duration 00:12:00 · restore false - counter.arrival_eventsIncrement a local counter so the weekly audit can show how often this fired versus how often it was overridden.
increment
Mount the sensor so it looks along the walking direction
Corner-mounting a mmWave sensor so its plane faces down the length of the hall gives a much longer usable detection corridor than aiming it at the door. Set the detection zone in the vendor app and delete any zone that overlaps the neighbouring unit's doorway; those two zones are the usual source of cross-apartment false positives.
Use a 3 second debounce, not 0
With a 0 s debounce the lights flicker when someone passes the open door in the corridor. Three seconds is the shortest value that still lights up before a normal walking pace reaches the first downlight. Measure it: stand at the door, walk in, and time the gap between the door closing and your hand reaching the switch.
Bias the scene warm and dim on purpose
2400 K at 35 % is deliberately below reading brightness. Arrival scenes that are too bright make people reach for the switch, which trains them to distrust the automation. Keep the coat nook two steps dimmer than the main fixtures so the hallway has a visible direction of travel.
Hardware
| Model | Protocol | Link | Role in this chain |
|---|---|---|---|
| Aqara FP2 | wifi |
wireless | 60 GHz mmWave presence sensor, ceiling corner mount, 3 s debounce configured in the vendor app. |
| Inovelli White Series 2-1 Dimmer | matter |
wired | Matter-over-Thread dimmer on the hall circuit; keeps a local binding so the wall switch still works with the hub down. |
| VELUX-style exterior lux probe (any Zigbee illuminance sensor) | zigbee |
wireless | North-facing outdoor lux reference used to decide whether it is genuinely dark outside. |
When it fails
If the mmWave sensor misses a slow walker, a PIR sensor on the same wall is ORed in at the trigger level. If the hub is unreachable, the Inovelli dimmer retains its Matter binding to the downlights, so the physical switch still controls the circuit. If both sensors fail, the 12-minute timer expires and the lights return to off instead of being left on.