The 3D floorplan could say which room somebody was in. This makes it able to
say where in the room — from a different sensor, kept deliberately separate
from the one that knows who they are.
Room-level presence comes from BLE, which cannot give coordinates: RSSI-to-
distance is noisy enough that trilateration in a house lands in the wrong
room. Coordinates come from mmWave radar (LD2450-class), which tracks moving
targets and reports x/y — and cannot say who anybody is, because it sees a
moving blob.
So the two are fused, by a rule that refuses far more often than it commits:
exactly one occupant in the room AND exactly one target in the room
-> that target is that person
anything else
-> targets stay anonymous, occupants stay unpositioned
Two people in a room are two blobs that cannot be told apart. Guessing which
is which would put a name on the wrong person, and a display that does that
occasionally is worse than one that never tries — its wrong answers are
indistinguishable from its right ones. position_ambiguous says so out loud.
Which room a target is in is computed from the polygon rather than from which
sensor saw it: a radar in an open-plan kitchen sees into the living room, and
attributing by sensor would put people through walls.
identity
floorplan_levels gains metres_wide; without it positions are not computed
and the API reports that rather than guessing a scale. New floorplan_sensors
table holds where each radar sits on the plan and which way it faces —
drawn by a human, because a wrong rotation mirrors every target it reports
and the result looks plausible rather than broken. Targets at exactly (0,0)
are dropped: that is how these radars say "nothing here", and treating it
as a detection grows a phantom person on top of every sensor.
render/floorplan-3d
A fused person is drawn at their coordinate with a footprint dot, since a
marker floated above the floor otherwise reads as further back in the room.
An unattributed target is a hollow dashed puck with a question mark — no
colour, no initial, because every visual language here for a person is
reserved for people the system can name. A radar target lights the room even
with nobody named: somebody is in there, and that the house cannot say who
is a fact about the house.
Hardware: HLK-LD2450 added to components.md, ~EUR 15-25 per room, with the
advice to buy one and check its facing before buying more.
Position maths and the fusion rule are unit-tested headlessly. No radar has
been bought, mounted or read.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FanS1vyE2gLhGkqKq6HtYj