LD2450 Zones in Home Assistant: Coordinates, Exclusion Zones & Room Automation

Quick Summary (TL;DR):
The HLK-LD2450 becomes much more useful in Home Assistant when you stop treating it as a simple presence sensor and start using its X/Y coordinates and three configurable rectangular zones. With current ESPHome, the LD2450 can expose up to three targets, each with X position, Y position, speed, angle, distance and direction, plus separate target counts for Zone 1, Zone 2 and Zone 3. The coordinate system is straightforward: X is left/right from -3000 mm to +3000 mm, while Y is distance forward from 0 to 6000 mm. That lets one radar create virtual areas such as Desk, Sofa and Dining Table without three physical sensors. ESPHome also exposes the LD2450 Zone Type setting: Detection makes the configured rectangles the areas you want to detect, while Filter uses them as exclusion areas you want the radar to ignore. This is extremely useful for doorways, hall traffic, ceiling fans, curtains or parts of an adjacent room. For most rooms, the best workflow is: mount the sensor permanently, expose the target coordinates in Home Assistant, walk around the room while watching X/Y values, write down the useful boundaries, configure the three rectangles, and then create clean binary occupancy entities from each zone target count. Do not design zones purely from a floor-plan drawing: radar field of view, reflections and real target tracks matter. Also remember that the LD2450 is primarily a position-tracking radar; if your only requirement is detecting somebody sitting almost perfectly still, the LD2410 remains easier to tune for that job.

Materials You’ll Need

ItemWhy you need it
ESP32 development boardRuns ESPHome and sends LD2450 data to Home Assistant
HLK-LD2450 radar module24 GHz multi-target X/Y tracking sensor
Stable 5 V supplyReliable radar + ESP32 operation
Jumper wires or permanent connectorUART wiring during prototype or installation
Home AssistantGraphs coordinates, builds zone automations and dashboards
ESPHome 2026.xNative LD2450 component with zone configuration and target counts
Tape measureTurns room dimensions into useful X/Y boundaries
Phone/tablet running Home AssistantVery useful while walking the room and recording live coordinates

You do not need three LD2450 modules to monitor three parts of one room. One sensor can expose three built-in rectangular zones, provided the areas fall inside its useful radar coverage.

What This Guide Adds Beyond a Basic LD2450 Setup

A normal LD2450 tutorial answers:

Is someone detected?
How many targets are there?
Where are Target 1 / 2 / 3?

A zone-based installation answers much more useful Home Assistant questions:

Is somebody at the desk?
Is the sofa occupied?
Is anybody in the dining area?
Should movement in the doorway be ignored?
Which lighting scene should run?

That difference is what makes LD2450 worth choosing over a simpler mmWave sensor.

LD2450 Coordinate System Explained

ESPHome reports target coordinates in millimetres. Think of the radar as the origin of a simple 2D floor-plan coordinate system.

             FARTHER INTO ROOM
                   +Y
                   ↑
                   │
   LEFT (-X)  ←──── LD2450 ────→  RIGHT (+X)
                   │
                   │
                 Y = 0
                SENSOR
AxisMeaningESPHome range
XLeft / right relative to sensor-3000 to +3000 mm
YDistance forward from sensor0 to 6000 mm

Negative X means left. Positive X means right. Y increases as the target moves farther away from the radar.

Coordinate Examples

Target positionApproximate coordinates
1 m left, 2 m forwardX = -1000 mm, Y = 2000 mm
Centre of room, 3.5 m forwardX = 0 mm, Y = 3500 mm
1.8 m right, 2.5 m forwardX = +1800 mm, Y = 2500 mm
Very close to sensorY near 0 mm

You do not need to calculate coordinates from the radar angle manually because ESPHome exposes X and Y directly. The angle and distance values are still useful for diagnosis.

Useful Geometry: Distance and Angle

If you want to understand what the X/Y values mean physically, ordinary geometry applies.

distance ≈ √(X² + Y²)

angle ≈ arctan(X / Y)

