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