本文介绍腾讯云物联网(IoT)远程控制能力的端到端实现:应用端通过设备管理(
TXIoTDeviceManager)的 sendCommand 下发命令、getProperties 查询设备当前属性;设备端通过物模型回调接收属性变更与行为调用并回复执行结果。完成集成与登录 SDK 后,您需确保目标设备已完成 设备绑定,取得 deviceId 后方可对其进行远程控制。说明:
本文只覆盖基于物模型的远程控制(
sendCommand / getProperties),不包含 TXIoTMonitorSession 与 TXIoTCallSession 等音视频能力。前提条件
在远程控制设备前,请确保已完成以下准备工作:
已开通腾讯云物联网相关服务,并在控制台完成实例、应用和设备准备。可参见 开通服务。
已在客户端工程中集成 IoT 应用端 SDK。
已通过业务后台生成登录签名,并调用
TXIoTEngine 完成登录。设备已完成绑定或分享:仅当用户本人拥有该设备、或家庭成员拥有该设备、或用户被分享了该设备时,才具备远程控制的权限。若尚未完成设备绑定或分享,请先参考 设备绑定。
应用端下发控制
获取设备管理对象
设备管理能力通过
TXIoTEngine 获取。登录成功后,均可通过 TXIoTEngine 单例实例调用 getDeviceManager() 获取设备管理对象。说明:
如果获取到的
TXIoTDeviceManager 为 null(iOS 为 nil),通常是因为 SDK 尚未登录或登录已过期,请先完成登录后再使用相关能力。下发控制命令
sendCommand 用于向设备下发控制命令。命令内容是一个 JSON 字符串,成功回调返回服务端响应的 JSON 字符串。注意:
jsonData 中的字段必须与产品物模型保持一致,否则会出现下发失败的问题。设备离线、设备不存在或当前用户无权限时,通过 onError 返回错误码与错误信息。方法 | 说明 |
sendCommand | 向设备下发命令, jsonData 为命令 JSON 字符串,原样发送给设备。 |
String jsonData = "{\\"power_switch\\":1}";deviceManager.sendCommand(deviceId, jsonData, new TXIoTEngineDef.TXIoTCallback<String>() {@Overridepublic void onSuccess(String result) {// 命令下发成功,result 为服务端返回的 JSON 字符串。}@Overridepublic void onError(TXIoTEngineDef.TXIoTErrorCode errorCode, String errorMessage) {// 命令下发失败,请根据错误码和错误信息处理。}});
NSString *jsonData = @"{\\"power_switch\\":1}";TXIoTCallback<NSString *> *commandCallback = [[TXIoTCallback alloc] init];commandCallback.onSuccess = ^(NSString *result) {// 命令下发成功,result 为服务端返回的 JSON 字符串。};commandCallback.onError = ^(TXIoTErrorCode errorCode, NSString *errorMessage) {// 命令下发失败,请根据错误码和错误信息处理。};[deviceManager sendCommand:deviceId jsonData:jsonData callback:commandCallback];
查询设备属性
getProperties 用于查询设备当前的属性快照,返回属性 JSON 字符串。命令下发成功只代表云端已受理,设备实际状态需要通过本接口或设备侧上报确认。方法 | 说明 |
getProperties | 查询设备当前属性,返回属性 JSON 字符串,字段含义由产品物模型定义。 |
deviceManager.getProperties(deviceId, new TXIoTEngineDef.TXIoTCallback<String>() {@Overridepublic void onSuccess(String result) {// 查询成功,result 为设备属性 JSON 字符串。}@Overridepublic void onError(TXIoTEngineDef.TXIoTErrorCode errorCode, String errorMessage) {// 查询属性失败,请根据错误码和错误信息处理。}});
TXIoTCallback<NSString *> *propertyCallback = [[TXIoTCallback alloc] init];propertyCallback.onSuccess = ^(NSString *result) {// 查询成功,result 为设备属性 JSON 字符串。};propertyCallback.onError = ^(TXIoTErrorCode errorCode, NSString *errorMessage) {// 查询属性失败,请根据错误码和错误信息处理。};[deviceManager getProperties:deviceId callback:propertyCallback];