For example, X = 1000 mm and Y = 3000 mm represents a target roughly 3.16 m from the sensor and about 18° to the right of centre.

The Configurable Rectangle Is Bigger Than the Guaranteed Radar Field

ESPHome allows zone coordinates across a rectangular configuration space of ±3 m in X and 0–6 m in Y. That does not mean every point in that rectangle is equally detectable.

Hi-Link specifies the LD2450 at roughly ±60° azimuth with a maximum detection range around 6 m. The physical radar field therefore behaves more like a widening fan than a perfect 6 m × 6 m rectangle.

Configuration coordinate limits:
┌──────────────────────────────┐
│                              │
│        actual useful         │
│       radar coverage         │
│          /      \            │
│        /          \          │
│      /              \        │
└─────── LD2450 ───────────────┘

This is one reason a floor-plan-only zone design can disappoint. The right method is to use the room plan as a starting point and then confirm the boundaries with real target tracks.

What Is an LD2450 Zone?

A zone is a rectangle described by two corners:

x1, y1 = near-left corner
x2, y2 = far-right corner

ESPHome supports a maximum of three zones: zone_1, zone_2 and zone_3.

Zone rectangle

 (x1,y2) ┌──────────────────┐ (x2,y2)
         │                  │
         │                  │
 (x1,y1) └──────────────────┘ (x2,y1)

The names “Desk”, “Sofa” and “Dining” are names you create in Home Assistant/ESPHome. The radar itself simply knows Zone 1, Zone 2 and Zone 3.

Zone Coordinate Limits

ParameterAllowed range
x1-3000 to +3000 mm
x2-3000 to +3000 mm
y10 to 6000 mm
y20 to 6000 mm

Keep the near/far ordering logical: use the smaller Y value for the near edge and the larger Y value for the far edge.

The Best Way to Measure Your Room

Do not begin by guessing numbers in YAML. First establish a physical coordinate map.

  • Fix the LD2450 in its final orientation.
  • Mark the point directly in front of the radar as X = 0.
  • Measure left/right distances from that centre line.
  • Measure forward distance from the radar face.
  • Sketch furniture on a simple plan.
  • Use live target coordinates to confirm what the radar actually reports.

A simple handwritten grid is enough. You do not need CAD.

Example Living Room

                    FAR WALL
Y=5000  ┌─────────────────────────────┐
        │      SOFA       DINING      │
Y=3500  │   ┌────────┐   ┌────────┐   │
        │   │        │   │        │   │
Y=2000  │   └────────┘   └────────┘   │
        │                              │
Y=1000  │ DESK             DOORWAY     │
        │ ┌──────┐                     │
Y=0     └──────────── LD2450 ──────────┘
        -3000      X=0          +3000

In this example, the radar is on the near wall facing into the room. The left side of the drawing is negative X and the right side is positive X.

Example Three-Zone Layout

ZoneX1Y1X2Y2
Desk-2700500-6002600
Sofa-180025005004800
Dining600180028004800

These numbers are only an example. Your real values should come from the actual room and live coordinate testing.

First ESPHome Requirement: Correct Firmware and UART

Before debugging zones, make sure the basic LD2450 installation is sound. Current ESPHome documentation requires LD2450 firmware V2.02.23090617 or newer for proper integration.

The default UART speed is 256000 baud, with parity NONE and one stop bit. ESPHome strongly recommends a hardware UART at that speed.

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

ld2450:
  id: ld2450_radar
  uart_id: ld2450_uart

Expose the Raw Target Coordinates First

Before creating any zones, expose all three targets. You need to see how the sensor maps your actual room.

sensor:
  - platform: ld2450
    ld2450_id: ld2450_radar

    target_count:
      name: "LD2450 Target Count"

    target_1:
      x:
        name: "Target 1 X"
      y:
        name: "Target 1 Y"
      speed:
        name: "Target 1 Speed"
      angle:
        name: "Target 1 Angle"
      distance:
        name: "Target 1 Distance"

    target_2:
      x:
        name: "Target 2 X"
      y:
        name: "Target 2 Y"

    target_3:
      x:
        name: "Target 3 X"
      y:
        name: "Target 3 Y"

