低功耗门铃

更新时间:2023-05-25 06:23:52

判断是否是低功耗门铃

根据 ThingSmartDeviceModel 和 IPC SDK 中的接口,可以判断设备是否为低功耗设备。

示例代码

- (BOOL)isLowPowerDevice;

唤醒休眠门铃

低功耗门铃由电池供电,为了节省电量,在一定时间内没有 P2P(Peer-2-peer)连接会休眠。休眠后无法直接连接 P2P,您需要先唤醒设备,再连接 P2P 通道。使用 ThingSmartDevice 类提供的接口来唤醒设备。

示例代码

- (void)awakeDeviceWithSuccess:(nullable ThingSuccessHandler)success failure:(nullable ThingFailureError)failure;

休眠设备唤醒监听

当唤醒休眠的低功耗设备返回 success 调用时,只是表示唤醒命令已经成功下发给门铃设备,并不代表门铃设备已启动。当门铃设备启动时,会通过设备功能点 ThingSmartCameraWirelessAwakeDPName 上报 YES

示例代码

Objective C:

- (void)viewDidLoad {
        [super viewDidLoad];
    self.dpManager = [[ThingSmartCameraDPManager alloc] initWithDeviceId:self.devId];
        self.device = [ThingSmartDevice deviceWithDeviceId:self.devId];
        // 添加 DP 监听
        [self.dpManager addObserver:self];

    [self start];
}

- (void)start {
    if (self.isConnected) {
                [self.videoContainer addSubview:self.camera.videoView];
                self.camera.videoView.frame = self.videoContainer.bounds;
        [self.camera startPreview];
        }else if (!self.isConnecting) {
        if (self.device.deviceModel.isLowPowerDevice) {
                [self.device awakeDeviceWithSuccess:nil failure:nil];
            }
                [self.camera connect];
        self.isConnecting = YES;
        }
}

Swift:

func viewDidLoad() {
    super.viewDidLoad()
    self.dpManager = ThingSmartCameraDPManager(deviceId: self.devId)
        self.device = ThingSmartDevice(deviceId: self.devId)
        // 添加 DP 监听
        self.dpManager?.addObserver(self)

    self.start()
}

func start() {
    guard self.isConnected || self.isConnecting else {
            if self.device?.deviceModel.isLowPowerDevice() {
            self.device?.awake(success: nil, failure: nil)
        }
                self.camera.connect()
                self.isConnecting = true
        return
    }
    self.videoContainer.addSubView(self.camera.videoView)
    self.camera.videoView.frame = self.videoContainer.bounds
    self.camera.startPreview()
}

电池管理

低功耗门铃有两种供电方式,插电供电和电池供电。通过 IPC SDK,您可以查询设备当前的供电模式以及当前的电量,还可以设置一个低电量报警阈值,当电量过低时,触发一个报警通知。

打开或关闭电池锁

DPName DPCode DPId 值说明
ThingSmartCameraWirelessBatteryLockDPName wireless_batterylock 153
  • true:上锁
  • false:解锁

查询电量及设备状态

DPName DPCode DPId 值说明
ThingSmartCameraWirelessElectricityDPName wireless_electricity 145 设备电量是上报 0-100 的整数

该 DP 下发不需要携带参数,所以传 null 值即可。

设置低电量告警阈值

DPName DPCode DPId
ThingSmartCameraWirelessLowpowerDPName wireless_lowpower 147

查询设备供电方式

设备供电方式,设备供电方式发生变化时,会上报。

DPName DPCode DPId 值说明
ThingSmartCameraWirelessPowerModeDPName wireless_powermode 146
  • 0:电池供电
  • 1:插电供电

该 DP 下发不需要携带参数,所以传 null 值即可。

示例代码

Objective C:

- (void)viewDidLoad {
        if ([self.dpManager isSupportDP:ThingSmartCameraWirelessPowerModeDPName]) {
        ThingSmartCameraPowerMode powerMode = [[self.dpManager valueForDP:ThingSmartCameraWirelessPowerModeDPName] thingsdk_toString];
        if ([powerMode isEqualToString:ThingSmartCameraPowerModePlug]) {
                        // 插电供电
        }else if ([powerMode isEqualToString:ThingSmartCameraPowerModeBattery]) {
            // 电池供电
        }

    }

    if ([self.dpManager isSupportDP:ThingSmartCameraWirelessElectricityDPName]) {
        NSInteger electricity = [[self.dpManager valueForDP:ThingSmartCameraWirelessElectricityDPName] thingsdk_toInt];
        NSLog(@"设备当前的电量为:%@%%", @(electricity));
    }

    if ([self.dpManager isSupportDP:ThingSmartCameraWirelessLowpowerDPName]) {
        // 设置电量低于 20% 时,触发低电量警告
        [self.dpManager setValue:@(20) forDP:ThingSmartCameraWirelessLowpowerDPName success:^(id result) {

        } failure:^(NSError *error) {
            // 网络错误
        }];
    }

    if ([self.dpManager isSupportDP:ThingSmartCameraWirelessBatteryLockDPName]) {
        // 解除电池锁,以拆卸电池
        [self.dpManager setValue:@(NO) forDP:ThingSmartCameraWirelessBatteryLockDPName success:^(id result) {

        } failure:^(NSError *error) {
            // 网络错误
        }];
    }
}

Swift:

override func viewDidLoad() {
    super.viewDidLoad()
    if self.dpManager.isSupportDP(.wirelessPowerModeDPName) {
        let powerMode = self.dpManager.value(forDP: .wirelessPowerModeDPName) as! String
        switch ThingSmartCameraPowerMode(rawValue: powerMode) {
        case .plug: break
            // 插电供电
        case .battery: break
            // 电池供电
        default: break
        }
    }

    if self.dpManager.isSupportDP(.wirelessElectricityDPName) {
        let electricity = self.dpManager.value(forDP: .wirelessElectricityDPName) as! Int
        print("设备当前的电量为:", electricity)
    }

    if self.dpManager.isSupportDP(.wirelessLowpowerDPName) {
        // 设置电量低于 20% 时,触发低电量警告
        self.dpManager.setValue(20, forDP: .wirelessLowpowerDPName, success: { _ in

        }) { _ in
            // 网络错误
        }
    }

    if self.dpManager.isSupportDP(.wirelessBatteryLockDPName) {
        // 解除电池锁,以拆卸电池
        self.dpManager.setValue(false, forDP: .wirelessBatteryLockDPName, success: { _ in

        }) { _ in
            // 网络错误
        }
    }
}