云端下发指令

更新时间:2025-03-25 09:17:29

设备成功上报消息后,您可以尝试从物联网平台的云端下发指令到设备端。

前提条件

已接入设备到物联网平台。具体操作,请参见设备接入和上报数据

  1. IntelliJ IDEA中的Amqp工程的pom.xml文件中,添加Maven项目依赖。

    • 新版IoT Java SDKMaven依赖坐标:

      <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-iot -->
      <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>aliyun-java-sdk-iot</artifactId>
          <version>7.41.0</version>
      </dependency>
    • 阿里云Java SDK公共包Maven依赖坐标:

      <dependency>
          <groupId>com.aliyun</groupId>
          <artifactId>aliyun-java-sdk-core</artifactId>
          <version>4.5.6</version>
      </dependency>
    • 程序的Maven依赖:

      <dependency>
          <groupId>com.google.code.gson</groupId>
          <artifactId>gson</artifactId>
          <version>2.1</version>
      </dependency>
  2. Amqp工程的路径Amqp\src\main\java下,创建Java类。例如InstancePubClient,输入以下代码。

    Pub API调⽤的参考代码如下所示:

    import com.aliyuncs.DefaultAcsClient;
    
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.iot.model.v20180120.PubRequest;
    import com.aliyuncs.iot.model.v20180120.PubResponse;
    import com.aliyuncs.profile.DefaultProfile;
    import com.aliyuncs.profile.IClientProfile;
    import com.google.gson.Gson;
    import org.apache.commons.codec.binary.Base64;
    
    public class InstancePubClient {
    
        private static String accessKey = "LTAI****"; //您阿里云账号的AccessKey。
        private static String accessKeySecret = "********"; //您阿里云账号的AccessKey Secret。
        private static String iotInstanceId = "iothub-unit-***"; //您企业版实例的实例ID。
        public static void main(String[] args)  {
    
            IClientProfile profile = DefaultProfile.getProfile("cn-shenzhen", accessKey, accessKeySecret); //cn-shenzhen为实例所属地域,需修改为您实例的所属地域。
            DefaultAcsClient client = new DefaultAcsClient(profile);
    
            PubRequest request = new PubRequest();
            request.setSysEndpoint("iot.cn-shenzhen.aliyuncs.com"); //您实例所属地域的API服务端地址。
            request.setTopicFullName("/g0d***/tracker0001/user/config"); //发布消息的Topic。
            request.setMessageContent(Base64.encodeBase64String("CMD,82923,ad322".getBytes()));//原始报文 : CMD,82923,ad322。
            request.setProductKey("g0***"); //产品的ProductKey。
            request.setIotInstanceId(iotInstanceId);
            request.setQos(1);
            try {
                PubResponse response = client.getAcsResponse(request);
                System.out.println(new Gson().toJson(response));
            } catch (ClientException e) {
                System.out.println("ErrCode:" + e.getErrCode());
                System.out.println("ErrMsg:" + e.getErrMsg());
                System.out.println("RequestId:" + e.getRequestId());
            }
    
        }
    }

    参数

    示例

    说明

    参数

    示例

    说明

    accessKey

    LTAI****

    您的阿里云账号的AccessKey ID。

    登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey IDAccessKey Secret。

    说明

    如果使用RAM用户,您需授予该RAM用户管理物联网平台的权限(AliyunIOTFullAccess),否则将连接失败。授权方法请参见授权RAM用户访问物联网平台

    accessKeySecret

    ********

    iotInstanceId

    iothub-unit-***

    已创建企业版实例的实例ID,请参见创建企业版实例

    SysEndpoint

    iot.cn-shenzhen.aliyuncs.com

    Endpoint是阿里云服务的API服务端地址。Endpoint中,地域需与物联网平台产品地域保持一致。本示例中,地域为华南1(shenzhen),EndpointAPI服务端地址为:https://iot.cn-shenzhen.aliyuncs.com

    TopicFullName

    /g0d***/tracker0001/user/config

    要发布消息的自定义Topic,请参见创建产品和设备的步骤5

    MessageContent

    Base64.encodeBase64String("CMD,82923,ad322".getBytes())

    要发送的消息主体。

    您需要将消息原文转换成二进制数据,并进行Base64编码,从而生成消息主体。本示例消息原文为:CMD,82923,ad322

    ProductKey

    g0***

    设备所属产品ProductKey,请参见创建产品和设备的步骤9

  3. 运行InstancePubClient程序,从云端下发指令到设备端。

    执行结果如下图所示。

    运行结果

  4. 在启动设备的CMD窗口,显示接收到的云端指令。

    显示结果

  5. 在左侧导航栏,单击监控运维 > 日志服务,进入云端运行日志页签,查看设备API调用的日志。

    API调用日志

    序号

    描述

    序号

    描述

    调用物联网平台云端API,向设备下发指令。

    物联网平台向设备发送指令。

    设备成功响应物联网平台的指令。

  • 本页导读 (1)
  • 前提条件