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

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

[经验分享] 我好像找到了ESP8266转发TTL串口发生丢消息问题的根本原因

[复制链接]

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-24 16:52:14 | 显示全部楼层
李丑男 发表于 2020-6-24 16:18
你这个功能可以直接使用tasmota的固件,可以试试他们的固件看看。

tasmota也是这两天刚刚知道。不过我真的不敢相信能有直接拿来可用的固件?

毕竟,榉树门锁的消息是高度自定义的,甚至都不完全符合米家的标准。

如果只是uart转mqtt(近似于透传的概念),乐鑫/安信可官方就有固件可以完成,但不知道能否指定转发哪些uart来的消息、能否定制mqtt主题和消息内容、uart消息中的某些数据能否在转发前进行提取/计算/转换。

之前怀疑esp8266性能不足导致丢消息,曾想过用官方固件透传,但ha直接处理透传来的消息太吃力了,node-red也需要费不少功夫(我刚开始学用node-red),想来想去,还是在esp上用代码完成一些数据提取/转换/计算的工作比较省事。

我还有一个思路是简化esp上的工作,筛选uart消息之后,尽量少做处理,挑出关键的pdid/did/eid/edata四个字段的数据转发出去,交给node-red去做进一步处理。这样esp上的固件就可以自动适应任意数量的任意蓝牙器件了,一切适配都在node-red上完成。
回复

使用道具 举报

11

主题

266

帖子

2574

积分

金牌会员

Rank: 6Rank: 6

积分
2574
金钱
2298
HASS币
50
发表于 2020-6-24 18:57:21 来自手机 | 显示全部楼层
一直关注楼主的帖子,这里和iob论坛。楼主这段时间观察下来验证完了没有是不是散热问题?
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-24 19:41:44 | 显示全部楼层
秋雨轩 发表于 2020-6-24 18:57
一直关注楼主的帖子,这里和iob论坛。楼主这段时间观察下来验证完了没有是不是散热问题? ...

算是验证完了吧,不同条件反复对比,丢消息的原因应该就是散热造成的——散热好就不会丢消息、散热不好就会丢消息,我觉得这个结论是经得起分析的。

~~~~~~~~~~~~~~~~~~~~~~~~~~~
另外,让我恼火的是,今天发生了一次严重的丢消息事件,不是esp8266丢消息,而是榉树门锁/榉树网关丢消息!因为在米家app里,也缺少了一次开锁的记录!

本来我设置了自动化,开锁后玄关灯就会自动开启,今天下楼扔垃圾回来竟然没亮灯。查看esp8266记录的消息时间间隔,一切正常,就是没有开锁事件记录,查看米家app,也没有。所以可以确定是榉树门锁/榉树网关的问题。要么是门锁没有发出来,要么是由于干扰榉树网关没收到,要么是网关出错导致丢弃了这条重要的消息。
回复

使用道具 举报

2

主题

223

帖子

3302

积分

论坛元老

Rank: 8Rank: 8

积分
3302
金钱
3079
HASS币
0
发表于 2020-6-24 23:42:23 | 显示全部楼层
XCray 发表于 2020-6-24 16:00
嗯,那么,你碰到过很多朋友碰到过的丢消息的现象么?

如果没有,那就太好了,至少也是一个散热好不会丢 ...

我没有仔细研究是否有丢消息的情况,因为我没有TTL到8266对比过原始数据。
至少我从NodeRED导出的mqtt RAW log消息来看,还行。
不过我现在的头疼的问题在于,丢ios推送通知,经常性有开门mqtt消息了,到了推送ios的时候就time out了,甚是头疼。
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-25 06:35:47 | 显示全部楼层
nichwang 发表于 2020-6-24 23:42
我没有仔细研究是否有丢消息的情况,因为我没有TTL到8266对比过原始数据。
至少我从NodeRED导出的mqtt RA ...

这几个月推送服务经常超时,估计是伟大的墙的作用,没啥好办法。

如果是群晖的话,也许可以尝试群晖的chat
回复

使用道具 举报

1

主题

74

帖子

426

积分

中级会员

Rank: 3Rank: 3

积分
426
金钱
352
HASS币
0
发表于 2020-6-25 09:15:28 | 显示全部楼层
8266 丢消息是小事 现在遇到的情况是时不时会死机重启  排除了电源和散热问题  现在准备精简httpd和ws
回复

使用道具 举报

3

主题

317

帖子

2661

积分

论坛积极会员

积分
2661
金钱
2344
HASS币
10
发表于 2020-6-25 18:12:55 | 显示全部楼层
用tasmota的Serial Bridge试试看吧,我用在别的项目上的,似乎没啥问题。处理交给node-red,应该更简单。8266毕竟只是块单片机,比较细致的处理可能还是有点压力的
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-25 19:08:18 | 显示全部楼层
tcwj2008 发表于 2020-6-25 18:12
用tasmota的Serial Bridge试试看吧,我用在别的项目上的,似乎没啥问题。处理交给node-red,应该更简单。82 ...

嗯,等我node-red会弄了,一定要试试。

现在如果透传让node-red处理,我还真不会。

话说,如果要透传的话,出厂带的AT固件就可以,tasmota等开源固件也可以,不知道是不是有明显的区别。

我总觉得esp8266上应该做一些基本的筛选,而不是简单的透传,毕竟大量的消息是无用的,甚至比有用的都多。
回复

使用道具 举报

4

主题

531

帖子

3912

积分

论坛元老

Rank: 8Rank: 8

积分
3912
金钱
3371
HASS币
120
发表于 2020-6-26 00:35:33 | 显示全部楼层
测试代码用的nodemcu,散热良好,上次修改完之后感觉解决了串口丢消息的问题,刚才用100度风枪吹了一会儿,串口确实偶尔还是有乱码
有没有可能是晶振的问题?离芯片太近,温度一高就漂移
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
11445
金钱
8514
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-26 07:34:12 | 显示全部楼层
killadm 发表于 2020-6-26 00:35
测试代码用的nodemcu,散热良好,上次修改完之后感觉解决了串口丢消息的问题,刚才用100度风枪吹了一会儿, ...

喔~k大出没!!!

有这个可能。说实话电子元器件我基本啥都不懂,这个晶振对温度更敏感、还是8266本身受温度影响更大,判断不出来。

有个现象确实每想明白——温度升高后消息就变得很不流畅,可能还没有丢失,但发到mqtt的时间明显滞后,正常60~90的间隔,经常性的滞后到100多——可以推测100多并没有导致消息丢失,超过120可以说肯定有丢失。
能够从串口正确地收到消息,是否可以推断晶振频率没有飘太厉害?发到mqtt的时间滞后,是8266自己发生了“呆滞”?难以理解。

不过你的试验里观察到乱码,确实更像是晶振频率漂移的问题。我之前曾经观察到丢字符的现象,就是消息还在,但随机缺失一个字符,应该和你说的乱码是一个问题。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-27 04:22 , Processed in 0.060220 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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