本帖最后由 lijunxiong2006 于 2021-7-13 10:39 编辑
之前看到Andrew J Freyer发布的项目monitor,使用蓝牙对设备进行追踪,之前试过或者了解过的用wifi、门锁、人体传感器都不太靠谱,并且本论坛大佬XCray也对这个项目赞誉有加,所以想着试试体验下,但是手里没有树莓派,买一个还挺贵的
所以就顺着这个思路在ESP32上实现了类似效果,并且使用到了esp32双核的特性(网络连接一个核,BLE扫描一个核),已经稳定运行大半年,因为我自己和家人手机都是iOS的,所以也只实现了iOS设备的追踪,当然那种放纽扣电池的BLE Tag也行。
项目地址:esp_ble_tracker
预防针:本来是自己玩的,不过在XCray的帖子求助时候提到了分享出来,所以没有考虑任何用户使用体验,没有做web设置界面(虽然想过但是工作太忙了),我只在iOS设备试过,过程需要自己编译和烧录,而且是两次,如果你没打算放弃,那我们就开始吧!
基础材料:ESP32,一台电脑,ArduinoIDE,MQTT服务,WIFI环境
步骤:
1.获取手机的irk,因为现在手机BLE广播都不会暴露真实MAC地址,所以需要irk进行换算,过程其实很简单总的来说就是:
烧录“get_irk”到ESP32-->手机上装个LightBlue(类似软件也行)连接ESP32的蓝牙进行配对-->IDE的串口监视器上就会打印出来IRK类似这样 irk:xxxxxxxxxxxxxxxxxxxxx
2.修改tracker/TrackerI.ino文件中的一些宏定义、irk信息、设备对应的用户名:
WiFiSSID:接入点名称
WiFiPWD:密码
MQTT_SERVER:MQTT的服务地址
MQTT_USER:MQTT用户名
MQTT_PWD:MQTT密码
irk[][ESP_BT_OCTET16_LEN]:在这个里面填irk,有多少设备填多少,用逗号分隔,代码里有示例
users[]:对应用户名,有多少irk,写多少用户名
当然如果你有兴趣,还有很多其他的参数可以调整,比如扫描次数,间隔时间,除抖动等等。
3.烧录tracker项目到ESP32,并且上电,如果你是开发板,上面的LED会开始闪烁,说明扫描中
也可以订阅消息主题“v1/trackeri/state”看下是否收到消息比如:
4.集成到HomeAssistant,因为是用的MQTT所以有很多方法,我只具体最简单直接的方法:
添加配置:
*把value_json['dyson']中的用户名换成你在代码中设定的用户名就行了
sensor:
- platform: mqtt
name: "Dyson"
state_topic: "v1/trackeri/state"
value_template: "{{value_json['dyson']['currentState'] | replace('1','在家') | replace('0','离家')}}"
- platform: mqtt
name: "DysonII"
state_topic: "v1/trackeri/state"
value_template: "{{value_json['dysonII']['currentState'] | replace('1','在家') | replace('0','离家')}}"
- platform: mqtt
name: "Neely"
state_topic: "v1/trackeri/state"
value_template: "{{value_json['Neely']['currentState'] | replace('1','在家') | replace('0','离家')}}"
就能在hass里看到状态信息了:
剩下如何联动就不在这里展开了,聪明的你们都可以的
p.s.
如果你们觉得有意思,并且我也有时间的话,也许我们可以:
1.添加web配置页面,直接获取irk和设置wifi连接等参数
2.支持Android设备
3.增加一些状态指示灯
esp_ble_tracker.zip
(94.54 KB, 下载次数: 298)
|