【已解决】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

Zigbee 子设备开发


Post Reply
clcl
Posts: 43

现象:

设备上电后,用 app 控制设备 开/关,能收到网关下发的数据,但过了几十秒之后,这个时候用 app 控制设备 开/关,收不到数据,但上报一直是正常的

详细描述:

低功耗设备,设备上电后,入网成功,

然后网关下发了: cluster 0xEF00, cmd 0x07,

然后我上报了所有的 dp,上报都是成功的,

用 app 控制设备 开/关,能收到下发的dp

然后,过了几十秒之后

如果这个时候用 app 控制设备 开/关,网关不会下发控制命令,抓包器也抓不到报文

但设备主动上报数据没问题(周期性上报电量)

然后我一直点 app 上的 控制按钮,也没反应,也没 log

后面我重启设备,重启之后,入网成功后,网关会把刚刚没下发的dp,一下全部发过来

一直刷 log


想问一下这什么原因?对于低功耗设备,网关下发数据有什么特殊的策略吗?还是程序的配置有问题?

目前给人的感觉是:网关只会在设备上电后的几十秒内下发数据给设备,过了这个时间后,app控制命令,都被网关暂时缓存起来了,等到下次设备再上电,才会一起发给设备

clcl
Posts: 43

Re: 【求助】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

我发现初始化时将设备类型从 ZG_SLEEPY_END_DEVICE 改为 ZG_END_DEVICE,就可以收到网关下发的数据

Code: Select all

STATIC VOID_T app_end_device_node_init(VOID_T)
{
TAL_ZG_NODE_CFG_T node_config = {
        .node_type                                          = ZG_END_DEVICE,
        .tx_power                                           = 10,
        .scan_interval                                      = 200,
        .scan_duration                                      = ZG_SCAN_DURATION_3,
        .config.ed_cfg.poll_config.forever_flag             = 0,
        .config.ed_cfg.poll_config.fast_swicth_parent       = 1,
        .config.ed_cfg.poll_config.interval_ms              = 1000,
        .config.ed_cfg.poll_config.max_failed_times         = 5,
        .config.ed_cfg.poll_config.duration_after_data_ms   = 2000,
        .config.ed_cfg.poll_config.duration_after_join_ms   = 30000,
        .config.ed_cfg.poll_config.duration_after_rejoin_ms = 15000,
        .config.ed_cfg.rejoin_config.power_on_active        = 1,
        .config.ed_cfg.rejoin_config.send_data_active       = 1,
        .config.ed_cfg.rejoin_config.attempts               = 3,
        .config.ed_cfg.rejoin_config.interval               = 1000,
    };

//config zigbee node
tal_zg_node_config(&node_config);
}

但改完后,会一直收到 cluster 0x00, cmd 0x00,然后过一段时间就自动重启了

重启原因是软复位

Code: Select all

[D] : app general msg cb: cluster 0x00, cmd 0x00, payload_len: 2
[D] : payload:
01 00 
[D] : app general msg cb: cluster 0x00, cmd 0x00, payload_len: 2
[D] : payload:
01 00 
[D] : app general msg cb: cluster 0x00, cmd 0x00, payload_len: 2
[D] : payload:
01 00 
[D] : app general msg cb: cluster 0x00, cmd 0x00, payload_len: 2
[D] : payload:
01 00 
[D] : app general msg cb: cluster 0x00, cmd 0x00, payload_len: 2
[D] : payload:
01 00 
[D] : app general msg cb: cluster 0x00, cmd 0x00, payload_len: 2
[D] : payload:
01 00 
[D] : app general msg cb: cluster 0x00, cmd 0x00, payload_len: 2
[D] : payload:
01 00 

省略...

[I] : wopener device init start ...
[I] : poweron reset reason: 4, msg: Software triggered reset (TY_RST_SOFTWARE)

huanghuan
Posts: 202

Re: 【求助】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

您好,你使用的zigbee子设备开发框架及版本是哪个?

clcl
Posts: 43

Re: 【求助】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

现在我在 JOIN_OK 事件里执行了 tal_zg_poll_start(); 这个函数,正常了

现在上电几十秒后,也能够正常接收网关的下发数据了,改回原来的 ZG_SLEEPY_END_DEVICE 类型也可以用了

Code: Select all

        case TAL_ZG_NWK_JOIN_OK:
        {
            TAL_PR_TRACE("nwk_join_ok---\r\n");
            linp_async_exec(5000, _pub_all_props_cb, NULL);
            tal_zg_poll_start();
            break;
        }
        case TAL_ZG_NWK_REJOIN_OK:
        {
            TAL_PR_TRACE("nwk_rejoin_ok---\r\n");
            tal_zg_poll_start();
            break;
        }
huanghuan
Posts: 202

Re: 【求助】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

clcl 2023年 Sep 11日 11:03

如图

Image

图挂了,麻烦再发一下,或者直接说明下相关信息也行

clcl
Posts: 43

Re: 【求助】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

Dev Framework:

  • Type Dev Kit: Sub-Device Development:Zigbee Device Development Kit

  • Description: TuyaOS zigbee SDK based on EFR32MG21A020 platform.

  • TuyaOS Version: TuyaOS-3.6.1

  • Component Dev Kit(s): tuyaos-subdev-zg_1.0.8_efr32_zigbee_zigbee-com_0.0.17

Development Platform:

wireless SoC silabs Zigbee EFR32MG21A020

huanghuan
Posts: 202

Re: 【求助】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

你好,如果你需要app下发的数据,低功耗设备可以及时接收,而不需要本地按键触发等动作唤醒后来接收。可以将.config.ed_cfg.poll_config.forever_flag 置为 1

huanghuan
Posts: 202

Re: 【求助】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

Image

Code: Select all

forever_flag 表示在网时设备是否定时发送data request向父节点请求数据;
建议开启forever_flag的设备,一般会有网关下发给该设备数据的机制,比如单火开关;
像门磁等只有状态上报而没有下发交互的设备,可以将forever_flag置为false。

fast_swicth_parent 一般用于forever_flag false 时快速判断是否与父节点断开链接

interval_ms 是设置 data request的发送间隔

max_failed_times 是发送多少次data request直到触发rejoin

duration_after_data_ms / interval_ms 是forever_flag = false时,在网发送一次数据后持续的data request次数

duration_after_join_ms / interval_ms 是forever_flag = false时,配网成功时持续的data request次数

duration_after_rejoin_ms / interval_ms 是forever_flag = false时,rejoin成功时持续的data request次数

Image

Code: Select all

power_on_active 是 lost状态 上电主动触发rejoin机制,建议开启

send_data_active 是 lost状态 发数据时触发rejoin机制,建议开启

attempts 是lost状态 触发rejoin机制一组发多少次beacon request

attempts 是lost状态 触发rejoin机制一组隔多久发一次beacon request

如上图所示:一次rejoin尝试3次beacon request,每次beacon request间隔3秒
clcl
Posts: 43

Re: 【求助】低功耗设备,app控制设备 开/关,但网关不下发数据,但上报没问题

好的,明白了

Post Reply