Current ESPHome can track a maximum of three targets. It also exposes moving/still target counts and per-target direction information.

Use Home Assistant as a Live Survey Tool

The easiest way to design zones is to open the X and Y entities on a phone while walking around the room.

  • Stand at the left edge of the desk and note X/Y.
  • Move to the right edge and note X/Y.
  • Walk to the near and far edges.
  • Repeat for sofa/dining areas.
  • Watch whether coordinates jitter when you stand still.
  • Walk through doorways and places you want to exclude.

Record a range, not one exact point. Human movement and radar tracking naturally move around by hundreds of millimetres.

Give Zones Some Margin

A common mistake is defining a sofa zone to exactly match the sofa footprint. The radar tracks the human body, not the furniture.

A person sitting on the edge, leaning forward or standing up can move the target position outside a too-tight rectangle.

Furniture footprint
┌────────────┐
│    sofa    │
└────────────┘

Better occupancy zone
┌──────────────────┐
│   ┌──────────┐   │
│   │   sofa   │   │
│   └──────────┘   │
└──────────────────┘

Start slightly wider than the furniture, then tighten the zone if adjacent traffic creates false occupancy.

Expose LD2450 Zone Coordinates to Home Assistant

ESPHome can expose each zone boundary as a Number entity. This is extremely useful because you can tune the rectangle from Home Assistant without recompiling firmware every time.

number:
  - platform: ld2450
    ld2450_id: ld2450_radar

    presence_timeout:
      name: "LD2450 Presence Timeout"

    zone_1:
      x1:
        name: "Zone 1 X1"
      y1:
        name: "Zone 1 Y1"
      x2:
        name: "Zone 1 X2"
      y2:
        name: "Zone 1 Y2"

    zone_2:
      x1:
        name: "Zone 2 X1"
      y1:
        name: "Zone 2 Y1"
      x2:
        name: "Zone 2 X2"
      y2:
        name: "Zone 2 Y2"

    zone_3:
      x1:
        name: "Zone 3 X1"
      y1:
        name: "Zone 3 Y1"
      x2:
        name: "Zone 3 X2"
      y2:
        name: "Zone 3 Y2"

After flashing, use those Number entities to enter your measured zone boundaries.

Zone Type: Disabled, Detection or Filter

ESPHome exposes the LD2450 Zone Type setting as a Select entity.

select:
  - platform: ld2450
    ld2450_id: ld2450_radar
    zone_type:
      name: "LD2450 Zone Type"
Zone TypeMeaning
DisabledZone-area filtering/detection is disabled
DetectionUse configured zones as the areas where targets should count/detect
FilterUse configured zones as areas to exclude/ignore

Detection Mode: Build Virtual Rooms Inside One Room

Use Detection when your main goal is to define useful occupied areas.

Zone 1 = Desk
Zone 2 = Sofa
Zone 3 = Dining

Target enters Desk rectangle
→ Zone 1 target count > 0
→ Desk Occupied = ON

This is the mode most people want when creating area-aware lighting and scene automations.

Filter Mode: Exclusion Zones

Use Filter when the problem is unwanted detections from one or more areas.

  • open doorway where people pass but should not occupy the room
  • adjacent hallway visible to the radar
  • moving curtains
  • fan or mechanical movement
  • part of another room through a thin partition
  • other predictable false-target area
Doorway rectangle
→ Zone Type = Filter
→ targets inside exclusion rectangle ignored by zone logic

Filter mode is particularly useful after you already have reliable room presence but one specific corner keeps creating false detections.

Important Limitation: One Zone Type Setting

The LD2450 exposes one overall zone mode: Disabled, Detection or Filter. Do not assume Zone 1 can simultaneously be a Detection zone while Zone 2 is a Filter zone using the radar’s built-in zone setting.

