『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
楼主: lijunxiong2006

【经济实惠】使用ESP32追踪设备实现回家离家自动化

  [复制链接]

19

主题

598

帖子

4051

积分

版主

Rank: 7Rank: 7Rank: 7

积分
4051
金钱
3438
HASS币
40
发表于 2021-8-15 23:36:43 | 显示全部楼层
XCray 发表于 2021-8-15 19:17
是吗?我没实际用过安卓设备追踪,还真不知道有这种长期没解决的bug,按说不应该啊。。。 ...

另外,我尝试了openmqttgateway的蓝牙固件,这个固件是可以发现beacon设备的,能够publish蓝牙设备的uuid、mac地址等。
但,我的手机每次蓝牙重启开启时,虽然beacon的uuid不变,但其mac地址会变,导致publish的mqtt主题也会变,导致实际上无法用于追踪…坑爹啊
实际上这个问题变成了,如果广播一个固定的蓝牙mac地址?
回复

使用道具 举报

39

主题

2049

帖子

7697

积分

元老级技术达人

积分
7697
金钱
5633
HASS币
110
发表于 2021-8-16 13:43:24 | 显示全部楼层
whxciotw 发表于 2021-8-15 23:36
另外,我尝试了openmqttgateway的蓝牙固件,这个固件是可以发现beacon设备的,能够publish蓝牙设备的uuid ...

LZ的这个好像就是解决ios设备蓝牙MAC地址的问题
提取了那个东西相当于不变的?
回复

使用道具 举报

19

主题

598

帖子

4051

积分

版主

Rank: 7Rank: 7Rank: 7

积分
4051
金钱
3438
HASS币
40
发表于 2021-8-16 14:05:52 | 显示全部楼层
ghostist 发表于 2021-8-16 13:43
LZ的这个好像就是解决ios设备蓝牙MAC地址的问题
提取了那个东西相当于不变的? ...

是的。
早晨又看了遍楼主的帖子和引用的链接,意思是iphone蓝牙的随机mac地址虽然是每次进行变化,但是随机mac也是基于蓝牙规范,是使用固定mac+key进行生成的。这个key就是irk。
虽然是android,只要使用标准的蓝牙规范,irk及其解析可能是通用的。但不知楼主的固件,除了这一点,能否适用于安卓设备的追踪。
我有空了搞一搞、看看安卓情况,毕竟arduino没怎么玩过,平时都是直刷esphome这些
回复

使用道具 举报

1

主题

36

帖子

305

积分

论坛技术达人

积分
305
金钱
264
HASS币
20
 楼主| 发表于 2021-8-20 11:09:57 | 显示全部楼层
yylwhy 发表于 2021-8-6 12:07
mark  有空了就搞一下.手里刚好有闲置的esp32的板

2021.8.9

恩发热量确实有点大,我分析有两个原因
1.双核都在工作
2.扫描频率有点高,我会在后期更新中增加通过mqtt消息触发一次扫描的功能
回复

使用道具 举报

1

主题

36

帖子

305

积分

论坛技术达人

积分
305
金钱
264
HASS币
20
 楼主| 发表于 2021-8-20 11:15:35 | 显示全部楼层
whxciotw 发表于 2021-8-16 14:05
是的。
早晨又看了遍楼主的帖子和引用的链接,意思是iphone蓝牙的随机mac地址虽然是每次进行变化,但是随 ...

是的没错,你说的很对,原理上是这样的,但是我测试下来的实际情况是(仅限于我手里的测试机)
1.Android可以获取到irk,但是在扫描结果里用这个irk找不到对应的mac
2.我用的Android测试机不会一直进行广播
所以我觉得Android最终实现的方式还是需要通过扫描蓝牙名称不过这样会有些局限性,最终效果我也没试过
回复

使用道具 举报

1

主题

36

帖子

305

积分

论坛技术达人

积分
305
金钱
264
HASS币
20
 楼主| 发表于 2021-8-20 11:17:19 | 显示全部楼层
firewater 发表于 2021-8-7 21:35
重新又试了一遍,get IRK,烧录到esp32中,mqtt接受到的状态总是0,有什么建议么? ...

可以把debug打开,然后日志po一下给我,我帮你看看
回复

使用道具 举报

1

主题

36

帖子

305

积分

论坛技术达人

积分
305
金钱
264
HASS币
20
 楼主| 发表于 2021-8-20 11:23:16 | 显示全部楼层
seon 发表于 2021-8-6 10:17
大神,问下,Apple Watch可以用吗?如果可以,要怎么查看irk值啊?

硬件上是支持的,但是我暂时没找到watch和esp32配对的方法
回复

