LD2410 Tuning & False Presence: ESPHome Sensitivity Guide

Quick Summary (TL;DR):
The HLK-LD2410 is one of the best low-cost mmWave sensors for Home Assistant because it can detect both moving people and very small/stationary human motion, but its default settings are intentionally broad and can create false presence from fans, curtains, adjacent rooms, hallways, vibrating objects or reflections. The correct fix is not to randomly reduce every sensitivity value. Current ESPHome exposes nine distance gates (G0–G8), separate move and still energy values for each gate, separate move/still thresholds, maximum detection gates and a configurable presence timeout. In engineering mode, watch the energy levels in an empty room and again with a real person at the positions you care about. For each gate, detection occurs when measured energy rises above its configured threshold. Therefore a lower threshold means higher sensitivity; a higher threshold rejects more weak reflections. The best tuning strategy is selective: keep useful near/mid gates sensitive enough to hold a seated person, raise only the gates that show persistent false energy, and reduce the maximum move/still distance gates if you never need to detect beyond a certain part of the room. Current ESPHome defaults to 0.75 m gate resolution but also supports 0.2 m resolution, and the factory threshold profile becomes progressively more sensitive at farther gates. ESPHome’s own calibration method is simple: enable engineering mode, monitor gX_move_energy and gX_still_energy, change thresholds and repeat until stable. For most rooms, tune placement first, max distance second, per-gate thresholds third, timeout last. That produces a more reliable sensor than trying to cure a poor installation entirely in software.

Materials You’ll Need

ItemWhy you need it
ESP32 development boardRuns ESPHome and exposes LD2410 engineering data
HLK-LD2410 / LD2410B / LD2410C24 GHz presence sensor with move/still gate tuning
Stable 5 V supplyReliable radar + ESP32 operation
UART wiringRequired for full ESPHome configuration and engineering mode
Home AssistantLive graphs, entity history and automation testing
ESPHome 2026.xCurrent LD2410 component and calibration entities
Phone/tabletUseful while moving around the room and watching gate energy
Optional PIR sensorUseful later for sensor fusion / instant motion response

Why LD2410 False Presence Happens

The LD2410 does not detect “a human” directly. It transmits 24 GHz FMCW radar, receives reflections, and classifies energy from different distance gates as moving or still targets.

That means anything that produces radar energy above a configured threshold can contribute to presence.

  • moving curtains
  • ceiling or pedestal fans
  • oscillating air purifiers
  • people walking in an adjacent hallway
  • movement behind thin walls or doors
  • vibrating furniture/fixtures
  • reflections from large metal surfaces
  • poor placement looking through several rooms

The sensor is doing what it was configured to do: react to sufficient energy. Tuning teaches it which distances/energy levels matter in your room.

The Most Important Rule: Threshold Direction

Measured gate energy > threshold
→ that gate can trigger detection

LOWER threshold
→ easier to exceed
→ MORE sensitive

HIGHER threshold
→ harder to exceed
→ LESS sensitive

This catches many people out. If a fan keeps creating false presence at Gate 5 and you reduce G5 still threshold from 30 to 10, you have made the problem worse.

LD2410 Gates Explained

The sensor divides distance into gates. ESPHome exposes G0 through G8 and gives each gate independent move and still thresholds.

LD2410
│
├─ G0  nearest region
├─ G1
├─ G2
├─ G3
├─ G4
├─ G5
├─ G6
├─ G7
└─ G8  farthest configurable gate

By default, ESPHome reports/configures a 0.75 m distance resolution. Current firmware also supports a 0.2 m mode. Think of a gate as a distance bin, not a precise laser-measured boundary; radar reflections and body size naturally spread energy across neighbouring gates.

0.75 m vs 0.2 m Distance Resolution

SettingAdvantageTrade-off
0.75 mSimple, default, broad room tuningLess spatial precision
0.2 mFiner near-range gate controlMore detailed tuning; verify behaviour in your room/firmware

For a normal living room or bedroom, 0.75 m is usually the easiest starting point. Use 0.2 m when you genuinely need finer distance separation, not because a smaller number sounds more accurate.

