Skip to main content

KENZY-LD2450 · GitHub license Python Versions GitHub release (latest by date)

kenzy.ai · Documentation · Install

In-node mmWave presence for Kenzy: an HLK-LD2450 radar on the node's UART gives every room level presence — someone sitting still is still here, where a motion sensor sees an empty room after its timeout.

Installed, a node gains the sensor, a Room radar dashboard panel (live target view, drag-to-draw ignore zones), per-room occupancy evidence in Kenzy's presence model, and — when the MQTT integration is enabled — an occupancy entity in Home Assistant. Not installed, none of that exists: no config keys, no panel, no cost.

Install

On the server host and on each node host that has a sensor:

pip install kenzy-ld2450

(into Kenzy's environment — for the standard install that is ~/.local/share/kenzy/venv). Restart kenzy-server / kenzy-node; add-ons are discovered at process start. The dashboard's Settings → Add-ons card shows what's installed and why anything failed to load.

Wiring (Raspberry Pi GPIO UART)

The LD2450 talks 256000-baud UART (fixed by the sensor — not configurable):

LD2450 pin Pi physical pin Pi GPIO
5V 2 or 4 5V
GND 6 GND
RX 8 GPIO14 (UART TX)
TX 10 GPIO15 (UART RX)

Pi setup, once per node:

  1. enable_uart=1 in /boot/firmware/config.txt (or raspi-config → Interface Options → Serial Port: login shell No, hardware Yes).
  2. No console=serial0,… in /boot/firmware/cmdline.txt — the kernel console must not own the port.
  3. The kenzy user in the dialout group: sudo usermod -aG dialout $USER.
  4. Reboot. The sensor is then /dev/serial0 — the add-on's default device, so a standard wiring needs no configuration at all.

A USB-to-TTL adapter (CP2102 or similar, 3.3 V logic) works identically: wire the same four lines and set the device to /dev/ttyUSB0 in the panel.

Configuration

Everything is editable from the Room radar panel per node (saved into Kenzy's server-owned config and applied live — no restarts). The keys, for YAML users (addons.ld2450 in a node's config):

Key Default What it does
enabled true The per-node off switch (also a toggle on the panel). Off: this node never opens the device — no retry loop, no presence evidence — without uninstalling the add-on. Applies live. Needs Kenzy newer than 5.1.3.
device /dev/serial0 Serial device to read. replay:<file> replays a captured stream (dev/test).
mounting standard inverted for an upside-down install: mirrors left/right at the source, so the live view — and everything downstream — matches the room. Redraw ignore zones after changing it.
max_range_mm 6000 Radial range gate — targets past this are the next room, not this one.
clear_after_s 30 How long the room must read empty before it is empty. Measured default: real rooms show ~8 s gaps (occupant out of the ±60° beam) that a shorter clear falsely ends.
ignore_zones [] Rectangles (mm, [x1, y1, x2, y2]) whose targets never count — draw them on the panel's live view around a ceiling fan or a pet spot. Zoned-out targets still show (hollow) in the live view.
heartbeat_s 5 How often the node re-reports state (also the server's staleness signal). YAML-only plumbing.

Server side (configs/addons/ld2450.yaml):

Key Default What it does
stale_after_s 15 Silence after which a node's radar hold is released (a dead node must not pin its room occupied). 3× the heartbeat on purpose.

Home Assistant

With Kenzy's MQTT integration enabled (integrations.mqtt in server.yaml), each sensor-bearing node publishes — via MQTT Discovery, onto the node's existing Kenzy device in HA:

  • binary_sensor.…_radar (device class occupancy)
  • sensor.…_radar_targets, sensor.…_radar_nearest

Only nodes whose sensor has actually reported get entities; they share the node's availability, so an offline node reads unavailable, never "clear".

Compatibility

Requires the kenzy plugin seam (API v1). An incompatible pairing refuses to load visibly (Settings → Add-ons says why) and Kenzy-driven upgrades move core and add-ons as one resolver set, so pip install -U through Kenzy can't strand a broken pair.

Metadata

Release files for kenzy-ld2450 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for kenzy-ld2450 0.2.0
File Size Uploaded
kenzy_ld2450-0.2.0.tar.gz 28.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for kenzy-ld2450 0.2.0
File Interpreter ABI Platform
kenzy_ld2450-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 49.4 kB

Release files / kenzy_ld2450-0.2.0.tar.gz

Download URL kenzy_ld2450-0.2.0.tar.gz
Size 28.5 kB
Tags Source
SHA-256 checksum
How to use checksums
f175b544ab6a6999e1cacc079619d5eb198db74a61670db3b6e1088e024807fe
BLAKE2b-256 checksum
How to use checksums
574aeb1cefe599e2f8c70f92b2f47a3174c76ad1fae27e53bb96ce184eac31d4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release files / kenzy_ld2450-0.2.0-py3-none-any.whl

Download URL kenzy_ld2450-0.2.0-py3-none-any.whl
Size 20.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce20743e56df86f9d28f9d7152e7056effec6303ba4181a91b99240d74092117
BLAKE2b-256 checksum
How to use checksums
da5e8eb5138fe90f4603ccbe570ec515dd02ea14e1a9eb491b1fd9bb28dbac1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.25

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page