本帖最后由 XCray 于 2021-5-27 12:50 编辑
20210527更新:
n大已近乎完美地实现了这个思路!
ESPHOME通过创米小白TTL输出接入米家蓝牙设备
https://bbs.hassbian.com/thread-11351-1-1.html
我去年11月底看到之后就下载了n大的代码,只不过当时沉迷于雪场,竟然就把这件事儿给忘了。今天又看到,干脆动起手来!
简单修改一下代码,主要是mqtt消息topic,这样ha侧的配置就不用动了,无缝切换,爽!
代码已上传至我原来的帖子:
[新奇玩法] (多个)蓝牙网关 TTL->MQTT,支持任意米家蓝牙设备接入HA/NR
下面是以前的内容,基本不用看了:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
说在前面:这个思路只是试验性质的,意在摸清ESPHome实现TTL转发的思路。实际上我自己也没有正式用过。
简单归纳一下,用ESP转发TTL有3个实现的思路:
1、killadm大神的LOCK2MQTT,我自己改造过代码以适应我手上的硬件。这个思路的主要特点是在ESP模块上完成消息的筛选和各种转换(实现对蓝牙设备的适配)。显然,写代码前必须对每种蓝牙设备的消息都了如指掌才行,现在这个思路我已经不用了。
2、就是本贴,还是上一个思路,用ESPHome完成,试验性质,已不再发展。
3、个人认为最合理最科学的思路,就是我的签名贴里说的,主要特点是ESP模块只做最少的工作,只是把消息转发出来,天然适配所有类型的蓝牙设备,一切适配工作都在HA或NR里完成。你有什么设备,就针对什么设备编辑yaml文件就可以了。ESP模块可以和蓝牙网关1:1贴身配置。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
参见我发的其他帖子,之前尝试了用树莓派+python、ESP8266+C的方法(源自killadm大神的LOCK2MQTT),完成蓝牙网关TTL消息的接收、整理以及向mqtt的转发,实现了蓝牙智能门锁(以及花花草草、蓝牙温湿度2)的HA接入。
树莓派跑这么简单的任务确实浪费,ESP8266采用C语言程序(LOCK2MQTT),虽然可以完成任务,但和esp home毫无关系,感觉有点格格不入。
初步体会到ESP Home的强大和方便之后,便想着如何把这个任务在ESP Home下实现,经过研读官方文档、参考已有案例,终于初步实现了这个想法。
这个方案相比LOCK2MQTT的好处或优势(其实是esphome原生api相对于mqtt的好处):
0、思路更简洁,TTL消息直接转化成传感器状态
1、不依赖于MQTT
2、配置改变无需重启HA
3、ESP Home统一管理
4、无需安装Arduino IDE等任何开发环境5、hass侧配置更简单(实际上,根本不需要配置,一切都在ESPHome这里搞定)。
6、据说效率更高、更稳定、延迟更低
实施方法:
0. 安装好ESP Home
1. 编辑保存ttlsensors.h文件(保存到HA的/config/esphone目录里)
2. ESP Home里新建结点(参考压缩包里的yaml文件)
3. upload(esphome会自动编译上传,当然如果是模块第一次刷固件,还得usb)
我这里提供的代码针对的是我使用的榉树门锁、花花草草监测仪、蓝牙温湿度2,需要根据各自的情况和需要修改,注意yaml和.h的匹配
已知问题:
1. 时间戳未转换成可读格式
哪位编程高手给指点一下,在这个环境下如何把时间戳转换成可读的格式?
2. 每次接收ttl消息会有个错误提示,不影响正常工作。
提示内容:[E][uart:096]: Reading from UART timed out at byte 0!
我也不知道这个错误提示是咋回事~~~所以也不知道怎么消除,等高手出手吧。。。
TTL_sensors-on-ESPHome-master.zip
(3.02 KB, 下载次数: 262)
第114行是个错误语句,上传时忘记删除了,用之前需要把它注释掉或者删掉。。。否则编译报错
ESP_LOGD("TTLSensor", topic.c_str());
esphome我也是初学乍练,让大家见笑了
有图有真相:
熟悉ESP Home的朋友一看便知。
另外,任务很简单,ESP8266/ESP32都可以运行。
期待编程高手完善代码,C++我就没好好学过,arduino也没玩过,编程能力明显跟不上。
https://github.com/xcray/TTL_sensors-on-ESPHome
|