If you need more complicated logic — for example two occupancy zones plus one independent doorway exclusion — you can keep the radar in a useful base mode and build additional logic from raw X/Y coordinates or zone counts inside ESPHome/Home Assistant.

Expose Zone Target Counts

The most useful ESPHome entities for automations are the per-zone target counts.

sensor:
  - platform: ld2450
    ld2450_id: ld2450_radar

    zone_1:
      target_count:
        name: "Desk Target Count"
        id: desk_target_count
      moving_target_count:
        name: "Desk Moving Targets"
      still_target_count:
        name: "Desk Still Targets"

    zone_2:
      target_count:
        name: "Sofa Target Count"
        id: sofa_target_count
      moving_target_count:
        name: "Sofa Moving Targets"
      still_target_count:
        name: "Sofa Still Targets"

    zone_3:
      target_count:
        name: "Dining Target Count"
        id: dining_target_count
      moving_target_count:
        name: "Dining Moving Targets"
      still_target_count:
        name: "Dining Still Targets"

Now Home Assistant can see not only whether the whole room has a target, but how many targets are inside each configured area.

Turn Zone Counts into Clean Occupancy Binary Sensors

For automations, a binary Desk Occupied entity is usually easier than checking whether a numeric sensor is greater than zero every time.

binary_sensor:
  - platform: template
    name: "Desk Occupied"
    id: desk_occupied
    device_class: occupancy
    lambda: |-
      return id(desk_target_count).state > 0;
    filters:
      - delayed_off: 3s

  - platform: template
    name: "Sofa Occupied"
    id: sofa_occupied
    device_class: occupancy
    lambda: |-
      return id(sofa_target_count).state > 0;
    filters:
      - delayed_off: 5s

  - platform: template
    name: "Dining Occupied"
    device_class: occupancy
    lambda: |-
      return id(dining_target_count).state > 0;
    filters:
      - delayed_off: 3s

The small delayed-off filters prevent a momentary tracking drop from instantly turning lights/scenes off.

Why I Prefer Zone Counts over Target Identity

The LD2450 can expose Target 1, Target 2 and Target 3, but you should not build an automation that assumes “Target 1 is always Panos” or even “Target 1 remains the same physical person forever.”

Tracking IDs are useful diagnostic channels, not permanent human identities. For room automation, the stable question is usually:

How many targets are in this rectangle?
not
Which numbered radar track is this person?

That is why zone target counts are normally the better Home Assistant abstraction.

Multi-Target Tracking

ESPHome exposes a switch for the LD2450 multi-target mode.

switch:
  - platform: ld2450
    ld2450_id: ld2450_radar

    multi_target:
      name: "LD2450 Multi Target Tracking"

Keep multi-target tracking enabled when the room can contain multiple people and the whole reason for using LD2450 is area-aware occupancy.

Example: Two People in Different Zones

Person A at desk
→ Desk Target Count = 1

Person B on sofa
→ Sofa Target Count = 1

Whole room Target Count = 2

That allows Home Assistant to run desk lighting and sofa lighting independently even though both occupants are seen by the same radar.

Example: Two People in the Same Zone

Desk Target Count = 2
Sofa Target Count = 0
Dining Target Count = 0

For most automations you only need “count > 0,” but the actual count can be useful for dashboards, room analytics or more advanced scenes.

Home Assistant Automation: Desk Lamp

alias: Desk lamp from LD2450 zone
triggers:
  - trigger: state
    entity_id: binary_sensor.desk_occupied
    to: "on"

actions:
  - action: light.turn_on
    target:
      entity_id: light.desk_lamp

mode: restart

For a real installation, combine this with a lux condition so the desk lamp does not turn on in bright daylight.

Home Assistant Automation: Turn Desk Lamp Off

alias: Desk lamp off when desk clears
triggers:
  - trigger: state
    entity_id: binary_sensor.desk_occupied
    to: "off"
    for: "00:02:00"

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

