/

ESP32 实现在家离家判断

espresense_cover

在家、离家是两个区别较大的场景,通过设备追踪(Device Tracke)可以是判断在家离家的一个简单、可靠方式,ESPresense 是一个利用 ESP32 低成本实现设备追踪的项目。

原理

beacon_flow.jpeg

ESPresense 通过蓝牙信号强度测量距离,首先 ESP32 收集信标(如手机、手表)广播的广告包,并发布至 MQTT,Home Assistant 解析 MQTT 信息并报告给追踪传感器。大多数蓝牙设备处于隐私广播的 mac 地址都有加密,但 ESPresense 基于指纹 ID 追踪,可以稳定、可靠地跟踪设备。通过蓝牙信号强度测量距离可精确到几米,也可以追踪设备是否在某一个房间,ESP32 价格低廉,综合来说,这是一个低成本且可靠的设备追踪方案。

刷机

准备好 ESP32 后可直接在线刷机:

1.确保电脑装好驱动:

2.将 ESP32 与电脑通过数据线连接(确保 USB 数据线可用于数据传输,而不是仅用于供电的数据线),使用 Chromium 内核的浏览器打开 https://espresense.com/firmware

3.点击「连接」,选择端口,等待刷机完成。

espresense_flash

配置

刷机完成后重启 ESP32,寻找 SSID 为 ESPresense- 开头的 AP 热点并连接,

连接 AP 热点后在设置页面中,填入 WIFI 信息、房间名称及 MQTT 信息,以及多少米判断在房间、不在房间。

!espresense_setting

Android 设备

对于 Android 设备需要一个应用程序发出 BLE 广告,推荐 Home Assistant 的 HA Companion App

iOS 设备

苹果设备会发出各种连续性消息,指纹 apple:100?:*-* 通常是可见的。但如果家里有很多 iPhone,会导致附近的信息冲突并重复。

解决此问题需要从 iOS 或 WatchOS 设备获取 IRK(身份解析密钥),并添加至 ESPresense 的 Known BLE identity resolving keys 配置中:

1.浏览器打开 http://espresense 设备 IP/ui,在名称中为您的设备填写想显示的设备名称,点击「Enroll」按钮,

!espresense_enroll

2.打开 iOS 设备,在「设置」→「蓝牙」中找到 ESPresense 设备并配对,

espresense_pair

4.下载安装 MQTT Explorer,填入 MQTT 信息,在 espresense/settings 主题中可以找到 IRK 密钥。

espresense_mqtt

APPle Watch

Apple Watch 的 IRK 获取参见 https://espresense.com/beacons/apple Watch OS 相关内容。

Home Assistant 配置

Home Assistant 可以自动发现 ESPresense,

espresense_ha_mqtt

每个需要追踪的信标需要添加到 configuration.yaml 文件中,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sensor:
# 每个需要追踪的信标都需要设置
- platform: mqtt_room
device_id: "iTrack:xxxxxxxxxxxx"
name: 'ESP Keys'
state_topic: 'espresense/devices/iTrack:xxxxxxxxxxxx'
timeout: 10
away_timeout: 120
- platform: mqtt_room
device_id: "iBeacon:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3-58241"
name: 'ESP Chipolo'
state_topic: 'espresense/devices/iBeacon:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx-3-58241'
timeout: 10
away_timeout: 120

保存后重启 Home Assistant,之后就可以看到追踪的信标距离 ESP32 的距离以及是否在房间。

espresense_device

需要注意的是,若墙壁等阻隔,测量距离可能比实际距离稍远。