同一个环境下,有两个协调器,PANID是随机的, 那么终端会加入那个zigbee网络。
请教一下,TI的工程师。
同一个网络下,只有一个协调器,那如果同一个环境下,有两个协调器。 终端加入那个网络?
是进行能量扫描, 加入最近的一个协调器吗?
zigbee节点入网时将选择范围内信号最强的父节点(包括协调器)加入网络吗?
比如一套设备,是由一个协调器和一个终端节点组成。 用户A 购买了一套, 用户B 也购买了一套。 他们所处在同一个环境。
如果节点是连接信号最强的协调器, 难免会出现用户A的终端节点加入了用户B的协调器。 在产品上这是不允许出现的。
请问TI的工程师, 该怎么解决这样的问题?
您可以让终端的PANID固定,这样就会加入特定的协调器组成的网络。
您也可以对您的协调器设置白名单机制,只有特定时间或特定节点可以加入该网络。
PANID固定, 和白名单 感觉都不可取, 设备需要批量生成。
TI 建议使用 EZ-MODE ,解决这个问题吗? 相关介绍文档怎么找?
您可以参考ZigBee Home Automation Specification的Chapter8. http://zigbee.org/Standards/ZigBeeHomeAutomation/download.aspx
404 PAGE NOT FOUND
EZMODE 是ZigBee网络里面Commission的一种方式。
具体你可以参考以下几个文档
1)C:\Texas Instruments\Z-Stack Home 1.2.0\Documents\Z-Stack Home Developer's Guide.pdf
2)C:\Texas Instruments\Z-Stack Home 1.2.0\Documents\Z-Stack Home Sample Application User's Guide.pdf
3)ZigBee Home Automation Profile Specification http://www.zigbee.org/zigbee-for-developers/applicationstandards/zigbeehomeautomation/ 在页面底部注册后可以下载
谢谢 Susan Yang, 我先了解一下。
希望能够帮到您!
再请教一下, cc2530节点 如何只连接 指定协调器(PANID 固定)组建的网络。 上电后,就直接连接指定协调器组建的网络,
可能会有多个协调器, 并且组建的网络信号强度 可能不是最强的。
在f8wconfig.cfg文件中
/* Define the default PAN ID.
*
* Setting this to a value other than 0xFFFF causes
* ZDO_COORD to use this value as its PAN ID and
* Routers and end devices to join PAN with this ID
*/
-DZDAPP_CONFIG_PAN_ID=0xFFFF
您可以设置自己的PANID,0xFFFF是随机PANID
避免Zigbee节点 加入错误网络, 找了很久资料, Permit Join 和 EZMODE 貌似可行。
但 Permit Join只能限制Associate Join模式,无法限制恶意的Rejoin模式 。
EZMODE, 粗略看了下, 没看明白。
求助, 该怎么较为简单的解决这个问题?
EZ-MODE可以理解为两个设备都按键启动EZMode,之后一段时间内允许设备加入网络,配对绑定成功后,就可以互相通信了。
互相通信后, 如果设备对应的协调器断电了,或者设备离协调器距离远,导致网络信号比较弱。
该设备能连接到其他协调器吗?
关于Permit Join,我看到这样一段话:
“使能Permit Join只对新入网的设备有效果,如果是已经入网的设备,即便Permit Join禁止了,也没关系,因为已经入网了。”
那么,如果设备重新上电,并且协调器Permit Join已经禁止, 设备重上电后,还能加入该协调器组建的网络吗?
修改入网机制,协调器拒绝Associate Request,这样可以让所有协调器收到所有节点的Associate Request。然后再根据Associate Request带的IEEE地址,指定哪些协调器允许哪些设备入网。
我可以帮你搞定这个,加我QQ 786416271。
因为已经入网了, 那协调器可以让设备节点退网吗? 退网后,是不是 Permit Join禁止时,就不能加入网络了?
@ Susan Yang 在吗?
万一 A家的终端, 加入了 B家协调器 的网络, 该怎么办?
是删除B家协调器网络中的A终端吗?
你好, Susan Yang 。
如果万一 A家设备节点 加入了B家协调器的网络, 我在A设备节点上 按键, 让其主动离开 B协调器组建的网络, 重新搜索网络使其正确联网。 并且B协调器 NLME_PermitJoiningRequest(0) 禁止。 你看这样可以吗? 期待你的回复。
主动离开协调器网络
void Meter_Leave(void)
{
NLME_LeaveReq_t leaveReq;
osal_memset((uint8 *)&leaveReq,0,sizeof(NLME_LeaveReq_t));
osal_memcpy(leaveReq.extAddr,NLME_GetExtAddr(),Z_EXTADDR_LEN);
leaveReq.removeChildren = 1;
leaveReq.rejoin = 0;
leaveReq.silent = 0;
NLME_LeaveReq( &leaveReq );
}
如果加上预编译NV_RESTORE选项, 终端节点上电会自动 加入原来协调器组建的网络吗? 还是选择信号强的网络? 这个时候 可能另一个网络信号很强(默认是加入信号强的网络)。
这个 预编译NV_RESTORE选项, 是协调器和终端节点 都需要加吧?
可以的,您可以让终端主动退出网络
预编译NV_RESTORE选项后,节点会保存当前的网络信息,即使断电后仍然保持。
预编译NV_RESTORE选项是需要协调器和终端节点都加的
请教一下, 可以动态 设置入网时的 MAC_SPEC_MIN_RECEIVER_SENSITIVITY 这个值吗?
当有设备要入网时, 将这个值改大点(要求靠的很近,信号很强),符合条件则可以入网。
当设备入网成功后, 将这个值还原。
因为终端节点每一次入网, 都需要判断这个 MAC_SPEC_MIN_RECEIVER_SENSITIVITY 值。
这样可行吗?
不建议您这样做,因为信号强度基本上是取决于硬件电路及PCB的设计,软件上的改进非常有限。
加入NV_RESTORE编译选项, 可以帮助终端在重启后也还会连上一次连接的协调器。
我有个问题, 如果当前环境下,有另一个信号更强的协调器, 那么终端重启后会连 上一次链接的协调器, 还是另一个信号更强的协调器?
终端重启后会连接上次连接的协调器,因为其已经保存了之前的PANID等网络参数
使用了NV_RESTORE后, 如果联网错误。 A家设备 联上了 B家协调器。 该怎么纠正这个错误?
1、修改ZCD_NV_STARTUP_OPTION的值,重新加入其他协调器
zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE)
2、主动退出现在的网络, 重新加入其他协调器。
NLME_LeaveReq_t tmp_LeaveReq;
tmp_LeaveReq.removeChildren = FALSE;
tmp_LeaveReq.rejoin = FALSE;
tmp_LeaveReq.extAddr = NULL;
NLME_LeaveReq(&tmp_LeaveReq);
或者是用其他方法?
使用了NV_RESTORE后, 基本不会出现联网错误的
因为我们的设备,上电就会去搜索网络, 在密集使用这种设备的环境下, 万一错了, 该怎么解决?
使用了 NV_RESTORE , 还需要使用 Permit Join吗?
@Susan Yang, 是我的问题 没问好吗? 我们的设备上电后,会去搜索zigbee网络, 一段时间后,会进入睡眠状态。 这个时候,有可能连接到其他网络。
如果设备已经连接到正确的网络, 并且加入了NV_RESTORE。 这肯定不会有问题。
在一开始 联网错误了, 那么NV_RESTORE,会再次连接错误的网络。 请教一下 怎么让设备 联网其他协调器?
您可以先看一下官方说明
"If the application would like to force a "new" join, the application should set the ZCD_STARTOPT_DEFAULT_NETWORK_STATE bit in the ZCD_NV_STARTUP_OPTION NV item before calling this function. "New" join means to not restore the network state of the device. Use zgWriteStartupOptions() to set these options [zgWriteStartupOptions(ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE);]."
zGlobals.c中有这两个函数,第二个就是上面所用的函数
uint8 zgReadStartupOptions( void ) //启动时读取ZCD_NV_STARTUP_OPTION的值
uint8 zgWriteStartupOptions( uint8 action, uint8 bitOptions ) //修改ZCD_NV_STARTUP_OPTION的值
@Susan Yang 谢谢你的回复, 我看一下。