1. 家庭与设备管理

1.1. 家庭管理

用户登录成功后需要通过TuyaSmartHomeManager去获取整个家庭列表的信息,然后初始化其中的一个家庭TuyaSmartHome,获取家庭详情信息,对家庭中的设备进行管理,控制。参考文档家庭管理

1.2. 设备管理

设备管理相关的所有功能对应TuyaSmartDevice类,需要使用设备 id 进行初始化。错误的设备 id 可能会导致初始化失败,返回nil。参考文档设备管理

请始终通过家庭来获取设备列表,并从家庭的设备列表里获取设备 id 来初始化 TuyaSmartDevice 类,以避免未同步家庭数据,TuyaSmartDevice 初始化失败的情况。

1.3. 摄像机

在获取到设备列表后,就可以根据设备的类型来判断是否是智能摄像机设备,如果是智能摄像机设备,则可以根据TuyaSmartDeviceModel中的信息来创建摄像机对象。

1.3.1. 判断是否是智能摄像机

可以根据TuyaSmartDeviceModelcategory属性来判断设备的类型,智能摄像机的类型是sp

示例代码

ObjC

[[TuyaSmartHomeManager new] getHomeListWithSuccess:^(NSArray<TuyaSmartHomeModel *> *homes) {
        [homes enumerateObjectsUsingBlock:^(TuyaSmartHomeModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                TuyaSmartHome *home = [TuyaSmartHome homeWithHomeId:obj.homeId];
                [home getHomeDetailWithSuccess:^(TuyaSmartHomeModel *homeModel) {
                        [home.deviceList enumerateObjectsUsingBlock:^(TuyaSmartDeviceModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
                    if ([obj.category isEqualToString:@"sp"]) {
                        NSLog(@"%@ 是一个智能摄像机设备", obj.name);
                    }
        }];
        } failure:^(NSError *error) {

        }];
    }];
} failure:^(NSError *error) {

}];

Swift

let homeManager = TuyaSmartHomeManager()
homeManager.getHomeList(success: { homeList in
    homeList?.forEach({ homeModel in
        let home = TuyaSmartHome(homeId: homeModel.homeId)
        home?.getDetailWithSuccess({ _ in
            home?.deviceList.forEach({ deviceModel in
                if deviceModel.category == "sp" {
                    print(deviceModel.name!, "是一个智能摄像机设备")
                }
            })
        }, failure: { error in

        })
    })
}) { error in

}

注意,这里的示例代码只是展示筛选出摄像头设备的最简单流程,实际开发中,应该根据 UI 交互的逻辑来展示和管理设备。

1.3.2. 摄像机配置信息

筛选出智能摄像机设备后,就可以根据设备 id,即TuyaSmartDeviceModeldevId属性来获取摄像机的配置信息。

配置信息需要通过涂鸦云端 open api 来获取。

接口说明

接口名 版本 说明
tuya.m.ipc.config.get(已废弃) 2.0 获取摄像机设备的 p2p 配置信息
tuya.m.rtc.session.init 1.0 获取摄像机设备的 p2p 配置信息,涂鸦云端会同时发送一个信令给设备,加速 p2p 连接过程

参数说明

参数名 类型 说明 是否必须
devId String 设备 id

需要使用TuyaSmartRequest类来调用涂鸦云端的 api,参考文档通用接口

1.3.3. 摄像机实例

Camera SDK 提供创建摄像机配置对象和摄像机控制对象的工厂方法。

类(协议)说明

类名(协议名) 说明
TuyaSmartCameraFactory 创建摄像机配置和摄像机对象的工具类
TuyaSmartCameraConfig 摄像机配置类,开发者不用关心它的属性
TuyaSmartCameraType 摄像机接口协议,根据摄像机固件类型不同,有不同的具体实现
TuyaSmartCameraDelegate 摄像机代理,摄像机功能方法的结果反馈都将通过代理方法回调

根据接口返回的数据,使用TuyaSmartCameraFactory工具类创建TuyaSmartCameraConfig对象,以作为创建摄像机对象的参数。TuyaSmartCameraFactory相关接口如下:

TuyaSmartCameraFactory 接口说明

创建摄像机配置对象

+ (TuyaSmartCameraConfig *)ipcConfigWithUid:(NSString *)uid localKey:(NSString *)localKey configData:(NSDictionary *)data;

参数说明

参数 说明
uid 用户 uid,通过[TuyaSmartUser sharedInstance].uid获取
localKey 设备的密钥,通过TuyaSmartDeviceModel.localKey获取
data 通过tuya.m.ipc.config.get接口获取到的配置信息

返回值

类型 说明
TuyaSmartCameraConfig 摄像机配置对象

创建摄像机实例对象

+ (id<TuyaSmartCameraType>)cameraWithP2PType:(id)type config:(TuyaSmartCameraConfig *)ipcConfig delegate:(id<TuyaSmartCameraDelegate>)delegate;

参数说明

参数 说明
type 摄像机的 p2p 类型
ipcConfig 摄像机配置对象
delegate 摄像机代理

返回值

类型 说明
id 摄像机接口的具体实现对象

1.3.4. P2P 类型

涂鸦智能摄像机支持三种 p2p 通道实现方案,Camera SDK 会根据 p2p 类型来初始化不同的摄像机具体实现的对象,通过下面的方式获取设备的 p2p 类型。

ObjC

id p2pType = [deviceModel.skills objectForKey:@"p2pType"];

Swift

let p2pType = deviceModel.skills["p2pType"]

示例代码

ObjC

// deviceModel 为设备列表中的摄像机设备的数据模型
id p2pType = [deviceModel.skills objectForKey:@"p2pType"];
[[TuyaSmartRequest new] requestWithApiName:@"tuya.m.ipc.config.get" postData:@{@"devId": deviceModel.devId} version:@"2.0" success:^(id result) {
    TuyaSmartCameraConfig *config = [TuyaSmartCameraFactory ipcConfigWithUid:[TuyaSmartUser sharedInstance].uid localKey:deviceModel.localKey configData:result];
    id<TuyaSmartCameraType> camera = [TuyaSmartCameraFactory cameraWithP2PType:p2pType config:config delegate:self];
} failure:^(NSError *error) {

}];

Swift

let p2pType = deviceModel.skills["p2pType"]
TuyaSmartRequest().request(withApiName: "tuya.m.ipc.config.get", postData: ["devId" : deviceModel.devId], version: "2.0", success: { result in
    let config = TuyaSmartCameraFactory.ipcConfig(withUid: TuyaSmartUser.sharedInstance().uid, localKey: deviceModel.localKey, configData: result as? [AnyHashable : Any])
    let camera = TuyaSmartCameraFactory.camera(withP2PType: p2pType!, config: config!, delegate: self)
}) { error in

}

注意,上面代码中,delegate 参数传入的 self 需要实现 TuyaSmartCameraDelegate 协议。

results matching ""

    No results matching ""