你好,测试如下:1.LPN 是否还在 发送 心跳包 ? 是通过什么方式判断是有在发送 ? 是 串口 log ? 还是 空中 抓包 ?这两种方式都有,串口log,有在heartbeat_cmd_send_conf加调试信息,2S发送一次打印一次。空中抓包可以抓到LPN设备心跳在发送。 网关收不到,那上电一个 灯泡节点,灯节点是否能收包 LPN 的心跳包 ?上电一个中继灯节点,灯节点在 mesh_process_hb_sub里面加打印,是没有收到心跳包。抓包有抓到中继灯节点在转发LPN的心跳包。 网关收不到 LPN 的心跳包的时候,是否能正常控制灯 ?中继断电的情况下,网关可以正常控制LPN设备的灯。网关支持FEATURE_FRIEND_EN特征中继上电后,网关也可以正常单控中继和LPN设备的灯LPN 发送的 heartbeat 的 sequence number 是不是一直在递增的 ?发送的数据包,抓包看seq是有在递增。
你好,
先确认是 哪边的问题,是 LPN 的问题,还是 网关的问题:
1. LPN 是否还在 发送 心跳包 ? 是通过什么方式判断是有在发送 ? 是 串口 log ? 还是 空中 抓包 ?
2. 网关收不到,那上电一个 灯泡节点,灯节点是否能收包 LPN 的心跳包 ?
3. 网关收不到 LPN 的心跳包的时候,是否能正常控制灯 ?
4. LPN 发送的 heartbeat 的 sequence number 是不是一直在递增的 ?
检查收到的未解密的包有无打印。
你好,测试结果如下:
mesh灯节点 可以收到LPN的心跳包,我抓包心跳包数据 和打印出来加密数据 比对 是一样的
app_event_handler_adv 的返回错误值是-3
收到 心跳包的处理,app_event_handler_adv是有少部分返回 0 的,也就是正确处理,其他是 返回 -3,意思是重发的包,不需要重复处理。 这个是 符合预期的。请抓下GW端的这个函数呢,检查app_event_handler_adv() 的返回值 是否有部分是 0, 部分是 非 0 ?
你好,测试结果如下:
抓下GW端的这个函数呢,检查app_event_handler_adv() 的返回值 是否有部分是 0, 部分是 非 0 ?
--在网关端,加打印,心跳包app_event_handler_adv 的返回错误值都是-1,心跳包没有看到返回0
请问你有对接的FAE吗?没有的话需要你在 Demo SDK 上复现,然后把修改内容发过来,改动尽量少,然后我们复现确认一下,同时尽量将bin文件/代码和测试步骤上传到我们能够访问的地方,方便获取来测试。
你也可以同步进一步分析确认,用 mesh node(灯节点) 来发心跳包,看是否有类似问题。
你好,从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(灯节点) 来发心跳包 -- 是正常的,断电再上电,心跳包都可以正常上报到网关
内部复现了这个问题,可以按照下面两种方式修改代码解决。
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
好的,谢谢