Factory Default Thresholds

Current ESPHome documents the following LD2410 defaults:

GateMove thresholdStill threshold
G0500
G1500
G24040
G33040
G42030
G51530
G61520
G71520
G81520

Notice how the move thresholds become lower at longer distance gates. That makes the factory configuration progressively easier to trigger at distance, which helps broad detection but can also pick up unwanted far-field movement.

Why G0/G1 Still Thresholds Are Zero by Default

A zero still threshold is a special factory profile choice for the nearest gates. Do not automatically copy that philosophy into every gate. The useful tuning question is always: what empty-room energy do I actually see, and what energy does a real person produce?

ESPHome UART Configuration

LD2410 communicates at a high default UART rate, so use a hardware UART where possible.

uart:
  id: ld2410_uart
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 256000
  parity: NONE
  stop_bits: 1

ld2410:
  id: ld2410_radar
  uart_id: ld2410_uart

Current ESPHome explicitly recommends hardware UART pins for the out-of-the-box 256000 baud rate.

Expose the Core Presence Entities

binary_sensor:
  - platform: ld2410
    ld2410_id: ld2410_radar

    has_target:
      name: "Room Presence"

    has_moving_target:
      name: "Room Moving Target"

    has_still_target:
      name: "Room Still Target"

These three entities tell you whether the false presence is coming from the move classifier, the still classifier, or both.

ESPHome’s Default Binary-Sensor Filter

Current ESPHome applies a 1 second settle filter to LD2410 binary sensors by default to avoid flooding Home Assistant with state changes.

If you define your own filters, that built-in default is replaced. Add the settle/delay behaviour you actually want rather than accidentally removing all smoothing.

Turn On Engineering Mode

switch:
  - platform: ld2410
    ld2410_id: ld2410_radar

    engineering_mode:
      name: "LD2410 Engineering Mode"

    bluetooth:
      name: "LD2410 Bluetooth"

Engineering mode exposes per-gate energy values. ESPHome warns that it uses more resources and should not remain enabled unnecessarily after calibration.

Expose Every Gate’s Energy

sensor:
  - platform: ld2410
    ld2410_id: ld2410_radar

    moving_distance:
      name: "LD2410 Moving Distance"

    still_distance:
      name: "LD2410 Still Distance"

    detection_distance:
      name: "LD2410 Detection Distance"

    moving_energy:
      name: "LD2410 Moving Energy"

    still_energy:
      name: "LD2410 Still Energy"

    g0:
      move_energy:
        name: "G0 Move Energy"
      still_energy:
        name: "G0 Still Energy"

    g1:
      move_energy:
        name: "G1 Move Energy"
      still_energy:
        name: "G1 Still Energy"

    g2:
      move_energy:
        name: "G2 Move Energy"
      still_energy:
        name: "G2 Still Energy"

    g3:
      move_energy:
        name: "G3 Move Energy"
      still_energy:
        name: "G3 Still Energy"

    g4:
      move_energy:
        name: "G4 Move Energy"
      still_energy:
        name: "G4 Still Energy"

    g5:
      move_energy:
        name: "G5 Move Energy"
      still_energy:
        name: "G5 Still Energy"

    g6:
      move_energy:
        name: "G6 Move Energy"
      still_energy:
        name: "G6 Still Energy"

    g7:
      move_energy:
        name: "G7 Move Energy"
      still_energy:
        name: "G7 Still Energy"

    g8:
      move_energy:
        name: "G8 Move Energy"
      still_energy:
        name: "G8 Still Energy"

Expose Every Threshold to Home Assistant

