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

 找回密码
 立即注册
查看: 74181|回复: 47

[技术探讨] ESPHOME通过创米小白TTL输出接入米家蓝牙设备

[复制链接]

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2020-11-26 16:15:03 | 显示全部楼层 |阅读模式
本帖最后由 neroxps 于 2020-11-26 20:20 编辑

众所周知创米小白万能遥控器带蓝牙功能,TTL 会输出蓝牙设备事件日志,通过ESP8266 读取创米小白的TTL 日志即可获得锁和其他蓝牙传感器的状态.

我参考了下 killadm LOCK2MQTT的和 XCray (多个)蓝牙网关 TTL->MQTT,支持任意米家蓝牙设备接入HA/NR 的代码,K大的因为只服务他的锁,我家是鹿客Q2 的锁,所以不适用,最终选择了XCray大的固件。

我把锁接入,设置了自动化,当人从门外上提把手的话,代表家里已经没人(我和老婆的使用习惯都是家里没人外出才上提把手),然后就自动化布防,按门铃微信视频推送等等。

当时试过几次回家不自动撤防,看了下日志发现没有找到回家的指纹解锁的日志。感觉是TTL消息丢了,米家那边看日志是看到回家的信息的(去到一个无法通过蓝牙连接锁的地方去米家里面看日志),由此断定应该是固件把指纹解锁事件日志丢了。

后来学了下C++,参考 Esphome 的 tuya 插件,按照 XCray 大佬的思路重写了下。使用几天暂时没有发现丢消息的情况。

MQTT 消息及使用方法和 XCray 大佬帖子是一样的,大家可以根据帖子教程部署,我这里就不再赘述。

编译方法

把下方的文件丢到 esphome 的目录下,然后使用 esphome 来编辑即可。

固件

INIT 2020-11-26 16:11:37

Fixed 2020-11-26 20:09:32

  • 修复因 rxmessage vector 字符串未设置字符串终止符导致字符串读取溢出(非致命),貌似 parseObject 还是能够成功的解析 Json ~导致我没发现这个 BUG。
    mijiaBleMessage_esp8266.zip (2.47 KB, 下载次数: 106)

MQTT 配置

请参考 Esphome 的 MQTT 配置修改 yaml 文件 https://esphome.io/components/mqtt.html

MQTT topic

/mijiaBleListener/[设备ID]/[事件ID]

日志消息

如果发现传感器消息没有出来,可以先看看日志,mqtt 监听以下的 topic 可以获得 esphome 的日志,或者可以到 esphome 那边看日志,如果需要存储日志,可以选择使用 node-red 把以下的 topic 的监听后,输出到文本文件发出来。

mijia_ble_message/debug











评分

参与人数 7金钱 +99 HASS币 +20 收起 理由
XCray + 20 我也改成这个啦!
killadm + 12 大神 666!
情非殇 + 10 大神666!
Jerrylee + 5 厉害了word楼主!
咸味土豆 + 12 膜拜大神!
+ 20 + 20 厉害了word楼主!
natic + 20 膜拜大神!

查看全部评分

Nero
回复

使用道具 举报

13

主题

400

帖子

2800

积分

金牌会员

Rank: 6Rank: 6

积分
2800
金钱
2400
HASS币
0
发表于 2020-11-26 16:24:56 | 显示全部楼层
XCray 的固件的确丢消息严重。使用夜灯蓝牙人体传感器非常多丢的。
esphome 没用过,步骤能详细写吗?
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
 楼主| 发表于 2020-11-26 16:26:36 | 显示全部楼层
maybeloveu 发表于 2020-11-26 16:24
XCray 的固件的确丢消息严重。使用夜灯蓝牙人体传感器非常多丢的。
esphome 没用过,步骤能详细写吗? ...

请看官方网文档 https://esphome.io/
Nero
回复

使用道具 举报

13

主题

400

帖子

2800

积分

金牌会员

Rank: 6Rank: 6

积分
2800
金钱
2400
HASS币
0
发表于 2020-11-26 16:53:29 | 显示全部楼层
开关锁触发的频率还是不高,不容易发现丢消息的。人体传感器触发频率高建议可以用这个测试一下有没有丢的。
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
 楼主| 发表于 2020-11-26 16:54:37 | 显示全部楼层
maybeloveu 发表于 2020-11-26 16:24
XCray 的固件的确丢消息严重。使用夜灯蓝牙人体传感器非常多丢的。
esphome 没用过,步骤能详细写吗? ...

我的也不一定没问题,我只有鹿客Q2 锁,没有其他蓝牙设备.
Nero
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
12119
金钱
9100
HASS币
460

教程狂人突出贡献

发表于 2020-11-26 17:19:32 | 显示全部楼层
n大这个思路也很好,不过所有的TTL接入方法对于:
当时试过几次回家不自动撤防,看了下日志发现没有找到回家的指纹解锁的日志。感觉是TTL消息丢了,米家那边看日志是看到回家的信息的

这个问题,我感觉还有一个重大的关节没办法规避,那就是米家蓝牙网关在完成向云端的消息传输之后才会从ttl接口输出调试信息,这样就会导致我们收到所需的指纹解锁消息严重滞后。
也许还有一个办法,就是用esp连接那个主串口(现在用的是debug口),只是最近沉迷于雪场,实在没工夫试验。
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
 楼主| 发表于 2020-11-26 18:07:57 | 显示全部楼层
XCray 发表于 2020-11-26 17:19
n大这个思路也很好,不过所有的TTL接入方法对于:

这个问题,我感觉还有一个重大的关节没办法规避,那就是 ...

主要是后来用您的固件ota失败了,然后研究了一个星期罗总的框架写好了,谁会知道esp32跑不起来,他又忙没时间帮我看,我就用回 esphome 插件方式写了,发现原来 eaphome 根本不需要那么复杂,可以直接发MQTT
Nero
回复

使用道具 举报

123

主题

4665

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16452
金钱
11702
HASS币
45
发表于 2020-11-26 19:07:09 | 显示全部楼层
众所周知的东西,我竟然都不知道?
回复

使用道具 举报

27

主题

2144

帖子

8966

积分

论坛元老

Rank: 8Rank: 8

积分
8966
金钱
6817
HASS币
30

论坛元老

发表于 2020-11-26 19:14:39 | 显示全部楼层
用米家万能遥控器,红外对接,不也一样嘛
回复

使用道具 举报

40

主题

2178

帖子

8336

积分

元老级技术达人

积分
8336
金钱
6143
HASS币
110
发表于 2020-11-26 19:19:02 | 显示全部楼层
wifi  mqtt会断线重连吗?X大的固件默认不重连或者很慢  我自己尝试编译各种报错,后来倒是编译过了,但是一直没测试....
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-26 01:12 , Processed in 0.063148 second(s), 37 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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