KENZY-LD2450 ·

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:
enable_uart=1in/boot/firmware/config.txt(orraspi-config→ Interface Options → Serial Port: login shell No, hardware Yes).- No
console=serial0,…in/boot/firmware/cmdline.txt— the kernel console must not own the port. - The kenzy user in the
dialoutgroup:sudo usermod -aG dialout $USER. - 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 classoccupancy)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)
| File | Size | Uploaded | |
|---|---|---|---|
| kenzy_ld2450-0.2.0.tar.gz | 28.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|