蓝牙配网
Aqara蓝牙配网方式有多种,区别在于获取蓝牙mac地址,modelId的方式不同(比如通过扫描广播,从二维码读取等);数据层可以分成蓝牙网关
和蓝牙子设备
两套
本SDK包含Aqara设备配网的逻辑部分和UI界面; SDK依赖 的iOS版本 不能低于11.0
编译器环境: XCode14.0
以上版本
语言:Object-C
集成SDK
1.环境搭建
配网SDK需要用到Wi-Fi的权限功能,需要宿主工程添加以下Capability:
Wireless Accessory Configuration
2.权限配置
SDK需要向iOS申请以下系统权限:
1.
NSCameraUsageDescription
摄像机访问权限(扫描设备上的二维码进行配网) 2.NSLocalNetworkUsageDescription
本地网络查找权限(局域网配网) 3.NSLocationWhenInUseUsageDescription
使用地理位置权限(手机获取WiFi名称,iOS 13 需要确认App已开启地理位置权限。 iOS 14 需要确认App开启精确位置权限。 如果上述配置后仍然获取不到WiFi名称,则需要开发者另外处理,比如手动输入WiFi名称)
NSBluetoothAlwaysUsageDescription
获取蓝牙权限 (蓝牙配网)NSBonjourServices
使用mDNS服务发现绿米设备,设置服务名称"_aqara._tcp."
可以在宿主项目的info.plist文件中快捷添加如下配置:
<plist version="1.0">
<key>NSBonjourServices</key>
<array>
<string>_aqara._tcp.</string>
</array>
<key>NSCameraUsageDescription</key>
<string>允许本App使用相机去添加配件</string>
<key>NSHomeKitUsageDescription</key>
<string>允许本App控制支持HomeKit的设备</string>
<key>NSLocalNetworkUsageDescription</key>
<string>需要使用本地网络以发现局域网上的设备信息</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>需要您的位置信息提供更好的服务</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>允许本App使用蓝牙连接</string>
</dict>
</plist>
4.导入SDK
需要在宿主工程中导入如下SDK:
LMSmartConnect.framework
蓝牙相关API封装 SDKLMFramework.framework
基础SDK,Aqara的基础配置,宏定义以及通用逻辑的封装
资源文件:
LMFramework.bundle
Aqara 多语言文件
5.时序图以及接口说明
引用头文件
#import <LMSmartConnect/LMSmartConnect.h>
需要确认已经获取系统蓝牙权限,并调用方法开启扫描蓝牙设备:
- (void)startBluetoothScanDevice:(NSString *)manufacture model:(NSArray *)models macAddress:(NSString *)macAddress completion:(void (^)(CBManagerState state, CBPeripheral *peripheral, NSString *macAddress, NSString *model))completion
参数 | 说明 |
---|---|
manufacture | 广播数据中的设备厂商(绿米固定传4D4C) |
models | 广播数据中需要过滤的设备model数组(从开放平台获取) |
macAddress | 指定设备的蓝牙地址(广播数据筛选出对应的对象) |
返回参数说明
参数 | 说明 |
---|---|
state | CBManagerState 当前蓝牙状态,参见Apple 文档 |
peripheral | CBPeripheral 蓝牙对象,需要保存准备后续连接用 |
macAddress | 蓝牙地址 |
model | 设备的model |
接口1
向AIoT获取bindkey请求,
/app/v1.0/lumi/dev/bindkey
请求实例:
{
"positionId": "real2.550691449629310976",
"appUrl": "https://aiot-rpc.aqara.cn"
}
返回数据: |名称|类型 |备注| |----|----|---| |bindKey|string|入网使用bindKey| |controlUnitId|string|入网miot设备返回的参数|
返回示例:
{
"code": 0,
"requestId": "",
"message": "Success",
"result": {
"bindKey": "HVFLFgHgPy56X"
}
}
具体参见开放平台接口文档。
接口2
- (void)startConnectBleWithPeripheral:(NSString *)peripheralId serviceId:(NSString *)serviceId writeCharacteristicId:(NSString *)writeCharacteristicId readCharacteriticId:(NSString *)readCharacteriticId completion:(void (^)(NSError *error))completion
参数 | 说明 | 是否可选 |
---|---|---|
peripheralId | peripheral.identifier.UUIDString | 必传 |
serviceId | 外设的服务id | 可选 |
writeCharacteristicId | 写值特征id | 可选 |
readCharacteriticId | 读值特征id | 可选 |
接口3
- (void)startBleAccessToNetWithType:(LMSmartBleConnectType)bleConnectType
bindKey:(nullable NSString *)bindKey
homeId:(NSString *)homeId
ssid:(NSString *)ssid
password:(NSString *)password
countryDomain:(NSString *)countryDomain
deviceDomain:(nullable NSString *)deviceDomain
macAddress:(nullable NSString *)macAddress
completion:(void (^)(NSError *error))completion
参数 | 说明 | 是否可选 |
---|---|---|
bleConnectType | LMSmartBleConnectType 网关/子设备 | 必传 |
bindKey | 从Aqara云平台API获取 | 可选 |
writeCharacteristicId | 写值特征id | 可选 |
readCharacteriticId | 读值特征id | 可选 |
接口4
向AIoT请求设备是否注册成功
dev/bind/query
请求实例:
{
"bindKey": "xxxxx.xxxxxx",
}
返回数据
名称 | 类型 | 是否必须 | 默认值 | 备注 |
---|---|---|---|---|
code | integer | 必须 | 0-成功、1-绑定中,2-非法 616设备模型不支持(可用于串货提醒) |
返回示例:
{
"code": 0,
"requestId": "",
"message": "Success",
"result": {
"code": 0
}
}
具体参见开放平台接口文档。