This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教:Z-Stack3.0.2 ZNP的应用

Expert 1395 points
Other Parts Discussed in Thread: Z-STACK, CC2530

芯片型号:CC2530F256

协议栈:Z-Stack3.0.2

测试:通过Z-TOOL2.0

Start Time: 2019/9/4 2:16:49

*** WARNING ***
Expected Z-Stack version (2.7.1) does not match with actual Z-Stack version (2.7.2). Z-Tool may not work properly.

<TX>02:18:31.78 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0003
Offset: 0x00
Len: 0x01
Value: . (0x03)

<RX>02:18:31.81 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: SUCCESS (0x0)

<TX>02:18:57.53 COM1 SYS_RESET (0x4100)
Type: 0x00 (HARD RESET) (0x0)

<RX>02:19:00.64 COM1 SYS_RESET_RESPONSE (0x4180)
Reason: 0x02
TransportRev: 0x02
Product: 0x00
MajorRel: 0x02
MinorRel: 0x07
HwRev: 0x02

<TX>02:21:17.02 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0057
Offset: 0x00
Len: 0x01
Value: . (0x00)

<RX>02:21:17.06 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: INVALID_PARAMETER (0x2)

<TX>02:35:40.69 COM1 SYS_OSAL_NV_WRITE (0x2109)
Id: 0x0057
Offset: 0x00
Len: 0x01
Value: . (0x00)

<RX>02:35:40.73 COM1 SYS_OSAL_NV_WRITE_SRSP (0x6109)
Status: INVALID_PARAMETER (0x2)

<TX>02:39:32.9 COM1 APP_CNF_BDB_START_COMMISSIONING (0x2F05)
CommissioningMode: (0x04) Network Formation (0x4)

<RX>02:39:39.26 COM1 APP_CNF_BDB_START_COMMISSIONING_SRSP (0x6F05)
Status: SUCCESS (0x0)

<RX>02:39:39.26 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:39.27 COM1 APP_CNF_BDB_COMMISSIONING_NOTIFICATION (0x4F80)
Status: 1 (0x1)
Commissioning Mode: 0x02 (Formation) (0x2)
Commissioning Mode: 0x04 (Network Formation) (0x4)

<RX>02:39:39.53 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:39.79 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.06 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.32 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:40.59 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 8 (0x8)

<RX>02:39:41.15 COM1 ZDO_STATE_CHANGE_IND (0x45C0)
State: 9 (0x9)

<RX>02:39:41.15 COM1 APP_CNF_BDB_COMMISSIONING_NOTIFICATION (0x4F80)
Status: 0x00 (Success) (0x0)
Commissioning Mode: 0x02 (Formation) (0x2)
Commissioning Mode: 0 (0x0)

<TX>02:40:35.8 COM1 UTIL_GET_DEVICE_INFO (0x2700)

<RX>02:40:35.81 COM1 UTIL_GET_DEVICE_INFO_RESPONSE (0x6700)
Status: SUCCESS (0x0)
IEEEAddr: 0x00124B0007665581
ShortAddress: 0x0000
DeviceType: COORDINATOR, ROUTER, END_DEVICE (0x7)
DeviceState: DEV_ZB_COORD (0x9)
NumAssocDevices: 0x00
AssocDevicesList

做了以上操作,也可以获取设备信息

看论坛帖子说下来该注册端点和发送数据。问题如下:

1、端点注册AF_REGISTER

EndPoint: 
AppProfID: 
AppDeviceId: 
AppDevVer: 
LatencyReq: 
AppNumInClusters:
AppInClusterList: 
AppNumOutClusters: 
AppOutClusterList: 

2、AF_DATA_REQUEST (0x2401)

DstAddr: 
DestEndpoint: 
SrcEndpoint: 
ClusterID: 
TransID: 
Options: 
Radius: 
Len: 
Data: 

以上参数怎么获取?该怎么填,有那些资料可以参考?

