• ZHA profile与ZLL profile的一个例子


    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

    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 InstrumentsZ-Stack Home 1.2.2.42930ProjectszstackHomeAutomationSampleSwitchCC2530DB

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

    编译并下载到SmartRF05EB开发板,

    2) 利用CC Debugger和SmartRF Flash Programmer下载ZllLight-ZLIGHT.hex文件到ZLL Light,hex文件位于C:Texas InstrumentsZ-Stack Lighting 1.0.2ProjectszstackLLSampleAppCC253xhex 

    注: 如果是从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)
    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

  • 相关阅读:
    jupytr notebook远程登录Linux服务器,切换conda虚拟环境
    Linux 命令su 和 su -执行机制的区别
    Shell编程知识4-su详细
    Shell编程知识3
    Shell编程知识2
    Ubuntu # echo $PATH //查看当前用户的环境变量--》修改配置环境变量
    Util和Helper类
    Qt QBarSeries简易柱状图教程
    解决QIcon引用qrc不显示图片
    qt调用quit()后未结束线程解决方案
  • 原文地址:https://www.cnblogs.com/yelin/p/6033399.html
Copyright © 2020-2023  润新知