使用道具 举报

1

主题

36

帖子

305

积分

论坛技术达人

积分
305
金钱
264
HASS币
20
 楼主| 发表于 2021-8-20 11:27:35 | 显示全部楼层
XCray 发表于 2021-8-13 09:35
这个和monitor一样,都需要考虑一个模块无法覆盖全屋的问题。

可以从两个方向改善:

没错,如果房间多,会出现信号不稳定的情况
最好是一个房间放一个,多个模块对同一个设备共同判断综合起来会更稳定
我有时间了更新一下,加入一个通过mqtt消息触发扫描的功能,一是能降低功耗二是可以在有需要的时候再判断减少误判的情况
回复

使用道具 举报

1

主题

36

帖子

305

积分

论坛技术达人

积分
305
金钱
264
HASS币
20
 楼主| 发表于 2021-8-20 11:30:12 | 显示全部楼层
ghostist 发表于 2021-8-13 09:07
晚上在家,多次改变,感觉还是得设个延迟判断

代码中有个定义
USER_STATE_CHANGE_MAX_COUNT
可以将这个常量改大些
好处是可以减少失联后立即改变状态的问题
副作用是真正离开后状态变化延迟会高,其实就是你提到的延迟判断
总时间是扫描时长*USER_STATE_CHANGE_MAX_COUNT,希望能帮到你
回复

使用道具 举报

1

主题

189

帖子

1927

积分

金牌会员

Rank: 6Rank: 6

积分
1927
金钱
1738
HASS币
0
发表于 2021-8-21 02:39:43 | 显示全部楼层
lijunxiong2006 发表于 2021-8-20 11:17
可以把debug打开,然后日志po一下给我,我帮你看看

dev mode设置为1,在com口输出如下,下面状态改变是因为关闭ble,然后打开。然后就一直改变成状态0

14:33:39.940 -> [startBLEScan] start Scan...
14:33:54.958 -> [startBLEScan] scan finish device count-->23
14:33:54.958 -> [scanResultHandle]start process...
14:33:55.004 -> [scanResultHandle]User1-->1
14:33:55.004 -> [scanResultHandle]User2-->0
14:33:55.004 -> {"User1":{"currentState":1,"originalState":1},"User2":{"currentState":0,"originalState":0}}
14:33:55.004 -> [scanResultHandle]send scan result...
14:33:55.004 -> [scanResultHandle]send scan result finish
14:33:55.004 -> [scanResultHandle]handle finished!
14:33:56.967 -> [startBLEScan] start Scan...
14:34:12.002 -> [startBLEScan] scan finish device count-->22
14:34:12.002 -> [scanResultHandle]start process...
14:34:12.002 -> [scanResultHandle]User1-->1
14:34:12.002 -> [scanResultHandle]User2-->0
14:34:12.002 -> {"User1":{"currentState":1,"originalState":1},"User2":{"currentState":0,"originalState":0}}
14:34:12.002 -> [scanResultHandle]send scan result...
14:34:12.002 -> [scanResultHandle]send scan result finish
14:34:12.002 -> [scanResultHandle]handle finished!
14:34:14.013 -> [startBLEScan] start Scan...
14:34:29.007 -> [startBLEScan] scan finish device count-->22
14:34:29.054 -> [scanResultHandle]start process...
14:34:29.054 -> [scanResultHandle]user User1 has change
14:34:29.054 -> [scanResultHandle]User1-->0
14:34:29.054 -> [scanResultHandle]User2-->0
14:34:29.054 -> {"User1":{"currentState":0,"originalState":1},"User2":{"currentState":0,"originalState":0}}
14:34:29.054 -> [scanResultHandle]send scan result...
14:34:29.054 -> [scanResultHandle]send scan result finish
14:34:29.054 -> [scanResultHandle]handle finished!
14:34:31.017 -> [startBLEScan] start Scan...
14:34:46.048 -> [startBLEScan] scan finish device count-->22
14:34:46.048 -> [scanResultHandle]start process...
14:34:46.095 -> [scanResultHandle]User1-->0
14:34:46.095 -> [scanResultHandle]User2-->0
14:34:46.095 -> {"User1":{"currentState":0,"originalState":0},"User2":{"currentState":0,"originalState":0}}
14:34:46.095 -> [scanResultHandle]send scan result...
14:34:46.095 -> [scanResultHandle]send scan result finish
14:34:46.095 -> [scanResultHandle]handle finished!

谢谢分享这个项目,如果有别的debug模式,也可以试试...
谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-28 16:12 , Processed in 3.037285 second(s), 30 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表