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

您所在的位置:网站首页 小米智能插座2蓝牙网关版怎么接入蓝牙设备 米家蓝牙器件接入HA的较佳方案:蓝牙网关+TTL+MQTT,ex榉树锁

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

2023-10-18 12:18| 来源: 网络整理| 查看: 265

本帖最后由 XCray 于 2021-8-24 12:47 编辑

2121年8月补充: 这个只是较佳方案,不是最佳。。。 看我的签名贴,用esp32直接接收解密蓝牙消息,无论从原理还是效果上看,都比这个方案更好。

另,本贴所述方案已被n大在esphome里实现,比arduino自己编译的固件更便于维护管理,建议参阅相关帖子。

~~~~~~~~~~~~~~~以下是2020年11月份发的内容~~~~~~~~~~~ 偶然间看到几个神贴:《小米智能门锁状态信息接入hass的非典型方法》https://bbs.hassbian.com/thread-8444-1-1.html《小米万能遥控器里的秘密-米家蓝牙传感器及门锁接入homeassistant》https://post.smzdm.com/p/a4wmp04x/ 《米家智能门锁接入开源智能家居系统》https://github.com/killadm/LOCK2MQTT 深受感动! 我自己一直对门锁通过蓝牙网关联网这种方案非常痛恨(最大的原因是所有自动化都只能云端执行,时延太大以至于没啥实际价值)。蓝牙网关没有局域网接口,一直耿耿于怀。 看到这几位大神的文章,突然受到启发: - 我用的虽然是榉树送的蓝牙网关,应该也有TTL、也可以输出我想要的一些消息吧? - 我用的虽然不是米家自己品牌的门锁,可是榉树也支持米家app,消息格式是否也一致? - 虽然我不想再增加ESP8266的开发版,可是手上有树莓派、NanoPi、群晖、USB串口卡,找个连TTL转发mqtt的东西很容易啊 该出手时就出手! 先把榉树网关拆开,简直就是想要啥有啥!妥妥的TTL接口,针脚都是现成的!     jsgw.jpg 登录/注册后可看大图

jsgw.jpg (134.38 KB, 下载次数: 0)

下载附件

2020-5-23 18:51 上传

翻出来串口卡,一番折腾,终于在虚拟机Win7的超级终端(还是从XP现提取的)里看到了可爱的串口吐出来的消息! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!等等!这些消息和 jstormx 的《小米智能门锁状态信息接入hass的非典型方法》帖子里说的不一样啊!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 格式问题先放下,不能老开着电脑啊,先把TTL连到NanoPi上! 其实想先连树莓派来着,但树莓派的串口和蓝牙冲突而我又不想把蓝牙废掉,想了想,先连到NanoPi上吧。 NanoPi上虽然也有UART,但是没有焊接针脚,再说NanoPi现在是主路由,轻易不能停工。 好在NanoPi上的USB口空出来了,好在有USB串口卡,插到NanoPi上,直接认出/dev/ttyUSB0。 找了个测试脚本,简单修改一下,直接输出了榉树网关从TTL输出的消息。脚本内容:

#!/usr/bin/python3 # -*- coding: utf-8 -* import serial import time ser = serial.Serial('/dev/ttyUSB0', 115200) if ser.isOpen == False: ser.open() # 打开串口 try: while True: size = ser.inWaiting() # 获得缓冲区字符 if size != 0: response = ser.read(size) # 读取内容并显示 print (response) ser.flushInput() # 清空接收缓存区 time.sleep(0.1) # 软件延时 except KeyboardInterrupt: ser.close()                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图 接下来一边研读小米IoT开发平台上的文档,一边用上面的小程序记录消息,然后结合分析 1. 榉树门锁的消息格式,和小米文档不太一致,和米家门锁也有明显差异 2. 有了格式,就可以挑选出需要的内容,通过mqtt协议发出来供hass使用了。                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图                                 登录/注册后可看大图

6楼有重大进展。实现了榉树智能锁、花花草草传感器的本地接入——最大的好处就是没有时延、不依赖云端。顺便说一嘴,上面这段代码来自pyserial官方样例,但非常弱,会占用一个CPU内核几乎100%的时间。后来找到了高手给的合理的方法,CPU占用不到1%。

28楼有优化后的脚本,更稳定、更合理。

35楼增加了“米家蓝牙温湿度计2”的适配代码,就是方方、小小的那个。

后来,禁不住诱惑,迁移到了esp8266,我用的是最小巧的esp01-s模块,塞到榉树网关里很轻松,3v3的供电都是现成的。 这里有如何修改代码、如何编译、烧写的详细步骤: https://bbs.hassbian.com/thread-10218-1-1.html

再后来,了解到了强大方便的ESP Home,也可以实现这个应用: https://bbs.hassbian.com/thread-10250-1-1.html 如果C++的功力有,这应该是最佳方案了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20200716补充: 改进后的固件(硬件连接不变):          https://bbs.hassbian.com/thread-10434-1-1.html         【全新改版】蓝牙网关-TTL-MQTT-HA,适应米家所有蓝牙设备,支持多个蓝牙网关(每个网关搭配一个ESP模块)

可以适用于所有米家蓝牙设备的版本(只要可以连蓝牙网关,就直接可以用)。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 20201103补充: 这个方案存在一个重大缺陷: 小米蓝牙网关的设计:只有在完成云端通讯之后,才会从TTL接口输出我们想要的消息!这样,网络状况不佳时,时延、丢消息也就依然存在;在外网中断的情况下,TTL接口完全没有有效消息输出! 正在探索新的解决方案,大家尽情期待吧~~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3