number:
  - platform: ld2410
    ld2410_id: ld2410_radar

    timeout:
      name: "LD2410 Presence Timeout"

    max_move_distance_gate:
      name: "LD2410 Max Move Gate"

    max_still_distance_gate:
      name: "LD2410 Max Still Gate"

    g0:
      move_threshold:
        name: "G0 Move Threshold"
      still_threshold:
        name: "G0 Still Threshold"

    g1:
      move_threshold:
        name: "G1 Move Threshold"
      still_threshold:
        name: "G1 Still Threshold"

    g2:
      move_threshold:
        name: "G2 Move Threshold"
      still_threshold:
        name: "G2 Still Threshold"

    g3:
      move_threshold:
        name: "G3 Move Threshold"
      still_threshold:
        name: "G3 Still Threshold"

    g4:
      move_threshold:
        name: "G4 Move Threshold"
      still_threshold:
        name: "G4 Still Threshold"

    g5:
      move_threshold:
        name: "G5 Move Threshold"
      still_threshold:
        name: "G5 Still Threshold"

    g6:
      move_threshold:
        name: "G6 Move Threshold"
      still_threshold:
        name: "G6 Still Threshold"

    g7:
      move_threshold:
        name: "G7 Move Threshold"
      still_threshold:
        name: "G7 Still Threshold"

    g8:
      move_threshold:
        name: "G8 Move Threshold"
      still_threshold:
        name: "G8 Still Threshold"

These Number entities let you tune the LD2410 live from Home Assistant instead of recompiling YAML after every small threshold change.

The Correct Calibration Process

ESPHome’s current documented calibration process is exactly the approach I recommend:

  • Enable engineering mode.
  • Monitor per-gate move and still energy.
  • Change thresholds.
  • Repeat until detection is stable.
  • Disable engineering mode afterwards.

The missing practical detail is how to decide what numbers to choose. The rest of this guide focuses on that.

Start with an Empty-Room Baseline

Leave the room genuinely empty and let normal background activity continue: fans, HVAC, curtains, aquarium pumps, traffic in hallways, etc.

Watch each G0–G8 move/still energy for several minutes.

ObservationMeaning
Most gates near zero/lowGood baseline
One far gate repeatedly highLikely unwanted distant motion/reflection
Several still gates elevated constantlyStatic reflection/environment or sensitivity too high
Energy spikes only when fan turnsFan likely source
Energy spikes when people walk in hallRadar sees through/opening toward hall

Do not tune from one snapshot. You need the peak background energy that occurs during normal empty-room conditions.

Then Measure a Real Person

Next, sit or stand in every position that the sensor must reliably detect.

  • walk into room
  • stand near entry
  • sit on sofa
  • sit at desk
  • lie in bed if bedroom
  • remain as still as realistically possible
  • turn sideways / face away

Record which gates show useful move/still energy and approximately how far above the empty-room baseline they rise.

Think in Terms of Signal Margin

Useful human energy = 55
Empty-room false peak = 22

Threshold around 30–40
→ rejects background
→ still leaves useful margin for person

Do not set a threshold one point above the empty-room peak if the real person only produces a few points more. That leaves almost no margin for temperature, orientation or furniture changes.

A Good Tuning Margin

There is no universal “correct” margin, but the principle is straightforward: choose a threshold comfortably above recurring background energy while remaining comfortably below the weakest real-human energy at that gate.

background peak < threshold < weakest useful human energy

What If Background and Human Energy Overlap?

If an unwanted reflection produces the same energy as a real person in the same gate, threshold tuning cannot perfectly separate them.

Then change the physical problem: sensor angle, mounting position, max distance, moving object, doorway line-of-sight, or combine with another sensor.

Tune Maximum Distance Before Every Gate

The easiest way to eliminate false presence beyond the useful room is often to reduce the maximum detection gate rather than manually desensitising several far gates.

ESPHome exposes separate:

  • max_move_distance_gate
  • max_still_distance_gate

Both default to Gate 8 and accept values from Gate 2 through Gate 8.

Example: Small Bedroom

Imagine the useful bed/room ends around the equivalent of Gate 5, but a corridor lies farther away in the sensor’s line of sight.

G0–G5 → room you care about
G6–G8 → hallway / adjacent movement

Set max move gate ≈ G5
Set max still gate ≈ G5
→ ignore farther range entirely

That is usually cleaner than keeping G6–G8 enabled and raising all their thresholds to extreme values.

Move and Still Distance Can Be Different

