常规控制

更新时间:2024-06-27 03:26:17下载pdf

App SDK 通过 DP(Data Point)控制设备,并且通过标准化的 DP 实现设备与 App 之间的交互。IPC SDK 基于智能生活 App SDK,封装了一套智能摄像机的特有 DP。

  • 智能生活 App SDK 以 DP Code 为唯一标识,而设备以 DP ID 为唯一标识。所以,请在涂鸦开发者平台上创建自定义 DP 时,确保 DP ID 和 DP Code 的唯一性。创建 DP 的步骤,参考 产品功能
  • 有关常规智能设备的控制,参考 设备控制
  • 标准 DP 功能,查看 常用 DP

获取对象

  • ThingSmartCameraDPManager 提供与设备信息通信(下发控制指令、查询当前 DP 数据)的能力。
  • ThingSmartCameraDPObserver 提供监听设备功能状态变化的能力。

初始化设备

接口说明

- (instancetype)initWithDeviceId:(NSString *)devId;

参数说明

参数 说明
devId 设备 ID

添加或移除设备状态监听

接口说明

/// 添加设备状态变化监听
- (void)addObserver:(id<ThingSmartCameraDPObserver>)observer;

/// 移除设备状态变化监听
- (void)removeObserver:(id<ThingSmartCameraDPObserver>)observer;

参数说明

参数 说明
observer 接口监听,需要实现 ThingSmartCameraDPObserver 协议

根据 DP ID 查询 DP Code

接口说明

该方法可以查询到 DP ID 对应的 DP Code。

- (NSString *)dpCodeWithDpId:(NSString *)dpId;

示例代码

#import <ThingSmartCameraKit/ThingSmartCameraKit.h>

NSString *dpCode = [deviceModel dpCodeWithDpId:dpId];

根据 DP Code 查询 DP ID

接口说明

该方法可以查询到 DP Code 对应的 DP ID。

- (NSString *)dpIdWithDpCode:(NSString *)dpCode;

示例代码

#import <ThingSmartCameraKit/ThingSmartCameraKit.h>


NSString *dpId = [deviceModel dpIdWithDpCode:dpCode];

查询设备是否支持DP Code

接口说明

- (BOOL)isSupportDPCode:(ThingSmartCameraDPKey)DPCode;

参数说明

参数 说明
DPCode 设备功能 code

返回值

类型 说明
BOOL 是否支持指定的DP Code

查询 DP 值

通过缓存查询

接口说明

查询设备功能的值,直接获取缓存中的值,如果不支持此设备功能,返回 nil。

- (id)valueForDPCode:(ThingSmartCameraDPKey)DPCode;

参数说明

参数 说明
DPCode 设备功能 code

返回值

参数 说明
id 需要根据对应的设备点类型,转换成对应类型的值,详情可以参考下文 常用 DP

通过发送指令查询

除了存储卡相关功能外,不建议使用该接口。

接口说明

- (void)valueForDPCode:(ThingSmartCameraDPKey)DPCode success:(ThingSuccessID)success failure:(ThingFailureError)failure;

参数说明

参数 说明
DPCode 设备功能 code
success 成功回调,返回指定设备功能的当前值
failure 失败回调,error 表示错误信息

下发数据

接口说明

设置设备功能的值。

- (void)setValue:(id)value forDPCode:(ThingSmartCameraDPKey)DPCode success:(ThingSuccessID)success failure:(ThingFailureError)failure;

参数说明

参数 说明
value 设备功能的值,数值型或者布尔型的值,需要包装成 NSNumber
DPCode 设备功能 code
success 成功回调,并返回指定设备功能当前的值
failure 失败回调,error 表示错误信息
  • 除了部分存储卡状态的设备功能,摄像机在设备功能状态变化时,会主动上报到云端。IPC SDK 会实时更新设备功能状态缓存,所以大部分情况下,直接获取缓存中设备功能的值即可。
  • 异步查询设备功能的值,是下发 NULL 到设备端,正常情况下,设备端收到 NULL 的设备功能数据后,会主动上报一次对应设备功能的值。但是这个行为是由摄像机制造商实现的。如果制造商没有实现这个逻辑,下发 NULL 后会导致摄像机固件程序崩溃。所以在使用此接口时,请向制造商确定他们是否对这些设备功能正确处理了 NULL 的逻辑。

数据回调

ThingSmartCameraDPObserver 协议提供监听设备主动上报的设备功能状态变化的能力。下发设置设备功能的值以后,设备也会再主动上报一次更新后的值。

接口说明

设备功能状态变化代理回调。

- (void)cameraDPDidUpdate:(ThingSmartCameraDPManager *)manager dps:(NSDictionary *)dpsData;

参数说明

参数 说明
manager 触发回调的 ThingSmartCameraDPManager 对象
dpsData 发生变化的设备功能的 ID 和当前的值,格式为 { dpName: value }

示例代码

Objective-C:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.dpManager = [[ThingSmartCameraDPManager alloc] initWithDeviceId:self.devId];
    [self.dpManager addObserver:self];
    if ([self.dpManager isSupportDPCode:@"basic_osd"]){
      self.osdSwitch = [[self.dpManager valueForDPCode:@"basic_osd"] boolValue];
    }
}

- (void)openOSD {
    if ([self.dpManager isSupportDPCode:@"basic_osd"]) {
        __weak typeof(self) weakSelf = self;
        [self.dpManager setValue:@(YES) forDPCode:@"basic_osd" success:^(id result) {
            weakSelf.osdSwitch = [result boolValue];
        } failure:^(NSError *error) {
            // 网络错误
        }];
    }
}

#pragma mark - ThingSmartCameraDPObserver
- (void)cameraDPDidUpdate:(ThingSmartCameraDPManager *)manager dps:(NSDictionary *)dpsData {
    // 如果变化的设备功能中包含时间水印开关的设备功能
    if ([dpsData objectForKey:ThingSmartCameraBasicOSDDPName]) {
        self.osdSwitch = [[dpsData objectForKey:ThingSmartCameraBasicOSDDPName] boolValue];
    }
}

Swift:

override func viewDidLoad() {
    super.viewDidLoad()
    self.dpManager = ThingSmartCameraDPManager(deviceId: self.devId)
    self.dpManager.addObserver(self)
    if self.dpManager.isSupportDPCode("basic_osd") {
        self.osdSwitch = self.dpManager.value(forDPCode: "basic_osd") as! Bool
    }
}

func openOSD() {
    // 判断设备是否支持此设备功能
    guard self.dpManager.isSupportDPCode("basic_osd") else {
        return
    }
    self.dpManager.setValue(true, forDPCode: "basic_osd", success: { result in
        self.osdSwitch = result as! Bool
    }) { _ in
        // 网络错误
    }
}

func cameraDPDidUpdate(_ manager: ThingSmartCameraDPManager!, dps dpsData: [AnyHashable : Any]!) {
    // 如果变化的设备功能中包含时间水印开关的功能
    if let osdValue = dpsData[ThingSmartCameraDPKey.basicOSDDPName] {
        self.osdSwitch = osdValue as! Bool
    }
}

标准 DP 功能

您可以在 涂鸦 IoT 开发平台 上,查看摄像机类产品的标准 DP 功能定义。
也可以参考这篇文档:常用 DP