Topic

FAQ
Login Register
【sig mesh】【SDK4.1.0.0】8258心跳测试问题
May 10, 2024 13:32

/

A

/A


你好,请问下

网关配置器有支持FEATURE_FRIEND_EN,然后把中继都断电后,LPN设备有继续2S发出心跳,
但是,网关配置器收不到心跳包,回调函数mesh_process_hb_sub没进去,是什么原因


10 replies
TL_Soyo May 10, 2024 17:25
0
/A

你好,

  先确认是 哪边的问题,是 LPN 的问题,还是 网关的问题:
1. LPN 是否还在 发送 心跳包 ? 是通过什么方式判断是有在发送 ? 是 串口 log ? 还是 空中 抓包 ?
2. 网关收不到,那上电一个 灯泡节点,灯节点是否能收包 LPN 的心跳包 ?
3. 网关收不到 LPN 的心跳包的时候,是否能正常控制灯 ?
4. LPN 发送的 heartbeat 的 sequence number 是不是一直在递增的 ?

t_zgl [Author] May 11, 2024 09:35
0
/A

你好,测试如下:
1.LPN 是否还在 发送 心跳包 ? 是通过什么方式判断是有在发送 ? 是 串口 log ? 还是 空中 抓包 ?
这两种方式都有,串口log,有在heartbeat_cmd_send_conf加调试信息,2S发送一次打印一次。空中抓包可以抓到LPN设备心跳在发送。
  1. 网关收不到,那上电一个 灯泡节点,灯节点是否能收包 LPN 的心跳包 ?
上电一个中继灯节点,灯节点在 mesh_process_hb_sub里面加打印,是没有收到心跳包。
抓包有抓到中继灯节点在转发LPN的心跳包。
  1. 网关收不到 LPN 的心跳包的时候,是否能正常控制灯 ?
中继断电的情况下,网关可以正常控制LPN设备的灯。网关支持FEATURE_FRIEND_EN特征
中继上电后,网关也可以正常单控中继和LPN设备的灯

  1. LPN 发送的 heartbeat 的 sequence number 是不是一直在递增的 ?
发送的数据包,抓包看seq是有在递增。


TL_Soyo May 11, 2024 16:38
0
/A

检查收到的未解密的包有无打印。

t_zgl [Author] May 13, 2024 10:28
0
/A


你好,测试结果如下:


mesh灯节点 可以收到LPN的心跳包,我抓包心跳包数据  和打印出来加密数据 比对 是一样的

app_event_handler_adv 的返回错误值是-3


TL_Soyo May 13, 2024 15:17
0
/A

收到 心跳包的处理,app_event_handler_adv是有少部分返回 0 的,也就是正确处理,其他是 返回 -3,意思是重发的包,不需要重复处理。 这个是 符合预期的。请抓下GW端的这个函数呢,检查app_event_handler_adv() 的返回值 是否有部分是 0, 部分是 非 0 ?


t_zgl [Author] May 13, 2024 16:05
0
/A


你好,测试结果如下:

抓下GW端的这个函数呢,检查app_event_handler_adv() 的返回值 是否有部分是 0, 部分是 非 0 ?


--在网关端,加打印,心跳包app_event_handler_adv 的返回错误值都是-1,心跳包没有看到返回0

TL_Soyo May 14, 2024 10:58
0
/A

请问你有对接的FAE吗?没有的话需要你在 Demo SDK 上复现,然后把修改内容发过来,改动尽量少,然后我们复现确认一下,同时尽量将bin文件/代码和测试步骤上传到我们能够访问的地方,方便获取来测试。
你也可以同步进一步分析确认,用 mesh node(灯节点) 来发心跳包,看是否有类似问题。 


t_zgl [Author] May 14, 2024 11:39
0
/A


你好,从SDK4.1.0.0的release_bin文件目录下,找到这下面三个文件,烧写进去就可以复现,必现的。


验证步骤如下:

1.准备一个网关烧写8258_mesh_gw,一个中继灯,烧写8258_mesh,一个LPN设备,烧写8258_mesh_LPN

2.中继灯和LPN设备加网后,对LPN设置心跳,2S上报一次

e8 ff 00 00 00 00 02 00 04 00 80 39 01 00 ff 02 05 07 00 00 00

3.把中继灯,断电,LPN心跳还在发送。把中继灯再上电,LPN心跳抓包有再发,但是网关收不到心跳包了。只有重启网关才可以收到。


另外:

用 mesh node(灯节点) 来发心跳包 -- 是正常的,断电再上电,心跳包都可以正常上报到网关

TL_Soyo May 15, 2024 14:31
0
/A

内部复现了这个问题,可以按照下面两种方式修改代码解决。

1、发送 heartbeat的时候, 使用 组播作为 目的地址,如果要用单播地址,则需要按方法2.

2、修改这里代码。

#if FEATURE_FRIEND_EN // patch way

mesh_cmd_bear_t *p_bear_enc = GET_BEAR_FROM_ADV_PAYLOAD(p_payload);

mesh_cmd_nw_t *p_nw = (mesh_cmd_nw_t *)&p_bear_enc->nw;

if((-ERR_NO_NW_DEC_ERR == err) && p_bear_enc->nw.ctl

&& (!p_bear_enc->lt_ctl_unseg.seg && (CMD_CTL_HEARTBEAT == p_bear_enc->lt_ctl_unseg.opcode))

&& is_unicast_friend_msg_from_lpn(p_nw)){

err = is_exist_in_cache((u8 *)p_nw, 0, 1);

if(0 == err){

mesh_process_hb_sub(p_bear_enc);

LOG_USER_MSG_INFO(0,0,"err:%d",err);

}else{

return -ERR_NO_NW_DEC_CACHE_OLD;

}

}

#endif

t_zgl [Author] May 15, 2024 15:57
0
/A



好的,谢谢