微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > ZHA Coordinator 如何控制ZLL Light/Philips Hue Light

ZHA Coordinator 如何控制ZLL Light/Philips Hue Light

时间:10-02 整理:3721RD 点击:

ZHA Coordinator 如何控制ZLL Light/Philips Hue Light

缩写:

ZHA: ZigBee Home Automation profile

ZLL:  ZigBee Light Link profile

TCLK: Trust Center Link Key

  1. 为什么ZLL 灯加入ZHA网络

在ZLL网络中,设备支持两种方式Join ZigBee网络,一种是通过Touch Link[1]方式入网,遥控器和灯靠近配对的方式把灯拉入到ZLL网络中。另外一种是传统入网,称为Classic Commission Join的方式加入ZigBee 网络。传统入网过程如下,

(1)         节点以Trust Center(一般是协调器)作为父节点加入到网络中

(2)         节点以路由器作为父节点加入到网络中

以上入网过程都是在使能SECURE的情况下测试的,ZLL灯在通过Classic Commission Join的方式入网时,父设备通过发送Transport Key消息将网络秘钥发送给子设备,这个秘钥称为Network Key,该秘钥用于对网络内的通信数据进行加密。Network Key在从父设备发送给子设备的过程中,如果以明文发送,则有可能会被其他设备监听到,导致Network Key被窃取,使得通信不安全。所以ZigBee协议中使用Trust Center Link Key(TCLK)对通过AES  128bit加密算法对该 Network Key进行加密,过程如下。在TI Z-Stack 协议栈中通过开启TC_LINKKEY_JOIN宏定义。关于ZigBee网络的Security说明,详细参考《Z-Stack Developer's Guide.pdf》 在TI S-Stack 安装目录下的Document里面。

(3)      Network Key加密/解密过程

在ZHA的协议栈中,TCLK是公开的一个Key,在ZHA Specification[3]里面5.3.3中提到

在ZLL协议中规定默认的Trust Center Link Key和ZHA的默认TCLk是一样,在[1]的8.1.6.2节中,

这也是为什么ZLL的灯能够成功加入到ZHA的网络中去,原因是他们使用的TCLK都是一样的,当然Philips Hue Light也不例外,也可以成功的加入到ZHA网络中。

  1. ZLL灯如何加入到ZHA网络中

本节中使用TI的开发板和ZigBee协议栈Z-Stack让ZLL灯加入到ZHA的网络中。

  • 硬件:

1)  ZHA Coordinator

http://www.ti.com/tool/CC2530DK?keyMatch=CC2530DK&tisearch=Search-EN-Everything

2) ZLL Light

http://www.ti.com/tool/cc2530zdk-zll?keyMatch=CC2530%20ZLL&tisearch=Search-EN-Everything

  • 软件:

1) ZHA Coordinator

Z-Stack Home 1.2.2   http://www.ti.com/tool/z-stack

2) ZLL Light

Z-Stack Lighting 1.0.2 http://www.ti.com/tool/z-stack

  • 相关工具:

1)  Packet Sniffer Tool

http://www.ti.com/tool/cc2531usb-rd?keyMatch=CC2531%20USB%20Dongle&tisearch=Search-EN-Everything

1)  CC Debugger

http://www.ti.com/tool/cc-debugger?keyMatch=CC%20Debugger&tisearch=Search-EN-Everything

3)  SmartRF Flash Programmer

http://www.ti.com/tool/flash-programmer?keyMatch=smart%20flash%20programer&tisearch=Search-EN-Everything

4)  Packet Sniffer

http://www.ti.com/tool/packet-sniffer?keyMatch=packet%20sniffer&tisearch=Search-EN-Everything

安装Z-Stack Home 1.2.2 协议栈到默认路径下。

1) 利用IAR for 8051 9.10 打开Smapleswitch工程,选择CoordinatorEB

