Skip to content

Home Assistant 房间级存在检测实战:毫米波 + 贝叶斯把"人在哪"算准

"人来了开灯、人走了关灯"是最经典的智能家居场景,但要做到"房间级"——精确到人在客厅还是卧室、是坐着还是离开了——远没有一句"开灯"那么简单。很多新手用单个 PIR 人体传感器起步,结果要么人坐着不动灯就灭了,要么隔壁有人走动这屋灯也亮。这篇文章讲一套能真正把"人在哪个房间"算准的组合方案,核心是用毫米波雷达解决"是否有人",用蓝牙信标解决"是谁在哪个房间",再用贝叶斯二值传感器把它们融成一个可靠的"房间占用"状态。

1. 为什么房间级存在这么难

存在检测的本质难点是"动静分离":人大部分居家时间是静止的(看书、睡觉、刷手机),而传统 PIR 只能感知运动。再加家居环境里有一堆干扰源——宠物、窗帘、空调风、扫地机器人——任何一个单传感器都会被它们带偏。

更麻烦的是"房间边界"。一扇开着的门、一道半墙,让信号在相邻房间之间串扰。所以房间级存在不能靠"一个传感器管一间房"的朴素思路,而要靠多源信号融合 + 空间约束来收敛判断。

2. 毫米波雷达:判断是否"有人"

毫米波(mmWave)雷达是目前房间级存在最靠谱的单一传感器。它发射 24GHz/60GHz 高频电磁波,通过回波测距测速,能识别静止人体的微动(呼吸、心跳级别的位移),所以人躺着不动它也能判"有人"。

常见型号 LD2410(24GHz,便宜、社区资料多)和 LD2425P / LD2412(多点探测、能分目标)。它们通常通过串口或 GPIO 接 ESPHome 跑在 ESP32 上,再由 ESPHome 把"目标存在 / 距离 / 角度"暴露成实体:

esphome:
  name: mmwave-bedroom
esp32:
  board: esp32dev
uart:
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 256000
ld2410:
sensor:
  - platform: ld2410
    target_distance:
      name: "卧室雷达距离"
    presence:
      name: "卧室有人"
      id: bedroom_presence

要点:在 ESPHome 里设 max_distance / min_distance 把波束限制在人体活动区,避开地面宠物;用 gating_time(持续检测时间)过滤瞬时抖动,避免灯狂闪。

3. 蓝牙信标:判断"是谁、在哪个房间"

知道"这屋有人"还不够,你往往还想知道"是谁"以及"跨房间移动轨迹"。蓝牙信标方案用每个房间放的 ESP32 嗅探器接收手机/穿戴设备的 BLE 广播,谁的 MAC 被哪个房间最近收到,就判定人在哪。

最简单是用 ESPHome 的 ble_presence 或独立跑 room-assistant。每房间一个嗅探节点,Home Assistant 里得到"某设备出现在房间 X"的二值状态。注意 iOS 的私有化 MAC 会轮换,要么把轮换地址纳入跟踪逻辑,要么用固定可识别的信标(如挂在钥匙上的小 BLE tag)。穿墙衰减会干扰判定,金属多的户型要加密节点。

4. 多源融合:贝叶斯二值传感器

单个雷达误报(宠物)、单条 BLE 漂移(穿墙)都常见,但两者同时错的概率低得多。用 Home Assistant 的 bayesian 平台把多个观测合成一个"房间占用"概率:

binary_sensor:
  - platform: bayesian
    name: "卧室占用"
    probability_threshold: 0.7
    prior: 0.1
    observations:
      - platform: state
        entity: binary_sensor.bedroom_presence
        prob_given_true: 0.95
        prob_given_false: 0.1
      - platform: state
        entity: binary_sensor.phone_in_bedroom
        prob_given_true: 0.8
        prob_given_false: 0.15
      - platform: state
        entity: binary_sensor.bedroom_pir
        prob_given_true: 0.6
        prob_given_false: 0.2

贝叶斯按公式把先验和各项观测加权成综合概率,超过 probability_threshold 即判"占用"。初值凭经验给,再用实际误报/漏报的历史数据微调。它是工程近似,不是精密统计——目标是压误报、保稳定,不是追求数学精确。

5. 阈值二值传感器:更轻量的替代

如果你不想调贝叶斯概率,也可以用 threshold 平台或简单的"与/或"模板传感器。比如"雷达有人 且 5 分钟内 BLE 或 PIR 至少佐证一次"才判占用;或者"雷达连续 10 分钟无人 且 无任何信标佐证"才判离开。这种方式直观、易调试,适合传感器少、场景简单的房间。缺点是不如贝叶斯能平滑处理"证据冲突"的情况。

6. 典型自动化:从"占用"驱动设备

有了可靠的房间占用二值传感器,自动化就干净了:

  • 占用为真 → 开该房间灯(亮度按时间分档:白天 60%、夜晚 20%)。
  • 占用转假,且整屋都无人 → 关灯、关空调、切到离家模式。
  • 占用为真但持续静止超 30 分钟 → 调暗灯光、降低空调风速("在休息"暗示)。
  • 多人多房间 → 用"最后离开的房间"决定公共区域设备状态。