You may want moving detection to extend farther than still detection, or the opposite, depending on the room.

Example: detect someone entering from 5 m away, but only care about stationary occupancy within the main 3 m seating area.

Move Threshold Tuning

Move energy responds to larger movement. False move detections commonly come from fans, curtains, doors, pets or people outside the intended room.

If only one gate shows unwanted moving energy, raise that gate’s move threshold. Do not globally reduce sensitivity everywhere.

Still Threshold Tuning

Still detection is where the LD2410 earns its reputation. It can detect very small human movement such as breathing or posture shifts—but the same sensitivity can hold false presence from weak environmental motion.

Raise still thresholds cautiously. If you raise them too far, the sensor will detect you while walking but drop presence after you sit quietly.

The Classic Failure: Lights Turn Off While Sitting

Walking into room
→ move target detected
→ light ON

Sit still
→ still energy below threshold
→ presence clears after timeout
→ light OFF while you're still there

That means your still detection is not sensitive enough at the gate where you sit, or the sensor placement is poor for that posture.

Fixing Seated/Stationary Dropouts

  • Find the gate where the seated person appears.
  • Watch its still energy while sitting quietly.
  • Lower only that gate’s still threshold enough to create margin.
  • Check neighbouring gates because body reflections may move between them.
  • Do not compensate purely by increasing timeout to several minutes.

A 5-minute timeout can hide poor still sensitivity, but it also keeps false presence active for 5 minutes after a real false trigger.

Presence Timeout: What It Actually Does

Current ESPHome documents a default LD2410 timeout of 5 seconds. It controls how long the sensor’s presence state remains present after the target is no longer detected.

Last valid target disappears
→ timeout starts
→ presence stays ON
→ timeout expires
→ presence OFF

Timeout does not make radar detection more sensitive. It only changes how long the previous state is retained.

Good Timeout Values

Use caseStarting point
Fast hallway light2–5 s radar timeout + automation delay if needed
Normal living room5–15 s
Bedroom / seated room5–30 s if still tuning is good
Using timeout to mask bad detectionNot recommended

For comfortable lighting, I often prefer a short radar timeout and a longer Home Assistant off-delay. That separates sensor truth from user-experience timing.

Sensor Timeout vs Home Assistant Off-Delay

LD2410 timeout
→ physical detection retention

Home Assistant automation delay
→ comfort / scene behaviour

Example: keep LD2410 timeout at 5–10 s, but require the room to be clear for 2 minutes before turning lights off.

Home Assistant Off-Delay Example

alias: Living room lights off
triggers:
  - trigger: state
    entity_id: binary_sensor.room_presence
    to: "off"
    for: "00:02:00"

actions:
  - action: light.turn_off
    target:
      entity_id: light.living_room

False Presence from a Ceiling Fan

Fans are one of the most common mmWave problems because moving blades create strong periodic radar returns.

Use engineering mode to identify which distance gate spikes when the fan runs.

  • raise move threshold for that gate
  • raise still threshold too if the fan creates still-classified energy
  • change radar angle so fan is outside the strongest beam
  • reduce max distance if fan is beyond useful occupancy area

Do not simply turn sensitivity down across every gate; you may destroy seated-person detection near the sofa while solving a fan 5 m away.

False Presence from Curtains

Curtains moved by HVAC or an open window can look like a weak moving target. This is especially likely if the radar faces the window directly.

Best fixes, in order:

  • rotate/move sensor so curtain is less dominant
  • limit far detection gate if window is beyond required range
  • raise only the affected gate threshold
  • physically reduce curtain movement if practical

False Presence Through Walls

24 GHz mmWave can pass through some non-metallic materials. If the radar points toward a lightweight wall, it may see motion in the next room depending on construction and geometry.

Threshold tuning is not always the ideal fix because a person in the target room and a person behind the wall may produce overlapping gate energy.

Mount the sensor so the useful room ends before the wall in its main line of sight, or reduce max distance.

False Presence from a Hallway

An open doorway is easier for radar to see through than a wall. If the hallway sits directly in front of the module, every passer-by can become a target.

