天天看點

Zstack home 1.2.2a相容對接ZHA标準裝置和2.5.1a私有裝置

關注嘉友創科技公衆号

前言

  • 寫不歸路前,先鳴謝各位大哥:專哥,龍哥,怪獸哥,臨哥,安聯德哥等各位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[] =

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雜症。

争取早日走完這條不歸路。