由于各家藍牙應用層協議千差萬別,為了將不同的藍牙應用層協議接入到統一框架,勢必需要有一個適配層來抹平各個協議的差異。如阿里巴巴IoT就定義了一套應用層的通信協議:Breeze。

背景信息

通常,各家的藍牙應用層協議都會定義如下功能。

  • 藍牙廣播:廣播設備相關信息,如廠家信息,設備型號信息,設備MAC地址等。
  • 數據通信:包括數據分段,組包等功能。
因此,阿里云IoT在藍牙接入框架中引入了藍牙通信插件管理系統(即Link Protocol Bridge System,簡稱LPBS)。藍牙原理圖

藍牙通信插件管理系統(LPBS)定義了一套抽象的接口,可以將不同的藍牙協議設備接入到統一框架中,從而可以按阿里云IoT定義的物模型對藍牙設備進行控制以及感知。每一個具體的實現我們稱為:插件。

操作步驟

  1. 獲取身份信息。
    智能設備需要在阿里云IoT平臺獲得一個身份后,才能將某個智能設備歸屬到某一個用戶賬號下,進一步地可以實現設備數據的上下云以及設備地相關控制。在阿里云IoT平臺,設備身份由以下二者確定。
    • ProductKey是一串隨機字符串,可以理解為設備的產品型號,在生活物聯網平臺注冊產品時由阿里云IoT平臺頒發。
    • DeviceName是阿里云IoT平臺特有的設備的ID。與ProductKey共同確定一個IoT平臺的唯一設備。DeviceName可以是阿里云IoT平臺生成的一串隨機字符串,也可以是廠家在阿里云IoT平臺錄入設備時指定的字符串。

    智能設備在出廠時,廠家會給設備頒發一個全球唯一的ID來標識該設備。此ID一般由兩部分組成。

    • ProductModel,即產品型號,如某冰箱型號:BCD-320WGPZM。
    • DeviceId,即設備ID,一般為Mac或者SN。

    智能設備在接入阿里云IoT平臺時需要完成私有ID跟阿里云IoT平臺頒發的ID的映射。

    1. 創建產品。

      在生活物聯網平臺上,廠家(或ISV)可以新增一個產品,在注冊產品時阿里云IoT平臺會給該產品頒發一個ProductKey來標識此產品。

      創建產品
    2. 錄入設備ID。

      廠家(或ISV)可以將該產品下的設備批量錄入DeviceId。阿里云IoT平臺會為該批次設備頒發設備身份,并以錄入的DeviceId作為設備的DeviceName使用。

  2. 數據格式轉換腳本。
    第三方藍牙設備在開發時并沒有按物模型來定義設備的功能,因此需要翻譯成藍牙設備能夠理解的數據格式,否則,藍牙設備會無法識別。例如以開燈這一場景舉例,按物模型封裝的消息格式如下所示。
    {
    "id":123,
    "version":"1.0.0",
    "method":"thing.service.property.set",
    "params":{
    "LightSwitch":1
    },
    }
    編輯腳本
  3. 開發藍牙通信插件管理系統中的插件。
    通信插件抽象接口分為三個部分:
    • 藍牙設備發現接口

      開發者需要將廣播中的ProductModel轉換成產品注冊時獲取的ProductKey,Mac地址可以直接當做DeviceName使用。

      在生活物聯網的控制臺的量產管理中購買激活碼時,選擇批量上傳的方式生成激活碼,同時上傳Mac地址作為DeviceName。

      批量上傳
    • 設備連接接口

      這個接口需要實現手機(即藍牙Central)跟藍牙設備(即藍牙Peripheral)建立連接。

    • 數據發送/接收接口

      需要完成將業務數據發送到藍牙設備,同時將藍牙設備的響應數據返回給上層的藍牙接入框架。另外,還需要實現事件訂閱功能,可以訂閱藍牙設備的事件,在藍牙設備發生事件時,App側可以收到。

  4. 綁定及控制藍牙設備。
    在插件實現后,第三方藍牙設備的后續流程跟阿里云IoT藍牙設備是一樣的,藍牙設備的綁定以及控制等流程可以參見開發指南中移動端SDK介紹。

操作樣例

相關代碼