智能生活 App SDK 如何实现设备控制

Posted IoT砖家涂拉拉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能生活 App SDK 如何实现设备控制相关的知识,希望对你有一定的参考价值。

随着 IoT 设备的普及,如何安全、灵活地管理对设备的控制权限变得更加复杂。

在以往简单的应用场景中,控制端 App 仅仅需要对一个设备进行控制。但随着家庭拥有的物联网设备愈加丰富,控制端 App 需要同时控制多个设备。

另外,某些终端设备还需要提供给多人控制。例如,家具式的智能排插需要支持被所有的家人打开或者关闭。因此就出现一个控制端 App 能够控制多个设备端,或者多个用户能够相互控制多个设备的权限管理问题。群组管理、智能场景等概念应运而生。

本文将为大家介绍关于设备控制的内容。

设备功能

  • DeviceBean 类的 dps 属性定义了设备的状态,称作数据点(DP,Data Point)或功能点。

  • dps 数组里,每个 key 对应一个设备功能的 dpIddpValue 为该设备功能的值。

    一款产品的设备功能定义可以在 涂鸦 IoT 开发平台 上查看。如下图:

指令格式

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


	"(dpId)":"(dpValue)"

设备功能示例

假设您在涂鸦 IoT 开发平台上,查看到一款灯具产品的设备功能有 101、102、103、104、105。其示例代码可能为:

// 设置 dpId 为 101 的布尔型设备功能示例,作用:开关打开
dps = "101": true;

// 设置 dpId 为 102 的字符串型设备功能示例,作用:设置 RGB 颜色为 ff5500
dps = "102": "ff5500";

// 设置 dpId 为 103 的枚举型设备功能示例,作用:设置档位为 2 档
dps = "103": "2";

// 设置 dpId 为 104 的数值型设备功能示例,作用:设置温度为 20°
dps = "104": 20;

// 设置 dpId 为 105 的透传型(byte 数组)设备功能示例,作用:透传红外数据为 1122
dps = "105": "1122";

// 多个功能合并发送
dps = "101": true, "102": "ff5500";

mDevice.publishDps(dps, new IResultCallback() 
		@Override
		public void onError(String code, String error) 
		// 错误码 11001 有下面几种原因:
		//1:数据类型发送格式错误,例如,String 类型格式发成 Boolean 类型数据。
		//2:不能下发只读类型 DP 数据,参考 SchemaBean getMode,"ro" 是只读类型。
		//3:Raw 格式数据发送的不是 16 进制字符串。
		
		@Override
		public void onSuccess() 
		
	);

发送控制命令时,请注意数据类型。例如:

  • 设备功能的数据类型是数值型( value )时,则发送的应该是 "104": 25,而不是 "104": "25"
  • 透传类型传输的 Byte 数组是 16 进制字符串格式,并且必须是偶数位,则发送的应该是 "105": "0110",而不是 "105": "110"

控制设备

首先,需要 初始化设备控制,设备控制接口向设备发送控制指令,改变设备状态或功能,来达到设备控制的目的。

设备控制支持局域网控制、云端控制、自动方式这三种控制通道。如果可以连接到局域网,建议优先通过局域网控制;否则,请通过云端控制。

接口说明

  • 局域网控制

    ITuyaDevice.publishDps(dps, TYDevicePublishModeEnum.TYDevicePublishModeLocal, callback);
    
  • 云端控制

    ITuyaDevice.publishDps(dps, TYDevicePublishModeEnum.TYDevicePublishModeInternet, callback);
    
  • 自动控制

    ITuyaDevice.publishDps(dps, TYDevicePublishModeEnum.TYDevicePublishModeAuto, callback);
    

    或者

    ITuyaDevice.publishDps(dps, callback);
    

    推荐使用 ITuyaDevice.publishDps(dps, callback) 调用方式。

  • 指定通道控制

    ITuyaDevice.publishDps(dps, orders, callback);
    

参数说明

参数说明
dps设备功能,全称为 data points,通过 JSON 字符串的格式表示,详情请参考 设备功能 章节
callback返回控制指令是否成功的回调
TYDevicePublishModeEnum设备控制方式
orders通道顺序,可以参考 CommunicationEnum 枚举类。例如,[3 , 1] 指定的是 优先蓝牙控制,蓝牙不在线则选择云端控制

Java 示例

假设,开启一个灯具采用 101 设备功能,则开灯的代码如下:

mDevice.publishDps("\\"101\\": true", new IResultCallback() 
	@Override
	public void onError(String code, String error) 
		Toast.makeText(mContext, "开灯失败", Toast.LENGTH_SHORT).show();
	

	@Override
	public void onSuccess() 
		Toast.makeText(mContext, "开灯成功", Toast.LENGTH_SHORT).show();
	
);

以上是关于智能生活 App SDK 如何实现设备控制的主要内容,如果未能解决你的问题,请参考以下文章

如何快速实现移动 App 对智能设备的连接和控制,打造丰富的智能生活场景?

如何快速实现移动 App 对智能设备的连接和控制,打造丰富的智能生活场景?

智能生活 App SDK 开发入门教程内附代码段

智能生活 App 垂直品类- IPC SDK 架构及快速集成配置(安卓版)

iOS 版智能生活 App SDK 开发入门教程1.5W字超详细步骤说明

智能生活 App SDK 之家庭信息管理接口(全)