由于各家蓝牙应用层协议千差万别,为了将不同的蓝牙应用层协议接入到统一框架,势必需要有一个适配层来抹平各个协议的差异。如阿里巴巴IoT就定义了一套应用层的通信协议:Breeze。
背景信息
通常,各家的蓝牙应用层协议都会定义如下功能。
- 蓝牙广播:广播设备相关信息,如厂家信息,设备型号信息,设备MAC地址等。
- 数据通信:包括数据分段,组包等功能。
因此,阿里云IoT在蓝牙接入框架中引入了蓝牙通信插件管理系统(即Link Protocol Bridge System,简称LPBS)。蓝牙通信插件管理系统(LPBS)定义了一套抽象的接口,可以将不同的蓝牙协议设备接入到统一框架中,从而可以按阿里云IoT定义的物模型对蓝牙设备进行控制以及感知。每一个具体的实现我们称为:插件。
操作步骤
- 获取身份信息。
智能设备需要在阿里云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的映射。
- 创建产品。
在生活物联网平台上,厂家(或ISV)可以新增一个产品,在注册产品时阿里云IoT平台会给该产品颁发一个ProductKey来标识此产品。
- 录入设备ID。
厂家(或ISV)可以将该产品下的设备批量录入DeviceId。阿里云IoT平台会为该批次设备颁发设备身份,并以录入的DeviceId作为设备的DeviceName使用。
- 数据格式转换脚本。
第三方蓝牙设备在开发时并没有按物模型来定义设备的功能,因此需要翻译成蓝牙设备能够理解的数据格式,否则,蓝牙设备会无法识别。例如以开灯这一场景举例,按物模型封装的消息格式如下所示。
{
"id":123,
"version":"1.0.0",
"method":"thing.service.property.set",
"params":{
"LightSwitch":1
},
}
- 开发蓝牙通信插件管理系统中的插件。
通信插件抽象接口分为三个部分:
- 蓝牙设备发现接口
开发者需要将广播中的ProductModel转换成产品注册时获取的ProductKey,Mac地址可以直接当做DeviceName使用。
在生活物联网的控制台的量产管理中购买激活码时,选择批量上传的方式生成激活码,同时上传Mac地址作为DeviceName。
- 设备连接接口
这个接口需要实现手机(即蓝牙Central)跟蓝牙设备(即蓝牙Peripheral)建立连接。
- 数据发送/接收接口
需要完成将业务数据发送到蓝牙设备,同时将蓝牙设备的响应数据返回给上层的蓝牙接入框架。另外,还需要实现事件订阅功能,可以订阅蓝牙设备的事件,在蓝牙设备发生事件时,App侧可以收到。
- 绑定及控制蓝牙设备。
在插件实现后,第三方蓝牙设备的后续流程跟阿里云IoT蓝牙设备是一样的,蓝牙设备的绑定以及控制等流程可以参见开发指南中移动端SDK介绍。