2015-06-26 45 views
2

我遵循ZCL報告來實現能夠接收傳感器發送的數據的功能。zigbee模塊回調函數與ZCL規格不兼容

在SDK,它被定義爲如下:

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

通過實施如上述所示的回調函數,我能夠接收的所有信息,除了數據。

在ZCL規範中,溫度測量集羣定義了其「測量值」帶符號的16位整數。

打印出使用以下格式中的數據:

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

正如我期望的那樣,所示的數據是「0x002b」爲例。

通過將其轉換爲帶符號的16位整數,它沒有幫助。

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

任何想法?

謝謝

回答

2

Zigbee分組數據是小小的Endian。此外,MeasuredValue的單位是「百分之幾攝氏度」。因此,如果您的測量溫度值爲26攝氏度,則您的數據緩衝區將如下所示:28 0A。要轉換爲攝氏你可以使用:

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

+0

感謝。溼度是否以相同的方式進行轉換? – Sam