在C:\Texas Instruments\Z-Stack Home 1.2.2.42930\Projects\zstack\HomeAutomation\SampleSwitch\CC2530DB

默认情况下已经使能了TC_LINK_JOIN宏定义,打开NV_RESTORE用于保存网络参数。

编译并下载到SmartRF05EB开发板,

2) 利用CC Debugger和SmartRF Flash Programmer下载ZllLight-ZLIGHT.hex文件到ZLL Light,hex文件位于C:\Texas Instruments\Z-Stack Lighting 1.0.2\Projects\zstack\ZLL\SampleApp\CC253x\hex 

注: 如果是从TI购买的ZLL 开发套件,出厂时是已经烧写过该程序的,所以不需要再重复烧写。

1) 将SmartRF05EB上电,Coordinator会建议一个Zigbee PAN 网络

2) 将ZLL Light 上电,按住ZLL Light上按键,保持>10s松开,ZLL Light会触发Classic Commission Join的方式开始加网过程。

3) 将整个过程利用CC2531 USB Dongle和Packet Sniifer抓包如下,


这样ZLL Light就通过Classic Commission Join的方式成功加入到ZHA的网络中

  1. ZLL 灯的Service Discovery 过程

虽然ZLL Light已经成功的加入到ZHA网络中了,现在需要通过ZHA Coordinator对ZLL Light实现控制,包括on/off,Level, Color 等方面的控制。但是此时ZHA Coordinator只知道有一个子设备(Router)加入了网络,并不知道这个是个什么设备,也不知道他支持哪些功能,他工作在什么EndPoint上面,每个EndPoint 支持哪些cluster等等。所以这时ZHA Coordinator需要开始Service Discovery过程,去获得该设备应用层面的信息。

这个Service Discovery的过程主要是调用ZDO层的相关API函数,在ZigBee Specification 2.5.5.6 Device and Service Discovery节[4]中也有说明。

1) 利用Active Endpoints Request获取ZLL Light支持的EndPoint

当ZLL Light 成功入网以后,ZHA Coordinator 调用ZDP_ActiveEPReq() API发送Active_EP_req命令给ZLL Light。 ZLL Light在收到Active_EP_req 命令以后,会在ZDP_IncomingData调用call back函数 ZDO_ProcessActiveEPReq,最后调用ZDP_ActiveEPRsp回复Active_EP_rsp,ZHA Coordinator在收到Active_EP_rsp以后,会调用ZDApp_ProcessMsgCBs函数,最后在Switch-Case下面,通过ZDO_ParseEPListRsp对这个消息进行解析。

2) 利用Simple Descriptor Request获取ZLL Light在每个EndPoint下的Cluster

通过以上步骤ZHA Coordinator获得了ZLL Light工作在哪几个EndPoint上面,现在需要对每个Endpoint进行请求获得EndPoint上面支持的In Cluster和Out Cluster。 ZHA Coordinator调用ZDP_SimpleDescReq API发送Simple_Desc_req命令给ZLL Light, ZLL Light在收到命令以后会在ZDP_IncomingData调用call back函数ZDO_ProcessSimpleDescReq,最后调用ZDP_SimpleDescMsg回复Simple_Desc_rsp,ZHA Coordinator在收到Simple_Desc_rsp以后,会调用ZDApp_ProcessMsgCBs函数,最后在Switch-Case下面,通过ZDO_ParseSimpleDescRsp对这个消息进行解析。

3) ZHA Coordinator在收到ZLL Light的device announce以后,开始进入Service Discovery过程,具体实现的程序见附件代码中,搜索ZHAZLL关键字。

在节点入网成功(Device Announce),1s后对该节点发起Service Discovery过程,完成Service Discovery以后,通过CC2530EB开发板上的Joystick-Center,可以实现对ZLL Light的On/Off Toggle, 当然对Level,Color也是类似的。

