我已按照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);
有什么想法吗?
由于
答案 0 :(得分:2)
Zigbee数据包数据很小。此外,MeasuredValue的单位是“百分之几摄氏度”。因此,如果您测得的温度值为26摄氏度,那么您的数据缓冲区将如下所示:28 0A
。要转换为摄氏温度,您可以使用:
double temperature = (double)((int16_t)(data[1] << 8) | (int16_t)data[0]) / 100.0;