設備成功上報消息后,您可以嘗試從物聯網平臺的云端下發指令到設備端。
前提條件
已接入設備到物聯網平臺。具體操作,請參見設備接入和上報數據。- 在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>
- 新版IoT Java SDK的Maven依賴坐標:
- 在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()); } } }
參數 示例 說明 accessKey LTAI*** 您的阿里云賬號的AccessKey ID。 登錄物聯網平臺控制臺,將鼠標移至賬號頭像上,然后單擊AccessKey管理,獲取AccessKey ID和AccessKey Secret。
說明 如果使用RAM用戶,您需授予該RAM用戶管理物聯網平臺的權限(AliyunIOTFullAccess),否則將連接失敗。授權方法請參見授權RAM用戶訪問物聯網平臺。accessKeySecret iMS8*** 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。 - 運行InstancePubClient程序,從云端下發指令到設備端。
執行結果如下圖所示。
- 在啟動設備的CMD窗口,顯示接收到的云端指令。
- 在左側導航欄,單擊云端運行日志頁簽,查看設備API調用的?志。 ,進入
序號 描述 ① 調用物聯網平臺云端API,向設備下發指令。 ② 物聯網平臺向設備發送指令。 ③ 設備成功響應物聯網平臺的指令。