New alternative LD2410 integration

Hey everyone,

I have been running into too many problems with the bundled ld2410 ble integration and have noticed that integration seems to be abandoned for some time now so I decided to vibe code a new integration to replace it.

Check it out: GitHub - Megarushing/ha-ld2410: An alternative integration for ld2410 over bluetooth for home assistant
Open your Home Assistant instance and open a repository inside the Home Assistant Community Store.

I took the opportunity to add the missing features from the latest ld2410 protocol, including the ability for automatically calibrate from the new firmware version.

This is supposed to be used with ESPHome Bluetooth Proxy, I haven’t tried with other methods like direct bluetooth but it may work, please let me know if it does.

Please file issues with the logs if you encounter any problems, instructions on obtaining the logs are on GitHub.

Features:
:house: Occupancy – overall presence state combining motion and static data. Use this sensor for automations; it clears only when both motion and static detection are absent.

:running_man: Motion – turns on when movement is detected, making it ideal for instant motion-triggered automations.

:person_standing: Static – indicates a stationary presence so lights or HVAC can remain active even after motion stops.

:electric_plug: OUT pin – reports the current state of the device’s hardware output pin for wiring diagnostics.

:straight_ruler: Detect distance – distance at which a target is detected (cm); helps tune sensor placement.

:sun_with_face: Photo sensor – onboard light level (0‑255) for integrating ambient light into automations.

:dart: Motion gate energy sensors (0‑8) – energy level of each motion gate (0‑100%); inspect these to fine‑tune motion zones.

:ice_cube: Static gate energy sensors (0‑8) – energy level of each static gate (0‑100%); with them its possible to detect presence in individual spots of a room.

:satellite: Moving distance – distance to the closest moving target (cm).

:round_pushpin: Still distance – distance to the closest stationary target (cm).

:zap: Moving energy – strongest gate energy of a moving target, indicating motion intensity.

:battery: Still energy – strongest gate energy of a stationary target.

:chart_with_upwards_trend: Max motion gate – index of latest motion gate currently activated, default is 8, meaning 9 total gates.

:bar_chart: Max still gate – index of latest still gate currently activated, default is 8, meaning 9 total gates.

:label: Firmware version – version of the firmware running on the device; include when reporting issues.

:date: Firmware build date – build date of the installed firmware.

:framed_picture: Frame type – shows whether the sensor is sending basic or engineering frames. The integration automatically upgrades to engineering when possible

:signal_strength: Bluetooth signal – RSSI strength; move the device closer if the value is weak.

:key: New password – text field for entering a new Bluetooth password. The password must be exactly six printable ASCII characters.

:arrows_counterclockwise: Change password – button that applies the password from New password and reboots the device.

:robot: Auto sensitivities – button to calibrate gate sensitivities automatically. Leave the room before clicking it, keep it empty for 10 seconds during calibration.

:floppy_disk: Save sensitivities – button to store current gate sensitivities in the config entry. Useful for playing around with calibration without missing the sweet spot.

:inbox_tray: Load sensitivities – button to restore previously saved gate sensitivities to the device.

:recycle: Reboot device – button to reboot the device.

:level_slider: Motion gate sensitivity sliders (MG0–MG8) – sets the motion sensitivity for each gate, the lower the slider the easier it gets activated.

:control_knobs: Static gate sensitivity sliders (SG0–SG8) – number entities to set static sensitivity for each gate, the lower the slider the easier it gets activated.

:stopwatch: Absence delay – number of seconds to wait before occupancy clears, preventing false absence.

:candle: Light function – when enabled the OUT pin will only be activated if the photo sensor reading is (dimmer than/brighter than) Light sensitivity .

:last_quarter_moon: Light sensitivity – threshold for the photo sensor (0‑255) when using the light function.

:triangular_ruler: Distance resolution – select detection resolution (0.75m or 0.20m); the higher the resolution, more distant targets are detected.

:outbox_tray: OUT level – select the default level of the OUT pin (usually low becoming high when activated / usually high becoming low when activated).

3 Likes

Works well so far, no hangs unlike the official integration, thanks!
Also not flooding my BLE proxy with state updates unlike when it was connected to it as a sensor, so a win/win for me.

Maybe you could work on getting this to be the default integration?

Sure, I tried to follow their guidelines to add it in the future, but the integration is still young so I would say I need some feedback and bug reports to have it ironed out before prime time. That’s where this community comes in =)