A longer Home Assistant off-delay is useful for human comfort. The short ESPHome delayed-off handles radar jitter; the longer Home Assistant delay handles normal occupancy behaviour.

Two Different Delays Solve Two Different Problems

DelayPurpose
ESPHome 2–5 s delayed_offSmooth tiny radar/track dropouts
Home Assistant 1–5 min off delayPrevent lights switching off during normal brief occupancy gaps

Sofa Automation Example

alias: Sofa occupied evening scene
triggers:
  - trigger: state
    entity_id: binary_sensor.sofa_occupied
    to: "on"

conditions:
  - condition: sun
    after: sunset

actions:
  - action: scene.turn_on
    target:
      entity_id: scene.living_room_evening

Dining Zone Example

The dining zone can control different behaviour from the sofa zone even though both areas are in one open-plan room.

Dining occupied + lux low
→ dining pendant ON

Sofa occupied + TV ON
→ movie scene

Desk occupied
→ desk task lighting

This is the exact kind of logic that a simple PIR or one-bit presence sensor cannot provide.

A Stronger Whole-Room Occupancy Entity

You may still want one simple “Living Room Occupied” entity. Build it from the useful zones rather than from every radar return.

binary_sensor:
  - platform: template
    name: "Living Room Occupied"
    device_class: occupancy
    lambda: |-
      return id(desk_target_count).state > 0 ||
             id(sofa_target_count).state > 0 ||
             id(dining_target_count).state > 0;
    filters:
      - delayed_off: 10s

This gives you a clean whole-room entity that automatically ignores anything outside your chosen occupancy areas.

Doorway Exclusion: Two Ways to Do It

Doorways are a classic problem. Someone walks past the room and the radar briefly sees them.

Method 1: Built-in Filter mode. Define the doorway as one of the rectangles and set Zone Type to Filter.

Method 2: Detection zones only. Define Desk/Sofa/Dining rectangles and build whole-room occupancy only from those zones. A target that passes through an unimportant doorway area never satisfies the useful occupancy logic.

For Home Assistant, Method 2 is often conceptually cleaner because it asks “where do I care about occupancy?” rather than trying to model every unwanted space.

How to Build a Doorway Filter Rectangle

Suppose the doorway sits 1.8–2.8 m to the right of the radar and extends only 0–1.2 m into the room.

BoundaryExample value
X1+1800 mm
Y10 mm
X2+2800 mm
Y21200 mm

Walk through the doorway several times and enlarge the rectangle until the unwanted track falls fully inside it.

Zone Overlap

Avoid overlapping zones unless you have a deliberate reason. A target inside overlapping rectangles can logically contribute to more than one zone.

Bad accidental overlap:
Desk ┌───────────────┐
     │        ┌──────────── Sofa
     │ overlap│
     └────────┘

One person can appear to occupy both logical areas.

Leave a small neutral gap if you want mutually exclusive desk/sofa states.

But Do Not Make the Neutral Gap Too Large

A huge gap creates another problem: the person walks between zones and your whole-room occupancy turns off briefly.

The right amount depends on the automation. For lighting, a small overlap may actually be preferable to a dead gap. For “which chair is occupied?” logic, non-overlapping zones are cleaner.

Think in Terms of Automation Intent

GoalZone design
Keep room lights onBroad zones with tolerance; gaps are bad
Detect exact seating areaTighter non-overlapping zones
Ignore corridor trafficDetection zones away from doorway or Filter rectangle
Count people per areaNon-overlapping zones strongly preferred

Target Jitter Near Zone Boundaries

A target near the edge of a rectangle may move in and out of the zone even when the person is not intentionally changing areas.

This can happen because of body motion, radar resolution, changing reflection points or simply leaning in a chair.

  • Give the zone margin around the real activity area.
  • Use delayed-off filtering.
  • Do not put a critical boundary through the middle of a chair.
  • Watch raw coordinates for several real sessions before finalising.

Why Coordinates Sometimes Jump

mmWave radar does not see a human as a precise GPS point. It sees radar reflections from a moving body and estimates a track from those reflections.