对于Philips Hue Light也不例外,可以通过同样的方式对Philips Hue Light进行控制。


  1. 对ZLL灯进行控制

1) 节点成功入网

2)Service Discovery

3)Toggle LED


测试代码(基于Z-Stack Home 1.2.2)

8510.zcl_samplesw.zip

zcl_SampleSwitch.c

zcl_SampleSwitch.h

在IAR定义宏定义 ZHAZLL


Reference:

[1] docs-11-0037-10-0zll-zigbee-light-link-zll-profile-specification.pdf

[2] 2654.Z-Stack Developer's Guide.pdf

[3] ZB_AFG-Home_Automation_Profile_for_Public_Download.pdf

[4] docs-05-3474-20-0csg-zigbee-specification.pdf


占位!

“2) 将ZLL Light 上电,按住ZLL Light上按键,保持>10s松开,ZLL Light会触发Classic Commission Join的方式开始加网过程。”,请问ZLL LIGHT上有按键吗?飞利浦HUE上面好像也没有按键啊。

ZLL Light的硬件是指TI的开发套件,上面是有按键的。

飞利浦Hue没有按键,所以Philips Hue如果是一个Factory New的灯,那么在上电的时候就会发起Classic Commission Join过程。

这种只是说实现方式不同,你们将来的产品也可以跟Philips Hue做成一样的。

Philips Hue应该是打开NV的,那么是不是Philips Hue一旦Classic Commission Join成功或者touchlink成功,以后我再想测试组网的实验就不可以了,不知道Philips 有无恢复Factory New功能?

@Gary,

你的理解是正确的,如果Philips入过网或者touchlink的成功以后,就变Not Factory New了。

那么第二次上电就不会再发Beacon Request来通过来Classic Join的方式加网了。

这个时候需要有个遥控器把Philips Hue 恢复到出厂设置。

恢复方法如下,

How can I use the ZStack-Lighting Remote to reset a certified ZLL product and cause it to leave the old network

ZLL products on the market can be reset to factory new by the ZStack-Lighting-1.0.1 Remote if you enable the MASTER_KEY, the actual key is not used during the reset, you just need the correct key bitmask during the initial TouchLink phase. See section 3.1 of the "ZStack Lighting Developers Guide.pdf" for more information about enabling the MASTER_KEY. To send a reset from a ZStack-Lighting Remote you need to start a TouchLink with zllInitiator_StartDevDisc(), then when the ZLL Light flashes send the zllInitiator_ResetToFNSelectedTarget().

NOTE: There is a bug which will cause issues if the ZLL Remote is on a different channel to the ZLL Light.

To fix this you will need to add:

  zll_SetChannel( selectedTarget.rxChannel );

to the zllInitiator_ResetToFNSelectedTarget function:

ZStatus_t zllInitiator_ResetToFNSelectedTarget()
{
  if ( ( zllTransID == 0 ) || ( selectedTarget.lastRssi == ZLL_TL_WORST_RSSI ) )
  {
    return ( ZFailure );
  }
  zclLLResetToFNReq_t req;
  req.transID = zllTransID;

  zll_SetChannel( selectedTarget.rxChannel );

  return zclLL_Send_ResetToFNReq( ZLL_INITIATOR_ENDPOINT, &(selectedTarget.srcAddr), &req, initiatorSeqNum++ );
}

1,zll灯(跑的是TI的zll light程序)恢复到 Factory New后会主动发送Beacon Request吗,为什么我看到的只是 Factory New后,灯闪了一下,没有发送Beacon Request。zllTarget_ClassicalCommissioningStart(),这个函数肯定可以使zll灯发送一下Beacon Request。

2,还是不知道怎么用无线来控制zll灯(或者Philips),使得该灯主动发送Beacon Request。我现在跑的是zigbee lighting gateway的程序,zll通过按键发送Beacon Request,可以通过ZHA组网控zll灯。我希望gateway发个指令就能使得zll灯发送Beacon Request,从而顺利组网,以及控制,不知道可否实现?

