ESPHome Guide
Build your own sensors.
Presence sensors are the key to truly smart automation. With the right sensor, you can detect if someone is in a room - even when they’re sitting completely still. This guide helps you choose between PIR and mmWave technology.
Traditional motion sensors that detect heat changes:
| Pros | Cons |
|---|---|
| ✅ Cheap | ❌ Only motion, not stillness |
| ✅ Low power consumption | ❌ Cannot see through glass |
| ✅ Simple | ❌ False triggers from heat sources |
| ✅ Reliable for motion | ❌ Poor for office/couch use |
Best for: Hallways, stairs, entryways - places you just pass through.
Modern radar sensors that detect even minimal movement (breathing):
| Pros | Cons |
|---|---|
| ✅ Detects stationary people | ❌ More expensive |
| ✅ Works through thin walls | ❌ Can trigger on pets |
| ✅ Zone detection possible | ❌ Requires more setup |
| ✅ Distance measurement | ❌ Can detect through windows |
Best for: Living room, bedroom, office, bathroom - places where you stay.
| Sensor | Protocol | Zones | Multi-person | Price ~ | Score |
|---|---|---|---|---|---|
| Aqara FP2 | WiFi/HomeKit | ✅ 30 zones | ❌ | $85 | ⭐⭐⭐⭐⭐ |
| Everything Presence Lite | WiFi/ESPHome | ✅ 3 zones | ✅ 3 people | $50 | ⭐⭐⭐⭐⭐ |
| Apollo MSR-2 | WiFi/ESPHome | ✅ 3 zones | ✅ 3 people | $70 | ⭐⭐⭐⭐⭐ |
| Tuya ZY-M100 | Zigbee | ❌ | ❌ | $25 | ⭐⭐⭐⭐ |
| Sonoff SNZB-06P | Zigbee | ❌ | ❌ | $28 | ⭐⭐⭐⭐ |
| Aqara FP1 | Zigbee | ❌ | ❌ | $65 | ⭐⭐⭐ |
Price: ~$85
Aqara FP2 is the most user-friendly mmWave sensor:
Disadvantages:
| Spec | Value |
|---|---|
| Protocol | WiFi 2.4GHz |
| Range | 5 meters / 16 feet |
| Angle | 120° horizontal |
| Zones | Up to 30 |
| Power | USB-C 5V/1A |
| Integration | HomeKit, HA, Alexa, Google |
FP2 integrates via HomeKit Controller:
Entities:
Price: ~$50
Everything Presence Lite is the best compromise:
Disadvantages:
| Spec | Value |
|---|---|
| mmWave Sensor | HiLink LD2450 |
| Protocol | WiFi/ESPHome |
| Range | 6 meters / 20 feet |
| Angle | 60° |
| Multi-target | Up to 3 people |
| Zones | 3 pcs |
| Extra | Lux sensor, BLE proxy |
In Home Assistant you get controls for:
# Example automationautomation: - alias: "Light on in living room zone" trigger: - platform: state entity_id: binary_sensor.ep_lite_zone_1 to: "on" action: - service: light.turn_on entity_id: light.living_roomBuy: Everything Smart Technology, AliExpress
Price: ~$25
The cheapest ready-made mmWave sensor with Zigbee:
| Pros | Cons |
|---|---|
| ✅ Very cheap | ❌ No zones |
| ✅ Zigbee (no cloud) | ❌ No multi-person |
| ✅ Works with Z2M/ZHA | ❌ Limited fine-tuning |
| ✅ Compact size | ❌ Can have false triggers |
Buy: AliExpress (search “Tuya ZY-M100 mmWave”)
The most flexible and cheapest solution is to build your own sensor!
| Part | Price ~ | Where |
|---|---|---|
| HiLink LD2410C | $7 | AliExpress |
| ESP32 DevKit | $5 | AliExpress |
| USB cable + adapter | $3 | Often have |
| Dupont cables | $1 | AliExpress |
| Total | ~$16 |
| Model | Interface | Bluetooth | Recommended |
|---|---|---|---|
| LD2410 | 1.25mm connector | ❌ | Harder to solder |
| LD2410B | 1.25mm connector | ✅ | Good, but small pins |
| LD2410C | 2.54mm pins | ✅ | ⭐ Easiest to use |
ESP32 LD2410C------ -------3.3V ────► VCCGND ────► GNDGPIO16 ────► TXGPIO17 ────► RXesphome: name: presence-sensor-living-room
esp32: board: esp32dev
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
uart: tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 256000 parity: NONE stop_bits: 1
ld2410: id: ld2410_sensor
binary_sensor: - platform: ld2410 has_target: name: "Living Room Presence" has_moving_target: name: "Living Room Motion" has_still_target: name: "Living Room Still"
sensor: - platform: ld2410 moving_distance: name: "Motion Distance" still_distance: name: "Still Distance" moving_energy: name: "Motion Energy" still_energy: name: "Still Energy" detection_distance: name: "Detection Distance" light: name: "Light Level"
number: - platform: ld2410 timeout: name: "Timeout" max_move_distance_gate: name: "Max Motion Gate" max_still_distance_gate: name: "Max Still Gate"
switch: - platform: ld2410 engineering_mode: name: "Engineering Mode" bluetooth: name: "Bluetooth"Find free STL files on:
| Model | Range | Multi-target | Static | ESPHome | Price |
|---|---|---|---|---|---|
| LD2410 | 6m | ❌ | ⭐⭐⭐⭐⭐ | ✅ Official | $7 |
| LD2410B | 6m | ❌ | ⭐⭐⭐⭐⭐ | ✅ Official | $8 |
| LD2410C | 6m | ❌ | ⭐⭐⭐⭐⭐ | ✅ Official | $7 |
| LD2420 | 10m | ❌ | ⭐⭐⭐⭐ | ✅ Official | $5 |
| LD2450 | 6m | ✅ 3 targets | ⭐⭐⭐ | ⚠️ Community | $10 |
automation: - alias: "Living room light on presence" trigger: - platform: state entity_id: binary_sensor.living_room_presence to: "on" condition: - condition: numeric_state entity_id: sensor.living_room_lux below: 50 action: - service: light.turn_on entity_id: light.living_room data: brightness_pct: 80
- alias: "Living room light off when empty" trigger: - platform: state entity_id: binary_sensor.living_room_presence to: "off" for: minutes: 5 action: - service: light.turn_off entity_id: light.living_roomautomation: - alias: "Desk lamp when working" trigger: - platform: state entity_id: binary_sensor.office_zone_desk to: "on" action: - service: light.turn_on entity_id: light.desk_lamp
- alias: "TV ambient lighting" trigger: - platform: state entity_id: binary_sensor.living_room_zone_couch to: "on" condition: - condition: state entity_id: media_player.tv state: "playing" action: - service: light.turn_on entity_id: light.tv_backlight data: brightness_pct: 30Based on community tests, these sensors are not recommended:
| Sensor | Problem |
|---|---|
| Aqara FP1 | Outdated, replaced by FP2 |
| Moes ZSS-LP-HP02 | Inconsistent, many false triggers |
| Cheap Tuya clones | Varying quality, poor support |
ESPHome Guide
Build your own sensors.
Automations
Maximize your sensors.
Last updated: December 2025