Different parts of the body can dominate the return at different moments. That is why a person standing still around X = 1000 mm may not produce exactly 1000 on every update.

Still Targets vs Moving Targets

Current ESPHome exposes total, moving and still target counts globally and per zone. This gives you more control than older LD2450 integrations.

However, do not confuse “still target output exists” with “LD2450 is automatically better than LD2410 at motionless occupancy.” LD2450’s main advantage remains position and multi-target tracking. LD2410’s architecture and tuning model remain extremely strong for detecting small/stationary human presence.

When to Combine LD2450 and LD2410

For a high-value room where both where and stillness matter, using both sensors can be justified.

LD2450
→ where are people?
→ desk / sofa / dining zones

LD2410
→ is somebody still present?
→ micro-motion / stationary confidence

You can then use LD2450 for zone-specific actions and LD2410 as a whole-room “do not turn everything off yet” safety net.

When PIR + LD2450 Is Better

A PIR can react very quickly to somebody entering the room, while LD2450 provides the richer position information after the target is established.

PIR ON
→ immediate room light

LD2450 target enters Desk
→ desk scene

LD2450/other presence remains
→ keep room occupied

This combination is especially useful where instant light-on response matters.

Use the Presence Timeout Carefully

ESPHome exposes an LD2450 presence_timeout Number entity. The default is 5 seconds.

The important nuance is that this timeout applies to the presence binary sensor states; it does not delay target details or target-count sensors.

That means changing the radar presence timeout is not the same thing as adding a delayed-off filter to your zone-derived binary sensors.

ESPHome Already Throttles LD2450 Updates

Current ESPHome applies default filters to LD2450 data to avoid flooding Home Assistant. Binary sensors use a one-second settle filter by default, while numeric target sensors are throttled/held at roughly one-second intervals unless you override the filters.

For room automation, one-second coordinate updates are usually more than enough. Removing all filtering can create a huge amount of state traffic without making the lights noticeably smarter.

Do Not Log Every Coordinate Forever

Three targets × X/Y/speed/angle/distance plus zone counts can create a lot of Home Assistant recorder data.

Once zoning is tuned, consider which diagnostic entities actually need long-term history. Your automation may only need:

  • Desk Occupied
  • Sofa Occupied
  • Dining Occupied
  • Whole Room Occupied
  • Target Count

Raw X/Y entities can remain available for troubleshooting without necessarily being the centre of your dashboard/history strategy.

Placement Matters More Than Perfect YAML

The best zone definitions cannot compensate for poor physical placement.

  • Mount the radar rigidly so it cannot vibrate.
  • Face it into the useful activity area rather than across several rooms.
  • Avoid unnecessary view through thin walls/doors if possible.
  • Keep the radar face clear of metal.
  • Test curtains, fans and moving objects in the real room.
  • Do final zoning only after the enclosure and permanent mounting are fixed.

Moving the sensor 30 cm or rotating it a few degrees changes the entire coordinate map.

Sensor Rotation Completely Changes X/Y

The X/Y coordinates are relative to the radar, not to your house.

Rotate radar 20°
→ room furniture did not move
→ coordinate system DID move

That is why you should not tune zones while the module is lying loose on a desk and then mount it differently on a wall.

Do Not Put the Radar at an Extreme Angle

Zone automation is easiest when the sensor faces the area roughly straight on. An extreme diagonal installation compresses some useful floor-plan areas into awkward coordinate boundaries and pushes targets toward the edge of the field of view.

Use a Floor-Plan Screenshot in Home Assistant

A practical tuning trick is to keep a simple room sketch beside the raw X/Y sensor cards. You can then mark the coordinates where tracks appear while walking around.

You do not need a fancy custom radar map to get useful results. A table of measured boundary coordinates is often faster and easier to maintain.

What About Fancy Live X/Y Radar Maps?

Live radar-map cards can be excellent for tuning, but they are not required for the final automation.

The most robust final setup is usually boring: three zone counts converted into three occupancy entities.

