設備成功上報消息后,您可以嘗試從物聯網平臺的云端下發指令到設備端。

前提條件

已接入設備到物聯網平臺。具體操作,請參見設備接入和上報數據
  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,向設備下發指令。
    物聯網平臺向設備發送指令。
    設備成功響應物聯網平臺的指令。