3、终端用的是Z-Stack 3.0.2  SampleLight例程,把控制回路增加到三路,目前用SampleSwitch作协调器

可以控制其中的一路,若用ZNP协调器控制是不是要注册三个端点?谢谢!

  • 事件定义必須是bit flag,可以修改如下

    #define WD_END_EVT 0x0004//温度事件
    #define SD_END_EVT 0x0008//湿度事件
    #define PM_END_EVT 0x0010//PM2.5事件

    關於report的部份,看起來你沒有作binding所以沒發出來
  • 您好!首先感谢您的回复和帮助。
    1、现在按您的参数修改后,PM2.5的时间事件起作用了,可以串口输出了。


    2、之前是在函数void zclSampleTemperatureSensor_Init( byte task_id )最后一行定义了:
    zdpExternalStateTaskID = zclSampleTemperatureSensor_TaskID;
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING);
    现在通过按键:
    if ( keys & HAL_KEY_SW_5)
    {
    HalLedBlink(HAL_LED_2,12,50,1000);//12次1S
    bdb_resetLocalAction();
    HalLedBlink(HAL_LED_2,12,50,1000);//12次1S
    zdpExternalStateTaskID = zclSampleTemperatureSensor_TaskID;
    bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING); 
    }
    在1707行看到了Confirm key,SUCCESS 貌似可以绑定了,但是感觉只发送了几次数据就没再发送了,抓包档:20200104.rar

                                                                                                                    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • sniffer log理頭沒看到绑定,除了設備調用bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING); 外,你zc也需要調用bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING); 才能完成绑定
  • 您好!首先感谢您的回复和帮助!刚刚修改了下代码,看了下之前没才用长按、短按判断,暂时修改成两个按键,一个做恢复出厂,一个做绑定。现在做了两次入网操作,抓包档120200104_1.rar在1993行附近看到有密钥确认,抓包档220200104_2.rar在813行附近看到有密钥确认。

                                                                                                                    周末打扰您的休息,再次致以歉意及由衷的感谢,谢谢您的支持和帮助!谢谢!

  • sniffer log理頭還是沒看到绑定,你協調器同時也有調用bdb_StartCommissioning(BDB_COMMISSIONING_MODE_NWK_STEERING | BDB_COMMISSIONING_MODE_FINDING_BINDING)嗎?

  •        是的,协调器也执行了APP_CNF_BDB_START_COMMISSIONING操作,因为我目前是用串口助手来操作所以发送的16进制FE 01 2F 05 02 29之前开关也是这么操作就绑定了的。

                                                                                                                                                再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 你协调器上有支持temperature measurement cluster?

  •        这个我还不太清楚哦,我记得当时用的是Z-Stack 3.0.2/Projects/zstack/ZNP这个例程,这个代码不支持temperature measurement cluster么?那我若需要实现环境监测这些数据,该怎么实现呢?

                                                                                                                 再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 端点注册AF_REGISTER時AppOutClusterList加上temperature measurement cluster
  • 您好!

            “端点注册AF_REGISTER時AppOutClusterList加上temperature measurement cluster”是在协调器添加还是在终端添加,有例程或示例么?另外以后我想增加一些电力数据采集比如:电压、电流、功率因数、实时功率、用电量等。 这些只要按照某前环境监测数据的处理方法就可以了吧?

                                                                                                                          再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • “端点注册AF_REGISTER時AppOutClusterList加上temperature measurement cluster”是在协调器添加, 终端添加在InCluster、电力数据采作法類似
  • 您好!首先感谢您的回复和帮助。我会尝试去做修改,有不明白的再来请教!再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助。我尝试做了以下修改但是没能成功;
    1、终端:我在zcl_sampletemperaturesensor_dat.c文件中进行了以下修改

    在zcl.h文件中进行了如下操作:

    但是在编译是出现报错:Error[Pe020]: identifier "TEMPERATURE_MEASUREMENT_CLUSTER" is undefined 

    2、协调器(ZNP)代码里没找到集群列表,只在AF.h文件中找到了:

    是在这里面添加么?
                                                                                                                             再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助。我尝试做了以下修改但是没能成功;
    1、终端:我在zcl_sampletemperaturesensor_dat.c文件中进行了以下修改

    在zcl.h文件中进行了如下操作:

    但是在编译是出现报错:Error[Pe020]: identifier "TEMPERATURE_MEASUREMENT_CLUSTER" is undefined
    2、协调器(ZNP)代码里没找到集群列表,只在AF.h文件中找到了:

    是在这里面添加么?

                                                         再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 1. 在zcl_sampletemperaturesensor_dat.c文件中已經定义了ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT、你不須再定义

    2. 要從host透過AF_REGISTER去定义

  • 您好!首先感谢您的回复和帮助。

    1、那我目前就先不用管终端的代码了,还按原来的代码就可以是吧?

    2、“從host透過AF_REGISTER去定义”,我是不是按照Z-Stack Monitor and Test API文档上

    这部分的内容去尝试设置呢?


    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 1. 是的
    2. 是的
  • 好的,感谢您的回复和帮助。我会尝试去做设置,有不明白的再来请教!再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助。

    1、我尝试做了从新入网,及AF_REGISTER操作,但是感觉依然没能正常工作。如下图:

    附抓包档(在第203行有看到密钥确认):20200106_1.rar

    请帮分析下是我设置的信息哪里有不对,或操作错误的。该怎么修正呢。

    2、在1607行终端818E连续发送数据请求而没有收到Ack,之后Z-Tool显示警告信息如下:

    这种是什么原因造成的?该怎么避免呢?

                       再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT是0x0402,我沒看到他出現在你的AppOutClusterList
  • 您好!首先感谢您的回复和帮助。不好意思,我设置的是0402因为少加了x发送出去就变成0192了,现在已经修正了,信息如下:

    <TX>11:16:15.07 COM3 AF_REGISTER (0x2400)

    EndPoint: 0x07
    AppProfID: 0x0104
    AppDeviceId: 0x0302
    AppDevVer: 0x00
    LatencyReq: NO_LATENCY_REQS (0x0)
    AppNumInClusters: 0x03
    AppInClusterList: 0x0000, 0x0003, 0x0402
    AppNumOutClusters: 0x01
    AppOutClusterList: 0x0003

    <TX>11:16:26.17 COM3 AF_REGISTER (0x2400)
    EndPoint: 0x08
    AppProfID: 0x0104
    AppDeviceId: 0x0302
    AppDevVer: 0x00
    LatencyReq: NO_LATENCY_REQS (0x0)
    AppNumInClusters: 0x03
    AppInClusterList: 0x0000, 0x0003, 0x0402
    AppNumOutClusters: 0x01
    AppOutClusterList: 0x0003

    Z-tool收到的信息:

    <RX>11:18:49.34 COM3 AF_INCOMING_MSG (0x4481)
    GroupID: 0x0000
    ClusterID: 0x0003
    SrcAddr: 0x5310
    SrcEndpoint: 0x09
    DstEndpoint: 0x09
    WasBroadcast: 0x01
    LinkQuality: 0x73
    SecurityUse: 0x00
    Timestamp: 0x001621E7
    TransSeqNumber: 0x00
    Len: 0x03
    Data: ... (0x11, 0x0C, 0x01)

    <RX>11:18:49.35 COM3 AF_INCOMING_MSG (0x4481)
    GroupID: 0x0000
    ClusterID: 0x0003
    SrcAddr: 0x5310
    SrcEndpoint: 0x09
    DstEndpoint: 0x08
    WasBroadcast: 0x01
    LinkQuality: 0x73
    SecurityUse: 0x00
    Timestamp: 0x001621E7
    TransSeqNumber: 0x00
    Len: 0x03
    Data: ... (0x11, 0x0C, 0x01)

    <RX>11:18:49.36 COM3 AF_INCOMING_MSG (0x4481)
    GroupID: 0x0000
    ClusterID: 0x0003
    SrcAddr: 0x5310
    SrcEndpoint: 0x09
    DstEndpoint: 0x07
    WasBroadcast: 0x01
    LinkQuality: 0x73
    SecurityUse: 0x00
    Timestamp: 0x001621E7
    TransSeqNumber: 0x00
    Len: 0x03
    Data: ... (0x11, 0x0C, 0x01)

    抓包档:20200106_2.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 可是你的AppOutClusterList裡頭還是沒有看到0x0402
  • 您好!首先感谢您的回复和帮助。我看了下串口监视器发出的和Z-tool显示的是一致,怀疑是电脑问题,刚才发帖上传图片一直出错,后来才把文字贴上来;刚刚把电脑重启了一下,又做了两次入网操作,第一次用Z-Tool,第二次用串口助手直接发送字符串;截图及抓包档如下:

    第一次:Z-tool截图

    串口监视截图:

    第一次抓包档:20200106_3.rar

    第二次:直接用串口助手发送:fe 11 24 00 08 04 01 02 03 00 00 03 00 00 03 00 02 04 01 03 00 3d

    抓包档:20200106_4.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 我跟你說0x0402要加在協調器的AppOutClusterList理頭,為什麼你是加到AppInClusterList?
  •      不好意思,之前疏忽了,请见谅!修改后又做了几次测试,截图如下:

    抓包档:5.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 抓包理沒看到binding,你可以透過ZTOOL用ZDO_BIND_REQ去下作binding

  • 好的,感谢您的回复和帮助,下面这些参数我该从哪里获取呢?
    DstAddr:0x0
    SrcAddress:0x0
    SrcEndpoint:0x0
    ClusterID:0x0
    BindAddrMode:0x00 (ADDESS_ NOT_ FRESENT)
    BindAddr:Byte[] Array
    BindEndpoint:0
    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助。我看了下之前的状态,终端会连续发送12次“ZCL Identify: Identify Query, Seq:” 而且之前的簇ID一直是03,刚才在data.c文件里修改了一下,刚才入网在Confirm key,SUCCESS 和 Premit join Request提示之后就没有再重复出现ZCL Identify: Identify Query, Seq,不知道是不是正确的,请帮看下。附抓包档:20201006_5.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 你有透過ZTOOL用ZDO_BIND_REQ去作binding了嗎?
  • 没有,不知道那些参数怎么获取,只是修改了代码。现在还不行,还没绑定是吧?再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 对、須要绑定

  • 您好!首先感谢您的回复和帮助。我尝试做了绑定操作,截图如下:

    也看到了:

    <RX>11:12:16.35 COM3 ZDO_BIND_RSP (0x45A1)

    请问我在代码里设置了3个端点,分别是端点7,8,9我是不是分别都要去绑定一下呢?

    附抓包档:20200107_1.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 是分别都要去绑定
  • 您好!首先感谢您的回复和帮助。我分别绑定了3个端点(截图如下):

    我协调器的信息如下:

    Status: SUCCESS (0x0)

    IEEEAddr: 0x 00 12 4B 00 07 66 55 81
    ShortAddress: 0x0000
    DeviceType: COORDINATOR, ROUTER, END_DEVICE (0x7)
    DeviceState: DEV_ZB_COORD (0x9)
    NumAssocDevices: 0x03
    AssocDevicesList: 0x4587, 0x81E8, 0x45B1

    但是无任何数据显示,清帮我看下是哪里设置有误?或者代码中上传数据用的语句错误了么?(代码中上传数据的语句如下)

    uint8 status=bdb_RepChangedAttrValue(SAMPLETEMPERATURESENSOR2_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT,Humidity);

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 先試試原始SampleTemperatureSensor例程,看看綁定成功後會不會發送temperature出來
  • 您好!首先感谢您的回复和帮助。我用官方源代码,只在初始化部分加入了绑定:

    也对芯片进行了擦除:

    在抓包档的第14935行开始出现报告属性的提示,但Z-TOOL一直还是没有数据。

    附抓包档:20200107_2.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助。

               我分别用官方源代码和我自己修改过的代码都测试了下,目前Z-Tool一直还是不能显示,只在抓包档的“属性报告”里可以看到:“Measured Value:20摄氏度”。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 抓包档的“属性报告”里可以看到:“Measured Value:20摄氏度”,應該就是成功了
  •      是的,官方源代码是显示端点是8,我自己修改过的显示端点是7,刚刚用串口助手测试,每当有属性报告产生时协调器串口会有打印,如下:
            FE 1C 44 81 00 00 02 04 7C B7 07 07 00 93 00 B7 E5 9D 00 00 08 08 6F 0A 00 00 29 D0 07 7C B7 1D 05 

         我回头看下文档,看下怎么解析数据。
    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 解析数据也需要看下ZCL文档
  • 好的,回头我看下ZCL文档,然后再看下我的代码部分,目前我注册三个端点只有一个端点可以上传。我看下到时有什么不明白的再来请教!

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 您好!首先感谢您的回复和帮助!现在可以在Z-TOOL看到三个端点的数据了,目前有两个问题请教如下:

    1、时间事件不起作用,若在初始化函数里:

    #ifdef BDB_REPORTING
    bdb_RepAddAttrCfgRecordDefaultToList(SAMPLETEMPERATURESENSOR_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, ATTRID_MS_TEMPERATURE_MEASURED_VALUE, 0, 10, reportableChange);
    bdb_RepAddAttrCfgRecordDefaultToList(SAMPLETEMPERATURESENSOR2_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, ATTRID_MS_TEMPERATURE2_MEASURED_VALUE, 0, 10, reportableChange2);
    bdb_RepAddAttrCfgRecordDefaultToList(SAMPLETEMPERATURESENSOR3_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, ATTRID_MS_TEMPERATURE3_MEASURED_VALUE, 0, 10, reportableChange3);
    #endif

    初始化这三句,即使在时间事件里不调用:bdb_RepChangedAttrValue(SAMPLETEMPERATURESENSOR_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT,则属性报告会在同一秒内(我的时间事件设置的是3秒、6秒、9秒)发送到Z-Tool, 若不初始化,在时间事件里调用:bdb_RepChangedAttrValue(SAMPLETEMPERATURESENSOR_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, ATTRID_MS_TEMPERATURE_MEASURED_VALUE);也没有任何数据显示。

    2、我设置了不同的数值,目前在属性报告里看到的值是相同的,Z-tool显示也一样,如下图:


    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 建議你先抓到看看都收到了什麼東西
  • 您好!首先感谢您的回复和帮助。

    我对协议分析不太懂,只看到了属性栏里的测量值。附抓包档:20200108_1.rar

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 抓包有看到endpoint 7/8/9都送出temperature report,所以你的問題是?

  • 您好!首先感谢您的回复和帮助!

    目前有两个问题请教如下:
    1、时间事件不起作用,若在初始化函数里:

    调用,则端点7、8、9的数据会同一个时间发出,没按时间事件设定的时间间隔设定去发送数据(我设定的是3s、6s、9s),若在初始化里不调用这三句在时间事件里调用:

    bdb_RepChangedAttrValue(SAMPLETEMPERATURESENSOR_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, ATTRID_MS_TEMPERATURE_MEASURED_VALUE);
    bdb_RepAddAttrCfgRecordDefaultToList(SAMPLETEMPERATURESENSOR_ENDPOINT, ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT, ATTRID_MS_TEMPERATURE_MEASURED_VALUE, 0, 10, reportableChange);

    都没有数据发出,这两句都分别测试过了。

    2、我设置了不同端点不同的数值,目前在属性报告里看到的值都是相同的,都是第一个端点的数值。

    再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!

  • 這部份你得要自己去調試你的程序看看問題在哪裡
  • 好的,我自己再看看程序哪里有问题。再次致以由衷的感谢,谢谢您的支持和帮助!谢谢!