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

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

[修仙教程] 米家蓝牙器件接入HA的较佳方案:蓝牙网关+TTL+MQTT,ex榉树锁

  [复制链接]

3

主题

150

帖子

3590

积分

论坛元老

Rank: 8Rank: 8

积分
3590
金钱
3435
HASS币
30
发表于 2020-5-28 12:18:22 | 显示全部楼层
这个强,需要认真学习
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-28 12:20:56 | 显示全部楼层

                               
登录/注册后可看大图

查看小米github项目文档,成品电路板上的TTL,连接的是Debug串口。
而蓝牙网关自身的功能实现方式,也是串口,用的是另外一个,成为主控串口的。
——————————————————————
那么,一个很有意思的构想就出来了:
如果有一块有两个串口的开发板、连接这个主控串口的收发,那就可以把蓝牙网关的所有中间环节都掌控了。
所有的消息、功能,都可以实现,比如通过Hass设置临时开锁密码!
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-29 07:32:07 | 显示全部楼层
本帖最后由 XCray 于 2020-5-31 07:55 编辑

脚本跑了几天,终于看到一条高度疑似电量报告的消息:

{"retry":0,"method":"_async.ble_event","params":{"dev":{"did":"xxxx","mac":"xxxxxx","pdid":407},"evt":[{"eid":4106,"edata":"3000xxxxxx"}],"frmCnt":198,"gwts":462399}}

eid 4106符合小米文档的说明,后面的edata除了第一个字节应该就是电量数值(米家app里看确实是48%)
除此之外,另外4个字节是当天 00:00:00.0 的时间戳(也就是说,只有日期有意义)、小米文档里也说电量只有一个字节。

这个消息每天0点之后十几秒出现一次。
就是一直还没看到花花草草电量报告的消息~

回复

使用道具 举报

15

主题

297

帖子

1501

积分

论坛技术达人

积分
1501
金钱
1199
HASS币
30
发表于 2020-6-7 19:07:36 来自手机 | 显示全部楼层
我看了你的帖子收了一个网关,看到了 eid 4110 但是没看到 eid是5的情况?啥情况我是q2锁
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-7 19:28:06 | 显示全部楼层
crazysiri 发表于 2020-6-7 19:07
我看了你的帖子收了一个网关,看到了 eid 4110 但是没看到 eid是5的情况?啥情况我是q2锁 ...



q2锁是什么锁?也是榉树的吗?

根据我用的k1,eid:5对应的是开锁事件。你可以用那个打印消息的脚本,看一下开锁时的具体消息是啥?
回复

使用道具 举报

15

主题

297

帖子

1501

积分

论坛技术达人

积分
1501
金钱
1199
HASS币
30
发表于 2020-6-7 19:44:02 | 显示全部楼层
XCray 发表于 2020-6-7 19:28
q2锁是什么锁?也是榉树的吗?

根据我用的k1,eid:5对应的是开锁事 ...

米家的锁不是榉树的,收到的最多的就是eid 4110 edata 00。偶尔有 eid 4106 edata 5d。我看有说是电量的,但5d是个什么鬼
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-7 20:04:37 | 显示全部楼层
本帖最后由 XCray 于 2020-6-7 20:14 编辑
crazysiri 发表于 2020-6-7 19:44
米家的锁不是榉树的,收到的最多的就是eid 4110 edata 00。偶尔有 eid 4106 edata 5d。我看有说是电量的 ...

每个型号的锁,数据格式多少都会有些差异,所以需要先抓取足够多的消息,然后把脚本进行针对性的修正。
~~~~~~~~~~~~~~~~~~~~~~
5d是十六进制的数字,换成十进制,就是93,表示电量是93%——你可以和米家app里看到的数字比对一下。
米家的锁,应该是最符合小米官方文档的吧?

开锁事件的eid可能不是5,而是0x000B,各种事件和数据应该比榉树的锁更丰富。
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-7 20:08:29 | 显示全部楼层
本帖最后由 XCray 于 2020-6-8 06:48 编辑

看到有朋友在参考,诚惶诚恐啊!我自己这几天里把脚本做了些优化,包括:
- 异常捕获更周到(更不容易出错退出)

- 采用了更合理的mqtt.client等

不敢独享,赶快贴出来:
ser2mqtt.client.py (4.7 KB, 下载次数: 16)

如果用作后台进程、由systemctl控制,建议把其中的 print 替换成 syslog.syslog,在日志中记录有用信息。别忘了先import syslog
~~~~~~~~~~~~~~~~~~~~~~
不过,这个还是针对榉树门锁(以及花花草草)的,如果门锁型号不一样,仍然需要对脚本进行针对性修改


回复

使用道具 举报

15

主题

297

帖子

1501

积分

论坛技术达人

积分
1501
金钱
1199
HASS币
30
发表于 2020-6-7 22:25:23 | 显示全部楼层
XCray 发表于 2020-6-7 20:04
每个型号的锁,数据格式多少都会有些差异,所以需要先抓取足够多的消息,然后把脚本进行针对性的修正。
~~ ...

主要是用榉树的网关和小白万能遥控器ttl获取到的数据应该是一样的么?我怎么感觉我这数据少呢
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-7 22:30:41 | 显示全部楼层
crazysiri 发表于 2020-6-7 22:25
主要是用榉树的网关和小白万能遥控器ttl获取到的数据应该是一样的么?我怎么感觉我这数据少呢 ...

我理解(猜测),网关没区别,只是蓝牙终端设备(比如门锁)每种型号上报的消息数量和格式不一样。
~~~~~~~~~~~~~~~~~~~~~~~
也许不同网关会有区别,这个TTL毕竟是个调试口,不同的开发人员认为的需要从调试口输出的内容不一样。
甚至某些恶心的开发人员/厂家会刻意减少调试口的信息输出。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-29 23:14 , Processed in 0.057131 second(s), 33 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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