@Gary,

1,目前ZLL的默认协议栈是不会发的,必须要通过按键触发的。但是这个触发机制你可以在程序中修改,你可以让程序在初始化的时候,判断灯是否是Factory New, 如果是的,那么可以通过调用zllTarget_ClassicalCommissioningStart发送,beacon request。

2,你可以尝试下使用Intra PAN的方式,因为在还没有组网的时候,只能通过Intra PAN的方式来通信

谢谢vv的解答。但是Intra PAN的方式,找不到资料,也无从下手,希望再给些指点。

Hi VV:

我将您的代码移植到zstack2.5.1a Simple工程上,

但是发现现在调用ZDP_ActiveEPReq时,抓包时发现好像数据没发出去,

但返回值是什么SUCCESS,请问是什么原因?

并且发现,调用后协调器重启了。

上面的问题找到原因了,应该是内存的问题进入assert了。

谢谢VV的分享!另外有个问题希望您解答一下

用zll协议栈把zll灯加入到HA网络中,然后用ZLL遥控器去touchlink  ZLL灯,这时候遥控器会把zll灯从HA网络中拉出来并让ZLL灯重新建立一个新的网络。

请问当touchlink的时候能不能不让ZLL灯从原来的HA网络中脱离出来?

@Susan Yang,

可以的,但是前提是先让ZLL Remote用传统入网的方式加入到HA网络里面去。

然后在同一个网络里面,Remote和LIght进行Touchlink了

谢谢VV的解答!

我在另个帖子看到ZLL有一个master key,只有通过ZLL认证才能获得这个Key。

我现在有如下几个问题:

1、如果我用ZHA协调器,没有这个key的话就没法控制Philips hue的灯了?

2、这个key现在公开吗?你这个例子控制Philips hue的灯是如何实现的?

3、ZHA有这种key吗?如果有的话和ZLL一样吗?

有点迷惑,望指点

@Yongjie,

你的问题的答案,在上面帖子中都已经提到了。

1)ZLL的设备加入到ZHA的网络里面去,不需要master Key,只需要Trust Center Link Key就可以了,这个Key是公开的。 上面加黄色的字体

2)Master key是不公开的。ZLL支持传统入网方式,在传统入网中需要用到Trust Center Link Key,ZLL的设备把这个公开的Trust Center Link Key已经固化在程序里了,所以ZLL设备可以加入到ZHA,然后就可以实现控制了

3)ZHA没有master key。

那是不是说ZHA的设备不能用这种方式回复出厂设置?

@vv

按照上面的方法,协调器sampleswitch在处理Simple_Desc_rsp后就死机了。

ZHA版本为1.2.1

//    osal_mem_free(pSimpleDesc.simpleDesc.pAppInClusterList);
//    osal_mem_free(pSimpleDesc.simpleDesc.pAppOutClusterList);

注释掉这两句,不再死机

@小白杨,

我这边测试并没有什么问题的 。

如果屏蔽掉上面的代码的话,会造成内存泄露。

因为在ZDO_ParseSimpleDescRsp( pMsg, &pSimpleDesc );

ZDO_ParseSimpleDescBuf( msg, &(pSimpleDescRsp->simpleDesc) );函数里面,有动态分配内存,但是没有释放的。

所以需要外部来释放这个空间的。

@vv,

1、重新安装ZH 1.2.1,整合SampleSwitch代码,测试发现任然在调用osal_mem_free(pSimpleDesc.simpleDesc.pAppInClusterList)时死机,应该与硬件没关系吧?ZLL ZLight-Router未做任何修改,仅取消了xNV_RESTORE和xHOLD_AUTO_START。通过抓包发现在调用osal_mem_free之前都是正常的。

2、在SampleSwitch的OutClusterList添加了ZCL_CLUSTER_ID_LIGHTING_COLOR_CONTROL,按键调用

