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

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

[修仙教程] 【ESPHome】ESP32 DIY通用蓝牙网关,接入米家系门锁等各种设备

  [复制链接]

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-7-29 21:45:30 | 显示全部楼层
ghostist 发表于 2021-7-29 21:08
反复测试了好多遍,总感觉这里有问题
你在1楼提到:

我在1楼说的是我在用的榉树锁,48楼说的是你用的米家锁,两种锁的行为不一样,不要混在一起。

你说的96~105行是哪个版本里的?哪几行?如果是这几行的话,没啥好说的,只是针对门事件这类消息,很简单的:
  else if ((value_type == 0x07) && (value_length == 5)) {
    const int8_t doorevt = data[0];
    result.doorevt = doorevt;
    const int32_t doorevtts = encode_uint32(data[4], data[3], data[2], data[1]);
    result.doorevtts = doorevtts;
  }
  else {
          ESP_LOGD(TAG, "start2");
    return false;
  }

回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-7-29 22:08:34 | 显示全部楼层
本帖最后由 XCray 于 2021-7-30 07:20 编辑
ghostist 发表于 2021-7-29 21:08
反复测试了好多遍,总感觉这里有问题
你在1楼提到:


我上次发的代码有一行忘记改了,第104行,应改为:
  if (!service_data.uuid.contains(0x8F, 0x03) and !service_data.uuid.contains(0x95, 0xFE)) {
这样才能兼容你的米家门锁。

修改后的文件如下:
xiaomi_ble.zip (3.15 KB, 下载次数: 23)
附件里写成了or,自己改一下吧……
另外,蓝牙扫描模式最好也修改一下,就是yaml里:
esp32_ble_tracker:
  scan_parameters:
   interval: 180ms
   window: 120ms
   active: false
而我的门锁必须是true,这些都是service data adv和manufacturer data adv的区别带来的。
回复

使用道具 举报

39

主题

2049

帖子

7697

积分

元老级技术达人

积分
7697
金钱
5633
HASS币
110
发表于 2021-7-29 22:22:10 | 显示全部楼层
XCray 发表于 2021-7-29 22:08
我上次发的代码有一行忘记改了,第104行,应改为:
这样才能兼容你的米家门锁。

96~105指的是你原始版本的,也就是你#135说的104行,这里其实我改了,在我上传的zip包里xiaomi_ble.cpp文件的167行
蓝牙扫描模式修改了下,现象是一样的,还是没有任何“xiaomi_ble”开头的log输出
esphome有什么方式可以单步调试么?
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-7-29 23:29:01 来自手机 | 显示全部楼层
本帖最后由 XCray 于 2021-7-30 07:43 编辑
ghostist 发表于 2021-7-29 22:22
96~105指的是你原始版本的,也就是你#135说的104行,这里其实我改了,在我上传的zip包里xiaomi_ble.cpp文 ...

你好像没弄明白主动扫描和被动扫描的区别。这几行针对的就是小米文档里的这个说明:
广播标识
含有如下信息的广播报文,为符合MiBeacon 协议的广播:

advertising中“Service Data”(0x16)含有Mi Service(UUID:0xFE95)
scan response中的“Manufacturer Specific Data”(0xFF)含有小米公司识别码(ID:0x038F)
说明: “advertising”或“scan response”均采用统一的格式定义。

没有单步模式,只能通过ESP_LOG观察。

我又完整了看了一下代码,还有一个文件需要修改,xiaomi_zelkova.cpp的32行,改为:
  for (auto &service_data : device.get_service_datas()) {
之前因为我的锁有用信息都在manufacturer_data里,而你的锁都在service_data里。
回复

使用道具 举报

39

主题

2049

帖子

7697

积分

元老级技术达人

积分
7697
金钱
5633
HASS币
110
发表于 2021-7-30 13:09:12 | 显示全部楼层
XCray 发表于 2021-7-29 23:29
你好像没弄明白主动扫描和被动扫描的区别。这几行针对的就是小米文档里的这个说明:

没有单步模式,只能 ...

你这么一说好像明白了,xiaomi_zelkova.cpp里改这句很有必要
目前已经能打印11字节对应的处理log了,20字节和24字节的得等我下班回去测试,估计是没问题的

另外esphome掉线这个  我在路由设置了静态分配 esphome也设置了,目前好像不掉线了
但是dashbord里还是会显示offline,不过OTA和wireless log都正常
这点应该不影响用,搜了下论坛里有个类似情况的,升级esphome主程序解决,我这个比他所述的版本更高,不知原因为何,暂时先不管吧

晚上看能不能把作业交了

PS:手机app在家连上门锁蓝牙后可以看到电量,但也只是“充足”,并没有具体数值
这个报文目测是不广播的
回复

使用道具 举报

15

主题

331

帖子

2388

积分

金牌会员

Rank: 6Rank: 6

积分
2388
金钱
2057
HASS币
10
发表于 2021-8-1 00:07:04 | 显示全部楼层
ghostist 发表于 2021-7-30 13:09
你这么一说好像明白了,xiaomi_zelkova.cpp里改这句很有必要
目前已经能打印11字节对应的处理log了,20字 ...

大佬,你的锁是哪款?我的是这款,不知道能不能直接抄作业
回复

使用道具 举报

39

主题

2049

帖子

7697

积分

元老级技术达人

积分
7697
金钱
5633
HASS币
110
发表于 2021-8-3 15:17:25 | 显示全部楼层
star_liu 发表于 2021-8-1 00:07
大佬,你的锁是哪款?我的是这款,不知道能不能直接抄作业

同款 可以
回复

使用道具 举报

39

主题

2049

帖子

7697

积分

元老级技术达人

积分
7697
金钱
5633
HASS币
110
发表于 2021-8-3 15:21:02 | 显示全部楼层
交作业了:
xiaomi_lock_esphome.zip (11.67 KB, 下载次数: 234)
适用于米家指纹锁
esphome的配置参考1楼,压缩包里两个文件夹替换1楼原来的,编译下载
yaml文件格式化了有用的5个sensor:

  sensor.door_action        上提把手锁门        friendly_name: 锁事件
  sensor.door_event_time        2021-08-03 08:08:32        friendly_name: 门事件更新时间
  sensor.door_method        人工        friendly_name: 开锁方式
  sensor.door_state        门关着        friendly_name: 门状态
  sensor.door_state_time        2021-08-03 08:08:32        friendly_name: 门状态更新时间
  sensor.door_user        默认(管理员)        friendly_name: 操作人

不兼容原本楼主榉树门锁,有兴趣的自己合并
用着有问题的自行排查...前面帖子看3遍都有结论的

评分

参与人数 1金钱 +20 收起 理由
XCray + 20 可喜可贺!

查看全部评分

回复

使用道具 举报

15

主题

331

帖子

2388

积分

金牌会员

Rank: 6Rank: 6

积分
2388
金钱
2057
HASS币
10
发表于 2021-8-5 15:27:34 | 显示全部楼层
请教下大佬,多模网关怎么获取beaconkey啊?用XG3插件把多模网关接入到了HA,可以获取到MAC地址,但是Bindkey显示Not needed

MiCloud devices info
Name: 入户门
Model: lumi.lock.mcn01
MAC: E04:A8:53:XX:XX
Bindkey: Not needed
回复

使用道具 举报

15

主题

331

帖子

2388

积分

金牌会员

Rank: 6Rank: 6

积分
2388
金钱
2057
HASS币
10
发表于 2021-8-5 16:00:20 | 显示全部楼层
ghostist 发表于 2021-8-3 15:21
交作业了:

适用于米家指纹锁

感谢大佬分享作业
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-28 17:03 , Processed in 0.059891 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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