Bad placement:
LD2410 → room → open door → busy hallway

Better placement:
LD2410 → room area
             doorway off-axis

Placement is often more effective than threshold tuning here.

False Presence from an Air Conditioner

The AC itself may not be the problem. Moving louvers, curtains in the airflow, hanging objects or plants can generate radar motion.

Test the room empty with HVAC OFF and ON. If one gate only rises when HVAC operates, you have identified the environmental source.

False Presence from Pets

LD2410 is not a pet-identification sensor. A moving cat or dog can generate real radar energy.

If pet movement occurs at the same distance gate as humans, per-gate threshold tuning may not distinguish them reliably. Mounting height/angle and sensor fusion are better tools.

Mounting Height

The exact ideal height depends on the room and furniture, but the general goal is a stable line of sight across the human activity zone without pointing directly at known moving objects.

Mounting too high and steeply downward can make seated/still coverage less predictable; mounting too low may overemphasize pets/furniture movement.

Do Not Tune Before Final Mounting

Changing sensor position or angle changes which physical objects fall into each gate and how strongly they reflect radar.

Tune loose module on desk
→ mount 40 cm higher / rotated 20°
→ all your baseline energy changes

Install the sensor in its final enclosure/location first, then calibrate.

Metal and Enclosures

Do not cover the radar antenna face with metal. A plastic enclosure is normally appropriate, but even plastic geometry, mounting screws and nearby large metal objects can change reflections.

Keep the antenna side clear and test with the final enclosure closed.

Engineering Mode Should Be Temporary

Current ESPHome notes that engineering mode uses additional resources. It is a calibration tool, not something you need to leave permanently enabled once the room is tuned.

After tuning, keep the useful presence/distance entities and disable engineering mode to reduce unnecessary data/processing.

Why Home Assistant History Can Mislead During Tuning

Per-gate energy changes quickly. Recorder graphs can downsample or visually smooth short spikes. During calibration, watch live values and short-term graphs rather than relying only on long-history charts.

Build a Calibration Dashboard

A simple Home Assistant dashboard should show:

  • Engineering Mode switch
  • Presence / Moving / Still binary sensors
  • Moving / Still / Detection distance
  • Global move/still energy
  • G0–G8 move energy
  • G0–G8 still energy
  • G0–G8 thresholds
  • Max move/still gates
  • Timeout

ESPHome’s documentation even includes a large calibration card template. The key idea is to put energy and thresholds side by side so you can see why a gate is triggering.

A Faster Practical Calibration Method

Step A — Empty room
Record recurring peak energy per gate

Step B — Real person
Record weakest useful energy per gate

Step C — Set threshold between them

Step D — Test real life for 1–2 days
Adjust only problem gates

Example Calibration Table

GateEmpty still peakQuiet seated still energyPossible threshold
G284520–30
G3125525–35
G426 (fan)5235–42
G538 (curtain)42Poor margin — fix placement

This illustrates why not every problem is solvable with a threshold. At G5 the false source and real person overlap too closely.

Do Not Copy Someone Else’s Thresholds

Two identical LD2410 modules in two different rooms can need completely different values because radar reflections depend on room geometry, furniture, walls, placement and moving objects.

Internet threshold table
≠
calibration for your room

Factory defaults are a starting point; another user’s “perfect settings” are only an example.

When to Use 0.2 m Resolution

Use finer resolution if you have a specific near-range problem that broad 0.75 m gates cannot isolate—such as a moving object close to a required seating position but in a separable distance band.

After changing resolution, recalibrate. Do not assume the old threshold/gate interpretation remains ideal.

Changing Baud Rate

ESPHome exposes LD2410 UART baud rate selection. The default is 256000. If you change it from Home Assistant, the ESPHome UART configuration must also be updated before communication will resume correctly.

There is normally no reason to change baud rate just to solve false presence; false presence is a radar/tuning issue, not UART speed.

Bluetooth: Leave It On or Off?

LD2410B/C variants include Bluetooth configuration capability. ESPHome can enable/disable the sensor’s Bluetooth adapter.