zclLighting_ColorControl_Send_MoveToHueCmd ( SAMPLESW_ENDPOINT, &dstAddr,
                                                                                             0x02, LIGHTING_MOVE_TO_HUE_DIRECTION_SHORTEST_DISTANCE,
                                                                                            10, FALSE, 0 );

ZLight无变化。Debug跟踪ZLight,是进入到zclColor_MoveToHueCB函数的。请问还需要其他配置吗?

问题2原因已找到。问题1待查......

你好,我用的是Z-Stack Home 1.2.2

另外你使用我给的文件直接拷贝,还是有添加过自己的东西。

@vv

Thanks for your help!

是直接拷贝的。协议栈和环境版本分别为Z-Stack Home 1.2.1,IAR 8.30。工程options->target->Number of virtual改为了8,其他均采用了默认。

@vv

问题2已经解决!

出现死机是因为当desc->AppNumInClusters为0时,osal_mem_alloc(0),所以在调用osal_mem_free(pSimpleDesc.simpleDesc.pAppOutClusterList)时出错导致死机。现修改代码如下解决问题:

if(device_list.endpoint_info.num_in_clusters != 0)
    osal_mem_free(pSimpleDesc.simpleDesc.pAppInClusterList);
if(device_list.endpoint_info.num_out_clusters != 0)
    osal_mem_free(pSimpleDesc.simpleDesc.pAppOutClusterList);

放在if ( pSimpleDesc.status == ZSuccess )条件的里面。

dear vv,

        我刷的的是zll light SampleRemote.eww eb-EndDevice,  在 zllInitiator_StartDevDisc()调用时 飞利浦HUE并没有闪烁,之后reset 也失败了。

 用的是飞利浦HUE套装中的一个灯(非开发套)。

MASTKER KEY 这么填的

#define ZLL_MASTER_KEY { 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,\
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf }
#define ZLL_MASTER_LINK_KEY { 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,\
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf }

// For production:
#define ZLL_ENC_KEY ZLL_MASTER_KEY
#define ZLL_LINK_KEY ZLL_MASTER_LINK_KEY
#define ZLL_KEY_INDEX ZLL_KEY_INDEX_MASTER

请问是哪里出了问题,用packet sniffer 抓到飞利浦hue 一直发同样的数据包,并没有任何反应。

VV

  其实  TCLK  只是用来 加密 security key   的 密钥?   是这样吗?

/* Default security key. */
-DDEFAULT_KEY="{0x02, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0D}"

  而且TCLK 是默认的,不能改的对吗?

@Mars,

是的。 

可以修改,但是改了就没办法互通互联了。所以一般都不改

你好,我把HOLD_AUTO_START在编译预选中除去,为什么还是不能加入一个网络

是用zll  light 的dome

点赞

VV你好   我在使用你的ZHA1.2.2sampleswitch例子时    发现没有触发   if(pMsg->clusterID == Active_EP_rsp)这个条件

VV大神您好,

我用飞利浦的hue灯做了这个实验,发现飞利浦的灯发出帧请求后,协调器发出响应,但是就没有后面的入网关联请求等这些了,请问是怎么回事呢?

硬件 CC2530 + CC2592, 软件和文中的说明是一样的。

已经解决了,实际上要让飞利浦的hue灯恢复到factory new状态,上文中是完全可以做到的,这里补充一下,进行touch link时,发出“恢复到factory new”这个命令必须在hue闪烁的时候,闪烁过后就无效了。。。

VV

你好!

   我测试协调器和一个节点时,有时协调器没有向节点发送这两个命令:Active Endpoints Request 和 Simple Descriptor Request,

请指点一下,哪里出了问题?谢谢!

注:协议栈ZHA1.2.2,CC2530芯片,

@yuanfeng luo,

你的Active Endpoints Rqeust和Simple Descriptor Request是在什么地方触发的?

