Zstack home 1.2.2a相容對接ZHA標準裝置和2.5.1a私有裝置
阿新 • • 發佈:2018-11-20
前言
基礎
疑問
疑問解答
具體實施步驟:
第一步:通訊基礎:端點號相同+簇包含+Profile ID相同
1.將自己做的2.5.1a的非標準的產品端點號改成和標準的一樣,我這裡都是1。
#define SAMPLEAPP_ENDPOINT 1 //2.5.1a的SampleApp.h裡面
#define SAMPLELIGHT_ENDPOINT 1 //標準的我的是在zcl_samplelight.h裡面
2.將2.5.1a裡面用到的輸入和輸出簇,新增到標準的裡面去,切記取值不要和標準的相同。
const cId_t zclSampleLight_InClusterList[] =
{
ZCL_CLUSTER_ID_GEN_BASIC,
ZCL_CLUSTER_ID_GEN_POWER_CFG,
ZCL_CLUSTER_ID_GEN_IDENTIFY,
ZCL_CLUSTER_ID_GEN_GROUPS,
ZCL_CLUSTER_ID_GEN_SCENES,
ZCL_CLUSTER_ID_GEN_ON_OFF,
ZCL_CLUSTER_ID_GEN_ALARMS,
ZCL_CLUSTER_ID_SS_IAS_ZONE,
SAMPLEAPP_PERIODIC_CLUSTERID,
SAMPLEAPP_FLASH_CLUSTERID,
SAMPLEAPP_P2P_CLUSTERID
};
const cId_t zclSampleLight_OutClusterList[] =
{
ZCL_CLUSTER_ID_GEN_BASIC,
ZCL_CLUSTER_ID_GEN_POWER_CFG,
ZCL_CLUSTER_ID_GEN_IDENTIFY,
ZCL_CLUSTER_ID_GEN_GROUPS,
ZCL_CLUSTER_ID_GEN_SCENES,
ZCL_CLUSTER_ID_GEN_ON_OFF,
ZCL_CLUSTER_ID_GEN_ALARMS,
ZCL_CLUSTER_ID_SS_IAS_ZONE,
SAMPLEAPP_PERIODIC_CLUSTERID,
SAMPLEAPP_FLASH_CLUSTERID,
SAMPLEAPP_P2P_CLUSTERID
};
3.非標的profile ID修改成標準的0x0104。
#define SAMPLEAPP_PROFID 0x0104 //2.5.1a的SampleApp.h裡面
注:
第二步:自定義協議禁止ZCL解析,完成自定義解析。
待續。。。。
結束
很多初學者問,學習zigbee找誰幫忙,請在論壇發帖留言 有問題請加QQ群671139854,裡面裝逼的zigbee大佬太多,只要能接受大佬的懟,就能解決一切zigbee雜症。
爭取早日走完這條不歸路。
- 寫不歸路前,先鳴謝各位大哥:專哥,龍哥,怪獸哥,臨哥,安聯德哥等各位zigbee的帶頭大哥,帶我走上了zigbee的不歸路。
- 我儘量不插入圖片,無線的這個論壇有限制,遊客看不了。
基礎
- 協議棧版本:zstack home 1.2.2a
- SoC方案:CC2530F256
- 標準對接產品:小米的門磁(很多小大哥說小米的不標準,大家理解不同,小米門磁搞的是開關,說標準也是標準,說不標準也行,不逼逼)
- 非標對接產品:自己做的,基於zstack2.5.1a開發的私有協議產品。
疑問
- 我打算在1.2.2a上面註冊一個任務,專門處理2.5.1a的非標準產品,我的理解是可行的。
- 新任務中註冊新的端點號,因為標準的產品廠家用的是1,我自己的用的是8,這種方向對不對?
- 新任務的無線收發是跳過ZCL的,需要在1.2.2a中有特殊處理嗎?還是直接註冊新的事件函式就行了?
疑問解答
- 疑問1:方法不對的,因為非標的資料會通過ZCL上報。
- 疑問2:方法也是不靠譜的,因為endpoint最好相同,否則會出現繫結等大坑。
- 疑問3:無線的接收不方便跳過ZCL,無線的傳送方便跳過,直接AF。不用註冊新事件,直接在ZCL事件中阻止非標zigbee產品的上報。
具體實施步驟:
第一步:通訊基礎:端點號相同+簇包含+Profile ID相同
1.將自己做的2.5.1a的非標準的產品端點號改成和標準的一樣,我這裡都是1。
#define SAMPLEAPP_ENDPOINT 1 //2.5.1a的SampleApp.h裡面
#define SAMPLELIGHT_ENDPOINT 1 //標準的我的是在zcl_samplelight.h裡面
2.將2.5.1a裡面用到的輸入和輸出簇,新增到標準的裡面去,切記取值不要和標準的相同。
const cId_t zclSampleLight_InClusterList[] =
{
ZCL_CLUSTER_ID_GEN_BASIC,
ZCL_CLUSTER_ID_GEN_POWER_CFG,
ZCL_CLUSTER_ID_GEN_IDENTIFY,
ZCL_CLUSTER_ID_GEN_GROUPS,
ZCL_CLUSTER_ID_GEN_SCENES,
ZCL_CLUSTER_ID_GEN_ON_OFF,
ZCL_CLUSTER_ID_GEN_ALARMS,
ZCL_CLUSTER_ID_SS_IAS_ZONE,
SAMPLEAPP_PERIODIC_CLUSTERID,
SAMPLEAPP_FLASH_CLUSTERID,
SAMPLEAPP_P2P_CLUSTERID
};
const cId_t zclSampleLight_OutClusterList[] =
{
ZCL_CLUSTER_ID_GEN_BASIC,
ZCL_CLUSTER_ID_GEN_POWER_CFG,
ZCL_CLUSTER_ID_GEN_IDENTIFY,
ZCL_CLUSTER_ID_GEN_GROUPS,
ZCL_CLUSTER_ID_GEN_SCENES,
ZCL_CLUSTER_ID_GEN_ON_OFF,
ZCL_CLUSTER_ID_GEN_ALARMS,
ZCL_CLUSTER_ID_SS_IAS_ZONE,
SAMPLEAPP_PERIODIC_CLUSTERID,
SAMPLEAPP_FLASH_CLUSTERID,
SAMPLEAPP_P2P_CLUSTERID
};
3.非標的profile ID修改成標準的0x0104。
#define SAMPLEAPP_PROFID 0x0104 //2.5.1a的SampleApp.h裡面
注:
- 完成上面三條後就能接收到資料了,但是資料被ZCL搞去了,出現“ZCL瞎雞巴解析”,因為你畢竟是自定義的,ZCL並不知道,他還是按照ZCL格式解析,就他媽亂了。
- 整個zigbee的入網流程不需要做任何改動,因為ZCL是應用層的規範。
第二步:自定義協議禁止ZCL解析,完成自定義解析。
待續。。。。
結束
很多初學者問,學習zigbee找誰幫忙,請在論壇發帖留言 有問題請加QQ群671139854,裡面裝逼的zigbee大佬太多,只要能接受大佬的懟,就能解決一切zigbee雜症。
爭取早日走完這條不歸路。