Once the sensor is fully managed over UART/ESPHome, disabling Bluetooth can reduce unnecessary RF/configuration exposure, though it is not a false-presence tuning mechanism.

Factory Reset

If tuning becomes confusing, ESPHome exposes a factory-reset button for the LD2410. Resetting and starting again can be better than trying to remember dozens of experimental threshold changes.

Query Parameters

ESPHome also exposes a query-parameters button that refreshes the sensor’s current configuration. This is useful after making changes or when you want to verify the actual radar settings loaded into Home Assistant.

Complete Tuning-Oriented ESPHome YAML

uart:
  id: ld2410_uart
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 256000
  parity: NONE
  stop_bits: 1

ld2410:
  id: ld2410_radar
  uart_id: ld2410_uart

binary_sensor:
  - platform: ld2410
    ld2410_id: ld2410_radar
    has_target:
      name: "Room Presence"
      device_class: occupancy
    has_moving_target:
      name: "Room Moving Target"
    has_still_target:
      name: "Room Still Target"

sensor:
  - platform: ld2410
    ld2410_id: ld2410_radar

    moving_distance:
      name: "Moving Distance"
    still_distance:
      name: "Still Distance"
    detection_distance:
      name: "Detection Distance"
    moving_energy:
      name: "Moving Energy"
    still_energy:
      name: "Still Energy"

    g0:
      move_energy:
        name: "G0 Move Energy"
      still_energy:
        name: "G0 Still Energy"
    g1:
      move_energy:
        name: "G1 Move Energy"
      still_energy:
        name: "G1 Still Energy"
    g2:
      move_energy:
        name: "G2 Move Energy"
      still_energy:
        name: "G2 Still Energy"
    g3:
      move_energy:
        name: "G3 Move Energy"
      still_energy:
        name: "G3 Still Energy"
    g4:
      move_energy:
        name: "G4 Move Energy"
      still_energy:
        name: "G4 Still Energy"
    g5:
      move_energy:
        name: "G5 Move Energy"
      still_energy:
        name: "G5 Still Energy"
    g6:
      move_energy:
        name: "G6 Move Energy"
      still_energy:
        name: "G6 Still Energy"
    g7:
      move_energy:
        name: "G7 Move Energy"
      still_energy:
        name: "G7 Still Energy"
    g8:
      move_energy:
        name: "G8 Move Energy"
      still_energy:
        name: "G8 Still Energy"

switch:
  - platform: ld2410
    ld2410_id: ld2410_radar
    engineering_mode:
      name: "Engineering Mode"
    bluetooth:
      name: "LD2410 Bluetooth"

number:
  - platform: ld2410
    ld2410_id: ld2410_radar

    timeout:
      name: "Presence Timeout"

    max_move_distance_gate:
      name: "Max Move Gate"

    max_still_distance_gate:
      name: "Max Still Gate"

    g0:
      move_threshold:
        name: "G0 Move Threshold"
      still_threshold:
        name: "G0 Still Threshold"
    g1:
      move_threshold:
        name: "G1 Move Threshold"
      still_threshold:
        name: "G1 Still Threshold"
    g2:
      move_threshold:
        name: "G2 Move Threshold"
      still_threshold:
        name: "G2 Still Threshold"
    g3:
      move_threshold:
        name: "G3 Move Threshold"
      still_threshold:
        name: "G3 Still Threshold"
    g4:
      move_threshold:
        name: "G4 Move Threshold"
      still_threshold:
        name: "G4 Still Threshold"
    g5:
      move_threshold:
        name: "G5 Move Threshold"
      still_threshold:
        name: "G5 Still Threshold"
    g6:
      move_threshold:
        name: "G6 Move Threshold"
      still_threshold:
        name: "G6 Still Threshold"
    g7:
      move_threshold:
        name: "G7 Move Threshold"
      still_threshold:
        name: "G7 Still Threshold"
    g8:
      move_threshold:
        name: "G8 Move Threshold"
      still_threshold:
        name: "G8 Still Threshold"

