设备控制

更新时间:2026-01-22 09:26:49下载pdf

随着智能设备的普及,如何安全、灵活地管理对设备的权限控制变得更加复杂。在以往简单的应用场景中,控制端 App 仅仅需要对一个设备进行控制。但随着家庭拥有的物联网设备愈加丰富,控制端 App 需要同时控制多个设备。

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

本文为您介绍关于设备控制的内容。

设备功能

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

  • dps 字典里的每个 key 对应一个设备功能的 dpIdvalue 对应一个设备功能的 dpValuedpValue 为该设备功能的值。

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

更多详情,请参考 产品功能

指令格式

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

{
    "(dpId)":"(dpValue)"
}

假设您在涂鸦开发者平台上,查看到一款灯具产品的设备 DP 有 1、4、5、6、15。其示例代码可能为:

async publishDps() {
    // 定义DP点数据(根据实际需求选择一种或组合)
    let dps: DpsType = {};

    // 示例 1:设置布尔型 DP(开关)
    dps = { "1": true };

    // 示例 2:设置字符串型 DP(颜色)
    dps = { "4": "ff5500" };

    // 示例 3:设置枚举型 DP(档位)
    dps = { "5": "2" };

    // 示例 4:设置数值型 DP(温度)
    dps = { "6": 20 };

    // 示例 5:设置透传型 DP(红外数据)
    dps = { "15": "1122" };

    // 示例 6:合并多个 DP 
    dps = {
      "1": true,
      "4": "ff5500"
    };
    

    try {
      // 发送 DP 控制命令
      await this.device?.publishDps(JSON.stringify(dps));
      console.log("publishDps success");
      // 下发成功,状态更新通过设备状态回调监听
    } catch (error) {
      console.error("publishDps failure: " + JSON.stringify(error));
    }
  }

注意事项

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

  • 设备功能的数据类型是数值型(value)时,则发送的数据应该是类似于 {"2": 25},而不是类似于 {"2": "25"}
  • 透传类型传输的 Byte 数组是 16 进制字符串格式,并且必须是偶数位,则发送的数据应该是类似于 @{@"1": @"011f"},而不是类似于 @{@"1": @"11f"}

设备控制

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

支持 自动选择通道局域网控制 和 云端控制 这三种控制通道,通常来说 建议使用自动选择通道 的方式。

自动选择通道控制

根据设备模型 TSmartDeviceModel 的 communication.communicationModes 顺序来依次检查通道是否可用,自动选择合适的通道进行控制。

    try {
      // 发送 DP 控制命令
      await this.device?.publishDps(JSON.stringify(dps));
      console.log("publishDps success");
      // 下发成功,状态更新通过设备状态回调监听
    } catch (error) {
      console.error("publishDps failure: " + JSON.stringify(error));
    }

局域网控制

仅通过局域网控制,需要设备局域网在线。

    try {
      // 发送 DP 控制命令
      await this.device?.publishDps(JSON.stringify(dps), TSmartDpsPublishMode.LOCAL);
      console.log("publishDps success");
      // 下发成功,状态更新通过设备状态回调监听
    } catch (error) {
      console.error("publishDps failure: " + JSON.stringify(error));
    }

云端控制

仅通过云端控制,需要设备云端在线。

    try {
      // 发送 DP 控制命令
      await this.device?.publishDps(JSON.stringify(dps), TSmartDpsPublishMode.CLOUD);
      console.log("publishDps success");
      // 下发成功,状态更新通过设备状态回调监听
    } catch (error) {
      console.error("publishDps failure: " + JSON.stringify(error));
    }