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.

[参考译文] CC2652RSIP:ZStack、bdbRepChangeAttrValueReq ()未触发报告

Guru**** 665180 points
Other Parts Discussed in Thread: SIMPLELINK-CC13XX-CC26XX-SDK
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1228134/cc2652rsip-zstack-bdbrepchangeattrvaluereq-not-triggering-reports

器件型号:CC2652RSIP
Thread 中讨论的其他器件:SIMPLELINK-CC13XX-CC26XX-SDK

通过 ZStack、我将尝试发送由计时器触发的自定义温度报告。

我从 zed_temperaturesensor 示例开始、 添加了计时器(它能够成功地触发通过 SPI 读取的温度)、并添加了  Zstackapi_BdbRepAttrChangeValueReq ()来尝试发送数据。 测量值每秒变化超过300次。 固件始终根据设置为 REQ.maxReportInt 并使用 Zstackapi_BdbRepAddAttrCfgRecordDefaultToListReq ()设置的值发送定期更新的报告 、如果 maxReportInt 为10、则每10秒我会收到一个新报告、如果为50、50、以此类推。 同时, 我 永远不会收到任何其他报告,既不是由函数  Zstackapi_BdbRepChangeAttrValueReq ()触发,也不是由 reportableChange 触发。 如果  maxReportInt 设置为 BDBREPORTING_NOPERIODIC (0x0000)、则根本没有接收到报告。

我已经玩过 Req.minReporInt,设置为 BDBREPORTING_Nolimit (0x0000)应该可以,但我也设置了不同的值。 我也玩过 reportableChange,设置为 [00,00,00,00],设置为 [01,00,00,00]和 [2C,01,00,00]。

你有什么建议吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Simone、

    我评估了示例 zed_temperaturesensor 并使用 SIMPLELINK-LOWPOWER-F2-SDK (也称为 SIMPLELINK-CC13XX-CC26XX-SDK) v7.10对 zcl_sampletemperaturesensor.c 进行了以下更改:

    uint8_t reportableChange[] = {0x01, 0x00, 0x00, 0x00}; // 0x2C01 is 300 in int16_t
    //...
      Req.attrID = ATTRID_TEMPERATURE_MEASUREMENT_MEASURED_VALUE;
      Req.cluster = ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT;
      Req.endpoint = SAMPLETEMPERATURESENSOR_ENDPOINT;
      Req.maxReportInt = BDBREPORTING_NOPERIODIC;
      Req.minReportInt = BDBREPORTING_NOLIMIT;
      OsalPort_memcpy(Req.reportableChange,reportableChange,BDBREPORTING_MAX_ANALOG_ATTR_SIZE);
    
      Zstackapi_bdbRepAddAttrCfgRecordDefaultToListReq(appServiceTaskId,&Req);

    因此、每次 ZED UI 更改温度传感器的测量值时、都会向 ZC 发送属性报告。  您可以查看项目 README 以了解有关 UI 和典型演示用法的更多信息。  UI 会从 zclSampleTemperatureSensor_UiActionChangeTemp 更改温度测量值:

              zclSampleTemperatureSensor_MeasuredValue = zclSampleTemperatureSensor_MeasuredValue + 100;  // considering using whole number value
    #ifdef BDB_REPORTING
          Req.attrID = ATTRID_TEMPERATURE_MEASUREMENT_MEASURED_VALUE;
              Req.cluster = ZCL_CLUSTER_ID_MS_TEMPERATURE_MEASUREMENT;
              Req.endpoint = SAMPLETEMPERATURESENSOR_ENDPOINT;
    
              Zstackapi_bdbRepChangedAttrValueReq(appServiceTaskId,&Req);
    #endif

    我建议您进行相同的评估、并尝试为您的应用程序重新创建类似的结果。  可能需要进行进一步调试、以确认正在执行计时器到期代码并且 bdb_RepChangedAttrValue 已完成、没有任何错误或意外行为。   以下是一些相关的 E2E 主题:

    https://e2e.ti.com/f/1/t/1183514
    https://e2e.ti.com/f/1/t/1134659
    https://e2e.ti.com/f/1/t/1169911

    此致、
    Ryan