-
fix(mqtt): per-node HA devices use each node's own presence/motion (#872) (#918)
发布于
2026-06-02 17:26:01 +00:00 The MQTT bridge fanned out one Home-Assistant device per node (#898) but
applied the room-level aggregate classification to every node — so in a
multi-node setup a node in an empty corner inherited another node's
"present", andmotion_level: "absent"was mis-mapped to full motion
(the aggregate match fell throughSome(_) => 1.0).Each node in the sensing broadcast's
nodesarray already carries its own
classification(motion_level/presence/confidence, see
PerNodeFeatureInfo) and RSSI. Now each per-node snapshot reads that node's
own classification, deferring to the room aggregate only for fields a node
omits. Vitals (breathing/heart rate) and person count stay room-level.Extracted the JSON→VitalsSnapshot mapping into a pure, testable function
(vitals_snapshots_from_sensing_json) and added 4 unit tests covering
per-node divergence, partial-field fallback, the no-nodes aggregate path,
and the absent→zero-motion fix.Supersedes #899, which targeted the right bug but read non-existent fields
(node["motion_level"]/node["status"]instead of the nested
node["classification"]+stale).Verified: builds with
--features mqtt; new tests pass; full crate unit
suite 432 + 114 passed, 0 failed.下载附件