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

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

[进阶教程] 这个才是合理的zigbee gateway解决方案

[复制链接]

9

主题

73

帖子

282

积分

中级会员

Rank: 3Rank: 3

积分
282
金钱
204
HASS币
0
 楼主| 发表于 2021-9-1 20:24:17 | 显示全部楼层
咸味土豆 发表于 2021-9-1 18:44
罗总发的东西,反正一般人(我也是一般人)也看不懂,让子弹飞一会儿。

简而言之,就是在控制多个设备时,把等待某个设备返回的延迟时间,用来控制下一个设备,做成类似流水线的效果。
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

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

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

发表于 2021-9-1 20:44:53 | 显示全部楼层
这排版,我得咬着牙才能看
回复

使用道具 举报

2

主题

239

帖子

817

积分

高级会员

Rank: 4

积分
817
金钱
573
HASS币
20
发表于 2021-9-1 21:41:11 | 显示全部楼层
zigbee_luo 发表于 2021-9-1 20:19
TTL为了满足转485,协议没有对全双工做优化。ZNP是发一条等一条,中间有延迟的话也硬等。 ...

那是你程序的问题了,TTL和无线模块,原理上是分离的,根据你程序的逻辑来处理
回复

使用道具 举报

9

主题

73

帖子

282

积分

中级会员

Rank: 3Rank: 3

积分
282
金钱
204
HASS币
0
 楼主| 发表于 2021-9-1 21:56:22 | 显示全部楼层
jack9603301 发表于 2021-9-1 21:41
那是你程序的问题了,TTL和无线模块,原理上是分离的,根据你程序的逻辑来处理 ...

ZNP模块,对乱序发射的支持不是很好。同时控制几十个设备,必须控制完一个,等返回,再控制下一个。如果主机用ARM开发板,ARM开发板最早是485网关,改成zigbee网关,发一条命令等一个返回,又是一个返回会延迟几百毫秒,甚至几秒钟,ARM开发板是处理得及时的,但是设备多了的话时间就花得越久。控制100个灯的流水灯点亮,如果把其中20个灯突然断电,只控制剩余80个,累计延迟会达到1分钟,其中轮询到断电的灯时会有3秒的卡顿。但是把ZNP模块固件换成我自己的UART命令,直接发送80个设备的控制指令。而且对于每个断电的灯需要消耗3秒的卡顿时间来说,由于采用了流水线的原理,20个灯的卡顿时间也最多只有5秒。
回复

使用道具 举报

2

主题

239

帖子

817

积分

高级会员

Rank: 4

积分
817
金钱
573
HASS币
20
发表于 2021-9-1 22:00:23 | 显示全部楼层
zigbee_luo 发表于 2021-9-1 21:56
ZNP模块,对乱序发射的支持不是很好。同时控制几十个设备,必须控制完一个,等返回,再控制下一个。如果 ...

zigbee数据传送本来就不能太快,太快了会丢包
回复

使用道具 举报

9

主题

73

帖子

282

积分

中级会员

Rank: 3Rank: 3

积分
282
金钱
204
HASS币
0
 楼主| 发表于 2021-9-1 22:08:24 | 显示全部楼层
jack9603301 发表于 2021-9-1 22:00
zigbee数据传送本来就不能太快,太快了会丢包

但是每个设备等待3秒,100个设备就要等待300秒显然不合理,平均一个设备等待100ms~200ms就差不多了。网关向100个设备发送控制,按照100ms的间隔时间完全够zigbee的数据传输,可以把中间等待设备返回消息的延迟时间拿来控制其它设备,这些延迟很多都不是传输导致的延迟,而是设备端读取传感器,或者读取FLASH内容的延迟。
回复

使用道具 举报

2

主题

239

帖子

817

积分

高级会员

Rank: 4

积分
817
金钱
573
HASS币
20
发表于 2021-9-1 23:04:16 | 显示全部楼层
zigbee_luo 发表于 2021-9-1 22:08
但是每个设备等待3秒,100个设备就要等待300秒显然不合理,平均一个设备等待100ms~200ms就差不多了。网关 ...

发一个cluster,就要延迟一段时间,至于延迟时间,是厂家编程写进去的,是sleep,如果是你自己写的话,延迟多少是你的意思,不要太快就行,和是不是TI或者是什么厂的无关,大家都在选择最合适自己和最合适用户的设定值,你想用zigbee控制,就不要想实时了,延迟是必然的,发送速率不能太快,否则丢包率和稳定性都会下降,这是一种权衡而已,另外,你的标题还是改改把

如果你发现zigbee2mqtt的程序可以优化,我推荐你提交PR(固件也有),说不定就被合并了

回复

使用道具 举报

9

主题

73

帖子

282

积分

中级会员

Rank: 3Rank: 3

积分
282
金钱
204
HASS币
0
 楼主| 发表于 2021-9-2 00:11:02 | 显示全部楼层
jack9603301 发表于 2021-9-1 23:04
发一个cluster,就要延迟一段时间,至于延迟时间,是厂家编程写进去的,是sleep,如果是你自己写的话,延 ...

延迟的这段时间,网关可以给其它设备发,既然延迟时间是厂家编程写进去的,就不一定要死等。zigbee2mqtt的优化部分,主要就集中在对zigbee coordinator的发送队列的管理。首先队列的容量要大,其次要防止队列堵死。coordinator发给任何node的消息,在队列中只能有一个目标node。假设host要发1000条消息给100个目标设备,coordinator的队列大小是64,那么host就要做好管控,64个队列就要发给64个设备,并且等待队列清空后再发送剩余的46个设备,1000条消息就要看发给哪些设备。原则上发给某个设备的消息发给coordinator的发送队列了,那么下一条发给该设备的消息,必须要等待上一条消息从发送队列消失了再发送。另外如果剩余的46个目标还没有发送过消息,那么下一条消息还要把coordinator的队列让位给其它设备。
回复

使用道具 举报

2

主题

239

帖子

817

积分

高级会员

Rank: 4

积分
817
金钱
573
HASS币
20
发表于 2021-9-2 00:15:38 | 显示全部楼层
zigbee_luo 发表于 2021-9-2 00:11
延迟的这段时间,网关可以给其它设备发,既然延迟时间是厂家编程写进去的,就不一定要死等。zigbee2mqtt ...

你如果测试过,在保证不存在稳定性问题的情况下,你可以考虑提交PR给官方
回复

使用道具 举报

9

主题

73

帖子

282

积分

中级会员

Rank: 3Rank: 3

积分
282
金钱
204
HASS币
0
 楼主| 发表于 2021-9-2 00:19:24 | 显示全部楼层
jack9603301 发表于 2021-9-2 00:15
你如果测试过,在保证不存在稳定性问题的情况下,你可以考虑提交PR给官方 ...

我的固件已经稳定运行了几个月了,怎么提交?是CC2652P部分的固件。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-27 14:30 , Processed in 0.149850 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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