简体中文
简体中文
English
联系我们
注册
登录

设备控制

更新时间:2022-02-17 05:28:52下载pdf

随着 IoT 设备的普及,如何安全、灵活地管理对设备的控制权限变得更加复杂。在以往简单的应用场景中,控制端 APP 仅仅需要对一个设备进行控制。但随着家庭拥有的物联网设备愈加丰富,控制端 APP 需要同时控制多个设备。另外,某些终端设备还需要提供给多人控制,例如家具式的智能排插能够支持被所有的家人打开或者关闭,因此就出现一个控制端 APP 能够控制多个设备端,或者多个用户能够相互控制多个设备的权限管理问题。由此出现了群组管理,智能场景等概念。

此章节介绍了关于设备控制的内容。

设备功能点说明

TuyaSmartDeviceModel 类的 dps 属性(NSDictionary 类型)定义了当前设备的状态,称作数据点(DP 点)或功能点

dps 字典里的每个 key 对应一个功能点的 dpIdvalue 对应一个功能点的 dpValue dpValue 为该功能点的值

产品功能点定义参见 涂鸦开发者平台 > 产品开发 > 编辑产品 > 功能定义,如下图所示:

设备控制

发送控制指令按照以下格式:

{"<dpId>":"<dpValue>"}

根据后台该产品的功能点定义,如下:

示例代码

Objc:

- (void)publishDps {
  // self.device = [TuyaSmartDevice deviceWithDeviceId:@"your_device_id"];

    NSDictionary *dps;
	//设置dpId为1的布尔型功能点示例 作用:开关打开
	dps = @{@"1": @(YES)};

	//设置dpId为4的字符串型功能点示例 作用:设置RGB颜色为ff5500
	dps = @{@"4": @"ff5500"};

	//设置dpId为5的枚举型功能点示例 作用:设置档位为2档
	dps = @{@"5": @"2"};

	//设置dpId为6的数值型功能点示例 作用:设置温度为20°
	dps = @{@"6": @(20)};

	//设置dpId为15的透传型(byte数组)功能点示例 作用:透传红外数据为1122
	dps = @{@"15": @"1122"};

	//多个功能合并发送
	dps = @{@"1": @(YES), @"4": @(ff5500)};

	[self.device publishDps:dps success:^{
		NSLog(@"publishDps success");

		//下发成功,状态上报通过 deviceDpsUpdate方法 回调

	} failure:^(NSError *error) {
		NSLog(@"publishDps failure: %@", error);
	}];

}

Swift:

func publishDps() {
    var dps = [String : Any]()

    // dp 可参考具体产品定义
    device?.publishDps(dps, success: {
 	    print("publishDps success")

        //下发成功,状态上报通过 deviceDpsUpdate方法 回调
    }, failure: { (error) in
        if let e = error {
            print("publishDps failure: \(e)")
        }
    })
}

注意事项

  • 控制命令的发送需要特别注意数据类型

    比如功能点的数据类型是数值型(value),那控制命令发送的应该是 @{@"2": @(25)} 而不是 @{@"2": @"25"}
  • 透传类型传输的 byte 数组是字符串格式(16 进制字符串)、字母需小写并且必须是偶数位

    比如正确的格式是: @{@"1": @"011f"} 而不是 @{@"1": @"11f"}

功能点更多概念参见 产品智能化 > 功能定义 > 自定义功能

设备控制

设备控制接口功能为向设备发送功能点,来改变设备状态或功能。

接口说明

设备控制支持三种通道控制,局域网控制,云端控制和自动方式(如果局域网在线,先走局域网控制,局域网不在线,走云端控制)

局域网控制:

	[self.device publishDps:dps mode:TYDevicePublishModeLocal success:^{
		NSLog(@"publishDps success");
	} failure:^(NSError *error) {
		NSLog(@"publishDps failure: %@", error);
	}];

云端控制:

	[self.device publishDps:dps mode:TYDevicePublishModeInternet success:^{
		NSLog(@"publishDps success");
	} failure:^(NSError *error) {
		NSLog(@"publishDps failure: %@", error);
	}];

自动控制:

	[self.device publishDps:dps mode:TYDevicePublishModeAuto success:^{
		NSLog(@"publishDps success");
	} failure:^(NSError *error) {
		NSLog(@"publishDps failure: %@", error);
	}];