button:
  - platform: ld2410
    ld2410_id: ld2410_radar
    factory_reset:
      name: "LD2410 Factory Reset"
    restart:
      name: "LD2410 Restart"
    query_params:
      name: "LD2410 Query Parameters"

select:
  - platform: ld2410
    ld2410_id: ld2410_radar
    distance_resolution:
      name: "Distance Resolution"
    baud_rate:
      name: "LD2410 Baud Rate"

A Sensible Tuning Sequence for a Living Room

  • Mount sensor permanently.
  • Start with factory defaults.
  • Enable engineering mode.
  • Run empty-room test with TV/fan/HVAC normal.
  • Reduce max gates if radar sees beyond useful room.
  • Walk/sit in every important position.
  • Raise thresholds only where false energy exists.
  • Lower still threshold only where a quiet human is missed.
  • Test overnight/daytime with normal environment.
  • Disable engineering mode after calibration.

Bedroom Tuning

Bedrooms demand strong still sensitivity because sleeping produces very little movement.

Do not over-tighten still thresholds just to remove an occasional distant false target. First limit the far range or change sensor placement.

Test lying still in realistic sleeping positions—not merely sitting upright on the bed.

Bathroom Tuning

Bathrooms are usually small, so max distance reduction is often the easiest win. A sensor that only needs 2–3 m should not be left sensitive to Gate 8 if the wall beyond contains movement.

Fans can also matter, but a ceiling extractor may fall outside the radar’s strongest forward beam depending on mounting.

Office Tuning

Office presence is a classic still-target use case: keyboard/mouse use can be intermittent and a person reading may remain nearly motionless.

Prioritize strong still sensitivity at the desk gate and reject far hallway/window movement separately.

Kitchen Tuning

Kitchens contain many moving mechanical objects: extractor fan components, curtains/blinds, people in adjoining spaces, dishwasher door movement, etc.

Use conservative max range and avoid pointing the radar straight through an open-plan corridor if you only want kitchen occupancy.

LD2410 Is Not a Position Sensor

LD2410 gives distance/gate information but not X/Y coordinates like LD2450. If your problem is “detect sofa but ignore dining table at the same distance,” per-gate tuning cannot spatially separate them if they occupy the same range band.

That is where LD2450 zones or multiple sensors become more appropriate.

When LD2450 Is Better

NeedLD2410LD2450
Detect very still personExcellentGood but different strength
Tune by distance gateYesNo same sensitivity model
X/Y positionNoYes
Desk vs sofa zonesNoYes
Up to 3 tracked peopleNoYes
Simple occupied/not occupiedExcellentGood

When Sensor Fusion Is Better Than More Tuning

Sometimes no single sensor can perfectly distinguish the event you care about.

Example: you want instant light-on when someone enters, strong stationary hold while seated, and rejection of a fan.

PIR
→ fast real motion entry

LD2410
→ still occupancy hold

Home Assistant / ESPHome
→ combine logically

The next article in this strategy covers mmWave + PIR presence fusion in detail.

Simple PIR + LD2410 Logic

Occupied = PIR motion OR LD2410 presence

Turn ON quickly on PIR
Keep ON while LD2410 says present
Turn OFF only when both are clear

This can solve problems that threshold tuning alone cannot, especially when you want both responsiveness and stationary detection.

False Presence vs False Absence

ProblemTypical tuning direction
False presenceRaise affected threshold / reduce range / improve placement
False absence while movingLower affected move threshold / improve placement
False absence while stillLower affected still threshold / improve placement
Presence stays too long after leavingReduce timeout / automation delay

Every sensitivity change trades false positives against false negatives. The goal is not “maximum sensitivity”; it is the best separation between real humans and environmental energy.

Do Not Tune Only at One Time of Day

Room conditions change. Sun heats curtains, HVAC starts, fans run, doors open, other rooms become occupied.

A calibration that is perfect at midnight may fail during daytime household activity. Test through representative daily conditions before declaring the job finished.

Home Assistant Recorder Strategy