Fancy graph = useful for setup
Simple binary occupancy = useful for daily automation

Example Complete ESPHome Zone Configuration

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

ld2450:
  id: ld2450_radar
  uart_id: ld2450_uart

binary_sensor:
  - platform: ld2450
    ld2450_id: ld2450_radar
    has_target:
      name: "Living Room Presence"
    has_moving_target:
      name: "Living Room Moving Target"
    has_still_target:
      name: "Living Room Still Target"

  - platform: template
    name: "Desk Occupied"
    device_class: occupancy
    lambda: |-
      return id(desk_target_count).state > 0;
    filters:
      - delayed_off: 3s

  - platform: template
    name: "Sofa Occupied"
    device_class: occupancy
    lambda: |-
      return id(sofa_target_count).state > 0;
    filters:
      - delayed_off: 5s

  - platform: template
    name: "Dining Occupied"
    device_class: occupancy
    lambda: |-
      return id(dining_target_count).state > 0;
    filters:
      - delayed_off: 3s

sensor:
  - platform: ld2450
    ld2450_id: ld2450_radar

    target_count:
      name: "Living Room Target Count"

    target_1:
      x:
        name: "Target 1 X"
      y:
        name: "Target 1 Y"

    target_2:
      x:
        name: "Target 2 X"
      y:
        name: "Target 2 Y"

    target_3:
      x:
        name: "Target 3 X"
      y:
        name: "Target 3 Y"

    zone_1:
      target_count:
        name: "Desk Target Count"
        id: desk_target_count

    zone_2:
      target_count:
        name: "Sofa Target Count"
        id: sofa_target_count

    zone_3:
      target_count:
        name: "Dining Target Count"
        id: dining_target_count

number:
  - platform: ld2450
    ld2450_id: ld2450_radar

    presence_timeout:
      name: "LD2450 Presence Timeout"

    zone_1:
      x1:
        name: "Desk X1"
      y1:
        name: "Desk Y1"
      x2:
        name: "Desk X2"
      y2:
        name: "Desk Y2"

    zone_2:
      x1:
        name: "Sofa X1"
      y1:
        name: "Sofa Y1"
      x2:
        name: "Sofa X2"
      y2:
        name: "Sofa Y2"

    zone_3:
      x1:
        name: "Dining X1"
      y1:
        name: "Dining Y1"
      x2:
        name: "Dining X2"
      y2:
        name: "Dining Y2"

select:
  - platform: ld2450
    ld2450_id: ld2450_radar
    zone_type:
      name: "LD2450 Zone Type"

switch:
  - platform: ld2450
    ld2450_id: ld2450_radar
    multi_target:
      name: "LD2450 Multi Target Tracking"

After flashing, enter your measured coordinates through the Number entities and set the Zone Type appropriate to your design.

Troubleshooting: Zone Always Shows Zero

  • Confirm raw target count is greater than zero.
  • Confirm target X/Y actually passes through the rectangle.
  • Check Zone Type is not Disabled.
  • Verify x1/x2 and y1/y2 boundaries.
  • Check the target lies inside the physical radar field, not just the allowed coordinate numbers.
  • Confirm LD2450 firmware meets the current ESPHome requirement.

If raw coordinates are good but the zone count is always zero, the issue is almost certainly zone configuration rather than UART wiring.

Troubleshooting: Zone Is Occupied When Nobody Is There

  • Watch raw X/Y to identify where the false track sits.
  • Check fans, curtains, doors and vibration.
  • Look for activity behind thin partitions.
  • Reduce the zone rectangle rather than immediately changing every automation.
  • Try Filter mode if the false-target area is stable and predictable.

The advantage of a tracking radar is that false detections have coordinates. Use that information.

Troubleshooting: Person Moves Between Target 1 and Target 2

Do not use target numbers as permanent identities. Build automations from zone counts or physical X/Y position.

