zigbee模块回调函数与ZCL规范不兼容

时间:2015-06-26 03:03:14

标签: zigbee wireless-connection

我已按照ZCL报告实现了能够接收传感器发送数据的功能。

在SDk中,它定义如下:

void ZbZclReportFunc{
  struct ZbZclClusterT * clusterPtr,
  zbApsdeDataInt * dataIndPtr,
  uint16_t attributeId,
  const uint8_t * data
}

通过实现如上所示的回调函数,我能够接收除数据之外的所有信息。

在ZCL规范中,温度测量集群定义了其“MeasuredValue”有符号16位整数。

我使用以下格式打印数据:

printf("Degree: 0x%04x", *data);

正如我所料,显示的数据为“0x002b”作为示例。

通过将其转换为有符号的16位整数,它没有帮助。

printf("Degree: 0x%04x", (int16_t)*data);

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:2)

Zigbee数据包数据很小。此外,MeasuredValue的单位是“百分之几摄氏度”。因此,如果您测得的温度值为26摄氏度,那么您的数据缓冲区将如下所示:28 0A。要转换为摄氏温度,您可以使用:

double temperature = (double)((int16_t)(data[1] << 8) | (int16_t)data[0]) / 100.0;