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

前提条件

已接入设备到物联网平台。具体操作,请参见设备接入和上报数据
  1. 在IntelliJ IDEA中的Amqp工程的pom.xml文件中,添加Maven项目依赖。
    • 新版IoT Java SDK的Maven依赖坐标:
      <!-- 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 = "iMS8***"; //您阿里云账号的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());
            }
    
        }
    }
    参数示例说明
    accessKeyLTAI***您的阿里云账号的AccessKey ID。

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

    说明 如果使用RAM用户,您需授予该RAM用户管理物联网平台的权限(AliyunIOTFullAccess),否则将连接失败。授权方法请参见授权RAM用户访问物联网平台
    accessKeySecretiMS8***
    iotInstanceIdiothub-unit-***已创建企业版实例的实例ID,请参见创建企业版实例
    SysEndpointiot.cn-shenzhen.aliyuncs.comEndpoint是阿里云服务的API服务端地址。Endpoint中,地域需与物联网平台产品地域保持一致。本示例中,地域为华南1(shenzhen),EndpointAPI服务端地址为:https://iot.cn-shenzhen.aliyuncs.com
    TopicFullName/g0d***/tracker0001/user/config要发布消息的自定义Topic,请参见创建产品和设备的步骤5
    MessageContentBase64.encodeBase64String("CMD,82923,ad322".getBytes())要发送的消息主体。

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

    ProductKeyg0***设备所属产品ProductKey,请参见创建产品和设备的步骤9
  3. 运行InstancePubClient程序,从云端下发指令到设备端。

    执行结果如下图所示。

    运行结果
  4. 在启动设备的CMD窗口,显示接收到的云端指令。
    显示结果
  5. 在左侧导航栏,单击监控运维 > 日志服务,进入云端运行日志页签,查看设备API调用的⽇志。
    API调用日志
    序号描述
    调用物联网平台云端API,向设备下发指令。
    物联网平台向设备发送指令。
    设备成功响应物联网平台的指令。