关键纪律:自动化以"占用状态"为唯一触发源,不要直接挂单个 PIR/雷达,否则融合带来的稳定性优势会被绕过。

7. 常见坑与误报抑制

  • 宠物误报:调雷达 max_distance/min_distance 避开地面,加 gating_time 过滤抖动,再用贝叶斯要求多源佐证。
  • 穿墙串扰:相邻房间雷达波束重叠,靠空间约束(BLE 房间归属)和贝叶斯权重压住。
  • 静止漏报:纯 PIR 必漏,mmWave 才是正解;雷达也要保证人在主波束覆盖区。
  • BLE 漂移:手机在门边时可能同时被两房间嗅探到,用"最近 N 秒最强信号"判定而非"出现即归属"。
  • 状态抖动:占用状态用 delay_off(离开延迟)做去抖,避免人短暂离开视野就触发关设备。

8. 性能与隐私

  • 雷达和 BLE 嗅探都在局域网内跑,不依赖云,延迟低、隐私好,非常适合居家。
  • ESP32 节点多了注意 Wi-Fi 信道拥挤,雷达节点尽量走有线或独立 AP。
  • 蓝牙定位数据属于家庭位置隐私,全部本地处理、不外传,符合 Home Assistant 的本地优先理念。

9. 上线后的巡检与防退化纪律

存在检测是"会悄悄退化"的自动化:一次 ESPHome 固件更新改了雷达参数、一次 BLE 嗅探器断电、一次模板传感器 YAML 缩进错,占用状态就开始乱跳。建立纪律:

  • 每周:抽查 2-3 个房间的"占用状态 vs 实际有人在"是否一致,记录误报/漏报次数。
  • 每月:回看贝叶斯各观测源的命中率,误报高的源下调 prob_given_true,漏报高的上调。
  • 每次固件/配置变更前:先在测试房间验证雷达 presence 实体与 BLE 归属正确,再全量下发;变更后立刻复核。
  • 节点失联:BLE/雷达节点离线要告警,别让它"静默失效"导致占用判断缺一手证据。
  • 红线:禁止为了"灯不灭"把占用判定改成"只要有任意一次触发就长期保持",这会重新引入 PIR 时代的所有误报。融合逻辑的稳定性来自多源约束,不是来自放宽判定。

FAQ

毫米波雷达和普通 PIR 人体感应有什么区别,为什么房间级要用它? PIR(被动红外)只看得到"温度变化",人坐着不动、盖着被子、躲在屏风后它就失效,而且它只能告诉你"这个区域有动静",分不清人是在客厅还是在隔壁。毫米波雷达发射高频电磁波测距测速,能识别静止人体(呼吸带来的微动),探测角度和距离更可控,配合多目标分辨,才能把"人在哪个房间、是否静止"判准。所以做房间级存在,mmWave 几乎是必选项,PIR 只适合做兜底或粗判。 一个房间放一个雷达就够了,还是要多传感器融合? 单雷达能解决"这个房间里有没有人",但容易误报(宠物、窗帘飘动、空调出风口)也容易漏报(人完全静止且不在主波束)。更稳的做法是融合:mmWave 负责"有人/无人",BLE 信标(手机或穿戴设备广播)负责"是谁、在哪个房间",再用贝叶斯二值传感器把两者加权合并。融合后误报率明显下降,且能对"人静坐读书半小时"这种场景稳定保持"有人"。 贝叶斯二值传感器怎么配,要准备哪些概率? 在 Home Assistant 里用 bayesian 平台,给每个观测源设一个"先验概率"和"观测到该状态时为真的概率"。例如把 mmWave 的"检测到人"设为权重较高、BLE 进入房间设为中等、PIR 触发设为较低。平台按贝叶斯公式算出综合"有人"概率,超过 probability_threshold 就判定为有人。重点是先凭经验给初值,再按实际误报/漏报用历史数据微调,而不是追求数学精确——它是工程近似,不是精密统计。 宠物会触发毫米波误报吗?怎么压? 会。猫狗的体积和微动特征接近人,低端雷达很容易把宠物当人。压误报的招数:在 ESPHome 里调 max_distance 和 min_distance 把雷达波束限制在人体常活动的高度和范围,避开地面宠物路径;用 threshold(gating time)要求连续若干秒都检测到才算"有人",过滤瞬时抖动;再叠加贝叶斯融合,让"只有雷达、没有 BLE/PIR 佐证"的情况不轻易判有人。多管齐下误报能压到可接受。 用手机蓝牙做房间定位准吗,需要装 App 吗? 手机蓝牙(BLE)做房间级定位是常见方案,精度取决于信标密度:每个房间放一个 ESP32 + BLE 嗅探(如 room-assistant 或 ESPhome 的 ble_presence),手机广播的 MAC 被哪个房间的嗅探器最近距离收到,就判定人在哪。不需要在手机装特殊 App,只要手机蓝牙开着、广播可被接收即可(iOS 的私有化 MAC 会轮换,需要把"随机地址"纳入跟踪或用固定可识别信标)。优点是低成本、不依赖云;缺点是穿墙衰减会影响判定,金属/水泥墙多的户型要加密信标。

相关文章