2017/05/23

[ZigBee Pro] ZCL之中Add Scene的封包內容設定

前陣子嘗試把ZCL Scenes Cluster(0x0005)之中的Add Scene(0x00)實作,但一直看不懂ZCL文件上的意思。



要設定Add Scene的話,必須要把Extension field sets帶進去;在一連串的嘗試之後,發現TI E2E Community上有類似的問題討論。

所以在Extension field sets的設定上,要注意兩件事
1. bytes要反著寫,譬如0x0300要寫成 0x00 0x03放進去sets之中
2. 一組{ClusterID, length, {extension field set}},不需要特別放進command id,意思是Add Scene寫法是默認的,譬如Level Cluster只有Level可以設定,所以只要寫{0x0008, length, 0x55}即可

因此假設今天要設定一個Scene是
1. 打開燈ON
2. 亮度設定為0x55
3. 顏色設定為ColorX, ColorY: {0xA337, 0x5424}

封包內容就寫成
uint8_t extension_fields[n_extensionfields];

extension_fields[0] = 0x06; // 0-1: cluster 0x0006
extension_fields[1] = 0x00;
extension_fields[2] = 0x01; // 2: length of onOff attributes
extension_fields[3] = 0x01; // 3: value of onOff ON
extension_fields[4] = 0x08; // 4-5: cluster 0x0008
extension_fields[5] = 0x00;
extension_fields[6] = 0x01; // 6: length of currentLevel attributes
extension_fields[7] = 0x55; // 7: value of currentLevel: 0x55
extension_fields[8] = 0x00; // 8-9: cluster 0x0300
extension_fields[9] = 0x03;
extension_fields[10] = 0x04; // 10: length of currentX/currentY attributes
extension_fields[11] = 0x37; // 11-12: value of currentX: 0xA337
extension_fields[12] = 0xA3;
extension_fields[13] = 0x24; // 13-14: value of currentY: 0x5424
extension_fields[14] = 0x54;

然後就可以利用這個封包,對特定的ZigBee Device設定Scene了。

ZCL的Specification,可以從這裡下載。

沒有留言:

張貼留言