跳转到内容

ESP32 低功耗蓝牙设备

ble_presence 二进制传感器平台允许您跟踪低功耗蓝牙设备的存在。

WARNING

ESP32 上的 BLE 软件栈消耗设备上大量的 RAM。

如果您在设备配置中包含太多额外组件,很可能发生崩溃语音助手 和其他音频组件等内存密集型组件最可能导致问题。

# 示例配置条目
esp32_ble_tracker:
binary_sensor:
# 基于 MAC 地址的存在检测
- platform: ble_presence
mac_address: XX:XX:XX:XX:XX:XX
name: "ESP32 BLE 跟踪器 Google Home Mini"
min_rssi: -80dB
# 基于身份解析密钥 (IRK) 的存在检测
- platform: ble_presence
irk: 1234567890abcdef1234567890abcdef
name: "ESP32 BLE 跟踪器 iPhone"
# 基于 BLE 服务 UUID 的存在检测
- platform: ble_presence
service_uuid: '11aa'
name: "ESP32 BLE 跟踪器测试服务 16 位"
timeout: 45s
# 基于 iBeacon UUID 的存在检测
- platform: ble_presence
ibeacon_uuid: '68586f1e-89c2-11eb-8dcd-0242ac130003'
name: "ESP32 BLE 跟踪器测试服务 iBeacon"

NOTE

服务 UUID 可以是 16 位长,如示例所示,但也可以是 32 位长,如 1122aaff,或 128 位长,如 11223344-5566-7788-99aa-bbccddeeff00

  • mac_address (可选, MAC 地址): 此二进制传感器要跟踪的 MAC 地址。请注意,mac_addressirkservice_uuidibeacon_uuid 中必须恰好存在一个。

  • irk (可选, 16 字节十六进制字符串): 此二进制传感器要跟踪的身份解析密钥 (IRK)。请注意,mac_addressirkservice_uuidibeacon_uuid 中必须恰好存在一个。

  • service_uuid (可选, 字符串): 16 位、32 位或 128 位 BLE 服务 UUID,如果设备随机化 MAC 地址,可以跟踪它。请注意,mac_addressirkservice_uuidibeacon_uuid 中必须恰好存在一个。

  • ibeacon_uuid (可选, 字符串): 用于标识需要跟踪的信标的 通用唯一标识符。请注意,mac_addressirkservice_uuidibeacon_uuid 中必须恰好存在一个。

  • ibeacon_major (可选, 整数): 需要跟踪的信标的 iBeacon 主标识符。通常用于分组信标,例如对同一建筑中的所有信标进行分组。

  • ibeacon_minor (可选, 整数): 需要跟踪的信标的 iBeacon 次标识符。通常用于标识 iBeacon 组内的信标。

  • min_rssi (可选, 整数): 组件报告设备存在的最小 RSSI 级别。

  • timeout (可选, 时间): 最后检测到设备后发布不存在状态的延迟。默认为 5 分钟。

  • 所有其他选项来自 二进制传感器

要为特定 BLE 信标设置二进制传感器,您首先需要知道要跟踪的 MAC 地址。大多数设备在某个设置菜单中显示此信息。但是,如果您不知道 MAC 地址,可以使用不带任何二进制传感器的 esp32_ble_tracker 集线器并阅读日志来查看发现的低功耗蓝牙设备。

# 用于查找 MAC 地址、服务 UUID、iBeacon UUID 和标识符的示例配置条目
esp32_ble_tracker:
on_ble_advertise:
- then:
logger:
level: VERY_VERBOSE

使用上面的配置,首先,您应该在启动时看到 Starting scan... 调试消息。然后,当发现 BLE 设备时,您应该看到类似 Parse Result: 的消息以及有关其 MAC 地址、地址类型、广播名称、服务 UUID、iBeacon UUID、iBeacon 主标识符和次标识符、BLE 制造商 ID 和数据、RSSI 以及其他有用的调试数据的信息。您可以找到 制造商 ID 官方列表 来帮助找到您的设备。请注意,这仅在设置期间有用,之后应指定较少的详细日志级别。如果您看不到这些消息,不幸的是您的设备当前不受支持。

请注意,在日志中显示 RANDOM 地址类型的设备可能使用称为可解析私有地址的隐私功能来避免 BLE 跟踪。由于它们的 MAC 地址周期性变化,无法通过 MAC 地址跟踪它们。但是,如果您知道设备的”身份解析密钥” (IRK),您可以使用 IRK 检查生成的私有 MAC 地址是否属于该设备。

ESPHome 不支持获取密钥。目前您必须使用 ESPresense 项目中描述的选项之一:https://espresense.com/beacons

或者您可以:

  • 创建一个 BLE 信标,设置唯一的 16 位、32 位或 128 位服务 UUID,并基于此跟踪您的设备。确保不要选择 GATT 服务 UUID,否则通用服务可能会给您不正确的跟踪结果。

  • 创建一个 iBeacon 并基于其 iBeacon UUID 跟踪它。如果需要额外的过滤,您还可以选择指定主标识符和次标识符进行匹配。ESPHome 通过 ESP32 低功耗蓝牙信标 组件提供此功能。几个 iOS 和 Android 应用程序,包括开源的 Home Assistant 移动应用程序,也提供创建 iBeacon 的方法。