Troubleshooting: Sofa Occupancy Drops While Sitting

  • Make the sofa rectangle larger around the human seating position.
  • Add a few seconds of delayed-off filtering.
  • Check whether the person’s track drifts outside the rectangle when leaning/reclining.
  • If true stationary presence is the primary requirement, consider LD2410 or sensor fusion.

The fix is often zone geometry, not “increase sensitivity.”

Troubleshooting: People in the Hall Trigger the Room

This is exactly what Detection zones or a doorway Filter zone are for. Watch the hallway track, record its coordinates and remove it from the logical occupied area.

Troubleshooting: Coordinates Look Mirrored

Remember that X is relative to the sensor’s left/right orientation. If you are standing behind the module while looking toward the room, your visual left/right reference may be opposite to the target’s coordinate reference.

Walk deliberately along one side of the room and confirm whether ESPHome reports negative or positive X before drawing the entire map.

Troubleshooting: Coordinates Changed After Installation

If the final enclosure changes the module angle, the coordinate system changes too. Retune after permanent mounting.

Best Rooms for LD2450 Zones

RoomWhy zones are useful
Living roomSofa / dining / desk / TV-area scenes
OfficeDesk occupancy vs walking area
Open-plan kitchenCooking zone vs dining zone
BedroomBedside / dressing / doorway logic, with caution for still presence
Home cinemaSeating area occupancy and lighting scenes
Large roomDifferent functional areas from one radar

Where LD2450 Zones Are Less Useful

  • tiny room where simple occupied/not occupied is enough
  • spaces where completely motionless presence is the only priority
  • rooms with difficult reflections that cannot be solved by placement
  • outdoor use
  • installations where the sensor must look through several partitions

Do not choose LD2450 just because “three targets” sounds more advanced. Use it when the positional data solves a real automation problem.

LD2450 vs LD2410 for Home Assistant

NeedBetter choice
Simple reliable room presenceLD2410
Stationary/micro-motion focusLD2410
X/Y coordinatesLD2450
Desk/Sofa zonesLD2450
Up to three tracked targetsLD2450
Detailed distance-gate tuningLD2410

LD2450 vs RD-03D for Zones

RD-03D is the closest alternative in concept because it also provides multi-target X/Y tracking and now has native ESPHome support.

LD2450 still has the more established Home Assistant zoning ecosystem and current ESPHome exposes its built-in three-zone configuration directly. That makes LD2450 the easier starting point for a zone-based room automation project.

Best Practical Setup

One LD2450 on fixed wall
        ↓
ESP32 hardware UART @ 256000
        ↓
ESPHome raw X/Y + three zone counts
        ↓
Desk / Sofa / Dining occupancy binary sensors
        ↓
Home Assistant lighting, scenes and HVAC logic

My Recommended Tuning Workflow

  • Start with raw tracking only.
  • Mount the sensor permanently.
  • Walk the real room and record X/Y.
  • Create broad rectangles.
  • Watch several days of normal use.
  • Tighten only where false occupancy occurs.
  • Add short ESPHome delayed-off filters.
  • Add longer Home Assistant comfort delays.
  • Hide/ignore unnecessary diagnostic entities once stable.

Final Recommendation

The LD2450’s real Home Assistant advantage is not “mmWave detects people.” Many sensors can do that. Its advantage is that one inexpensive radar can turn a single room into several logical occupancy areas.

LD2410 asks:
"Is somebody here?"

LD2450 can ask:
"Where are they?"

Use the coordinate system as a measurement tool, not as a theoretical drawing exercise. Install the radar, watch real X/Y tracks, define the three useful rectangles and convert the zone counts into simple occupancy entities.

For most users, the cleanest design is Detection zones for the areas that actually matter rather than trying to model every square metre of the room. Use Filter mode when one repeatable false-target area needs to be excluded.

Once tuned, the automation can become genuinely location-aware: the desk lamp follows the desk, the evening scene follows the sofa, the dining pendant follows the table, and corridor traffic can be ignored — all from one ESP32 and one LD2450.

Related ESP32 Guides

Datasheets & External Resources

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

Share your love