@VV 请问我买的飞利浦hue灯泡现在不能加入飞比的网关。一般国产的飞比模块的灯都是闪5次后恢复找网状态,飞利浦不行呢?但飞利浦的灯泡只能用飞比的遥控器控制,但抓包也看不到数据,加密了。我看到有帖子说飞利浦的一旦组网就只能用遥控器退网,是吗?闪5次不行吗?我的要控制只能删除组和自删,貌似没有删除灯泡啊。我现在买的灯泡,从来就没有加入过任何协调器呀?怎么办呢?

这个帖子说zll灯泡按键>10s  就以Classic Commission Join方式找网,飞利浦灯泡上面根本没有按键啊

@lei chen9, 是的,目前只能用遥控器来复位飞利浦的灯。

具体做法你可以参考wiki page。

http://processors.wiki.ti.com/index.php/ZStack-Lighting-1.0.1_FAQ 

How can I use the ZStack-Lighting-1.0.1 Remote to reset a certified ZLL product and cause it to leave the old network

ZLL products on the market can be reset to factory new by the ZStack-Lighting-1.0.1 Remote if you enable the MASTER_KEY, the actual key is not used during the reset, you just need the correct key bitmask during the initial TouchLink phase. See section 3.1 of the "ZStack Lighting Developers Guide.pdf" for more information about enabling the MASTER_KEY. To send a reset from a ZStack-Lighting Remote you need to start a TouchLink with zllInitiator_StartDevDisc(), then when the ZLL Light flashes send the zllInitiator_ResetToFNSelectedTarget().

NOTE: There is a bug which will cause issues if the ZLL Remote is on a different channel to the ZLL Light.

To fix this you will need to add:

  zll_SetChannel( selectedTarget.rxChannel );

to the zllInitiator_ResetToFNSelectedTarget function:

ZStatus_t zllInitiator_ResetToFNSelectedTarget()
{
  if ( ( zllTransID == 0 ) || ( selectedTarget.lastRssi == ZLL_TL_WORST_RSSI ) )
  {
    return ( ZFailure );
  }
  zclLLResetToFNReq_t req;
  req.transID = zllTransID;

  zll_SetChannel( selectedTarget.rxChannel );

  return zclLL_Send_ResetToFNReq( ZLL_INITIATOR_ENDPOINT, &(selectedTarget.srcAddr), &req, initiatorSeqNum++ );
}

没有遥控器的话,hue灯泡是不是就没法恢复出厂?

我测试了一下,用一个router加入到一个hue灯泡。结果入网失败,Trust Link Key貌似不正确,我的Trust Link Key是ZigBeeAlliance09。

抓包看,我的router在Associate成功,hue灯泡(nwk Address = 0x0048)发了NWK key给我的router,但是我在ubique发现无法用trust link key去解析出来。

5684.hue2.psd

请问你的zll灯成功发送出beacon 请求了吗?我现在也遇到这种问题,请问怎么解决,谢谢

@Aries Lord,

如果你的路由加入到ZLL网络里面,那么使用传统方式入网的时候,用的trust center link key不是zigbee Alliance 09这个,是zigbee为过认证zll产品分发的link key。

这个秘钥专门为了zll网络中传统入网用的。

现在已经解决了入网和控灯的问题,不过还有几个地方貌似有bug。

1,使用ZDO_ParseSimpleDescRsp函数去获取SimpleDesc时,获取的AppDevVer值不正确。

2,使用ZDP_SimpleDescReq查询飞利浦HUE的Simple Desc值,发现端口0x0B的profile ID=0xC05E。我的HA设备发送控灯命令时用Profile ID=0xC05E的EP去发送,HUE无任何反应。我把该EP的Profile ID改为0x0104,才能正常控灯。

我用的cc2530开发板,淘宝买的。没有上下左右键,请问这个怎么改,就是不需要按键,直接开机就搜索网络并加入?

