发布

  • v1574 b12662a54d

    fix(mqtt): per-node HA devices use each node's own presence/motion (#872) (#918)

    frostbyte_neo 发布于 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", and motion_level: "absent" was mis-mapped to full motion
    (the aggregate match fell through Some(_) => 1.0).

    Each node in the sensing broadcast's nodes array 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.

    下载附件