Engineering mode creates many fast-changing entities. Once tuning is complete, you may not want years of G0–G8 energy history in Recorder.

Keep the useful final entities—Presence, Moving, Still, Detection Distance—and treat engineering energy channels as temporary diagnostics.

Why False Presence Can Appear After Months

  • furniture moved
  • new fan installed
  • curtains changed
  • sensor enclosure shifted
  • plant added
  • door now left open
  • new appliance vibrates
  • adjacent-room use changed

Radar tuning describes the room as it exists. If the physical environment changes significantly, recalibration may be appropriate.

Troubleshooting: Presence Always ON

  • Check Moving vs Still binary sensor to identify classifier.
  • Enable engineering mode.
  • Find which gate has energy above threshold.
  • Remove/stop obvious moving objects.
  • Reduce max distance if false source is beyond useful area.
  • Raise only affected threshold.
  • Reposition sensor if background and human energy overlap.

Troubleshooting: Presence Flickers ON/OFF

  • Check if real person’s energy sits just around the threshold.
  • Add threshold margin.
  • Use appropriate timeout.
  • Keep ESPHome default settle behaviour or add your own filters.
  • Check power/UART stability if raw data itself is erratic.

Troubleshooting: Still Target Never Appears

  • Confirm person is inside max still distance gate.
  • Check still energy in engineering mode.
  • Lower still threshold for relevant gate.
  • Test body orientation and sensor angle.
  • Verify sensor isn’t mounted in a poor position for the seating/bed area.

Troubleshooting: Moving Target Works but Presence Drops When Sitting

This is almost always a still-detection problem, not a move-threshold problem. Tune the still gate where the seated person is located.

Troubleshooting: False Presence Only at Night

Look for environmental changes: heating, curtains, fans, pets, adjacent-room activity, automatic appliances. Radar does not care whether the room is dark; “night-only” usually means the physical environment changes at night.

Troubleshooting: Changing Threshold Has No Effect

  • Confirm you changed the correct gate.
  • Use Query Parameters to verify setting.
  • Confirm false energy is actually in that gate/classifier.
  • Check max gate settings.
  • Restart/query if needed.
  • Make sure engineering data corresponds to current configuration.

Troubleshooting: UART Stops After Changing Baud Rate

If you change the LD2410 baud rate using its Select entity, ESPHome continues using the old UART speed until firmware/config is updated. Change the YAML baud_rate to match and reinstall.

My Recommended Final Entity Set

After calibration, a clean production Home Assistant device may expose only:

  • Room Presence
  • Moving Target
  • Still Target
  • Detection Distance
  • Presence Timeout
  • Max Move Gate
  • Max Still Gate
  • Engineering Mode switch (normally OFF)

You can keep threshold entities hidden/diagnostic so they remain available without cluttering dashboards.

My Recommended Tuning Philosophy

1. Fix placement
2. Limit unnecessary distance
3. Measure empty-room gate energy
4. Measure weakest real-person energy
5. Tune only problem gates
6. Tune still presence carefully
7. Use timeout for retention, not sensitivity
8. Validate for real daily life

Final Recommendation

The LD2410 is not a sensor that should be run at “maximum sensitivity everywhere.” Its real strength is that every distance gate can be tuned separately for moving and still targets.

Start with the factory profile, but do not accept persistent false presence as normal. Use engineering mode to discover exactly which gate and classifier is causing the problem.

If the unwanted source is farther than the useful room, reduce the maximum gate. If it occupies one specific gate, raise that gate’s threshold. If a seated person disappears, lower the relevant still threshold until you have comfortable signal margin.

Most importantly, fix physical placement before performing extreme software tuning. A radar aimed through an open door at a busy hallway is a placement problem first.

Once calibrated properly, LD2410 can provide exactly what Home Assistant lighting needs: fast moving-person detection when somebody enters and reliable still-person presence while they remain in the room, without leaving lights permanently on because a curtain moved 5 metres away.

Related ESP32 Guides

Datasheets & External Resources

All external manufacturer/framework references are collected here so the main article keeps readers inside esp32.co.uk.

Share your love