您可以在程序中屏蔽按键的,另外去除在预编译中的HOLD_AUTO_START

 这是我的ti开发板,我按照你的指示去掉了

HOLD_AUTO_START宏定义,通过抓包工具显示是可以正常入网,

请帮忙看看我的是否入网成功。如果我想实现在终端设备按下一个按键s1.然后发送数据到协调器,协调器收到后是自己的led3或者led1亮或者灭,在发送一个命令到终端设备,终端设备收到后控制自己的led1或者led3亮灭,请问该怎么操作呢?

 你好我用的你们zha版本是1.2的,我加了些打印信息,HalUARTWrite(0,data,5);//向串口写一个字符串:但是都没有打印出来,请问是是什么问题呢?

请问我在zha1.2代码中调用HalUARTWrite(0,data,5);给串口发数据,但是为啥没有输出呢?

@VV  请问如何 实现Intra Pan 方式 ?

请问VV,以下几个touch link 的问题。

1.  router 灯设备 如果是支持touchlink, 如何“辨认”  是否接受 遥控器的控制?  (还是来者不拒, 只要有人过来 scan request 就回复它 接受它的控制?)

2.  factory new 的 router 灯设备 能否建立网络? (单个factory new 的router 灯设备  和  遥控器 能否 联接起来 工作吗? 还是需要借助coordinator)

3.  入网的router 灯设备,在收到 遥控器的 scan request====network join  request 一系列动作  之后, 它接下来的动作是什么?  (离开现有网络,重新组建网络? 还是只是单独的 将遥控器 拉入网络而已?)

 

谢谢!

Hi, VV 大神

     我做了一个实验

1.我用你帖子里的方法,将 philips hue 设置为 Factory New 状态

2.加入到一个标准的 ZHA 网络中,网关是一个 NXP 的 usb dongle(因为TI没有方便的PC 上位机调试,所以直接用 NXP的dongle 更方便,如果TI有请推荐^_^)

3.在同一个 ZHA 网络中加入一个 CC2530 的 Light 设备

4.NXP 网关可以同时控制 hue & Light(cc2530), 支持 OnOff & Level Control 等等命令(此时的 Nwk Key Sequence Number = 1 )

5.我把 hue & Light(2530) 断电,再上电,Light 可以正常控制,但是 Hue 无法控制

6.我通过抓包分析无法控制的原因,抓包发现 正常控制时的Nwk Key Sequence Number = 1, Hue在断电上电后,Nwk Sequence Nubmer = 0;

也就是说,NXP 网关 & Z-stack的Light,在断电上电后,Nwk Key Sequence Number = 1;

但是 Hue 在断电上电后,Nwk Key Sequence Number = 0; 导致无法控制。但是 ubiqua 的 sniffer 都是抓包正常的,说明 nwk key 没变,只是这个 Nwk Key Sequence Number 不同,导致无法通讯

请指教,谢谢......

补充内容,我使用的这款Hue,是13年买的,里面用的也是CC2530,应该也是用的 Z-stack的

Hi VV, 

    我把 NXP 的网关,网络默认的 NWK key & Nwk Key Sequence Num 修改了,默认 Nwk Key Sequence Num = 0(原来为1)

    这样修改后,Hue 在断电上电后,仍然可以通讯(因为大家的 Nwk Key Sequence Num 都为0)

    另外,我还尝试了将 Nwk Key Sequence Num 修改为其他值,无论改成什么值,Z-Stack HA1.2.2a 的 Light,都可以在掉电上电后恢复这个 Nwk Key Sequence Num,但是 Hue 每次上电后 Nwk Key Sequence Num 都为0(Hue 为CC2530 芯片,使用了早期的 Z-stack 协议栈)

    所以我个人猜测,是否在早期的 Z-stack 版本中,对这个 Nwk Key Sequence Num 没有进行 NV 操作,后期的版本修复了这个 bug。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top