本文介紹如何快速地使用Java Link SDK,通過MQTT協議,實現裝置與物聯網平台之間串連和通訊的整體操作。
前提條件
已開通物聯網平台服務。
背景資訊
本文以夜燈開關為例,通過配置Java Link SDK,類比裝置使用MQTT協議接入物聯網平台。裝置通過自訂Topic,將資料上報至物聯網平台。
建立產品和裝置
準備開發環境
本樣本的開發環境為Java 15,開發工具為IntelliJ IDEA社區版2020.1。關於環境的更多說明,請參見環境說明。
安裝Java開發環境。
更多資訊,請參見Java官方網站。
安裝開發工具IntelliJ IDEA。
更多資訊,請參見IntelliJ IDEA。
配置裝置端SDK
下載Demo檔案至開發環境並解壓。
說明下載本Demo將預設您同意本軟體許可協議。
開啟IntelliJ IDEA,選擇,找到相應的工程檔案後,單擊OK。
設定項目中以下檔案代碼中的參數。
配置裝置接入資訊,使裝置接入物聯網平台。
檔案
參數
樣本
說明
./device_id.json
productKey
a18wP******
裝置認證資訊。即完成添加裝置後,您儲存至本地的裝置認證。
您也可以在物聯網平台的裝置詳情頁查看裝置的認證資訊。更多資訊,請參見擷取裝置認證資訊。
deviceName
LightSwitch
deviceSecret
uwMTmVAMnGGHaAkqmeDY6cHxxB******
./src/main/java/com/aliyun/alink/devicesdk/demo/DeviceInfoData.java
region
cn-shanghai
裝置接入的地區ID。更多資訊,請參見地區和可用性區域。
配置裝置用於發送資訊的Topic,例如
/a18wP******/LightSwitch/user/update,並設定要發送的資訊內容。範例程式碼如下:public void publish() { MqttPublishRequest request = new MqttPublishRequest(); request.topic = "/" + productKey + "/" + deviceName + "/user/update"; request.qos = 0; request.payloadObj = "{\\\"id\\\":\\\"1\\\",\\\"version\\\":\\\"1.0\\\",\\\"params\\\":{\\\"LightSwitch\\\":0}}"; LinkKit.getInstance().publish(request, new IConnectSendListener() { @Override public void onResponse(ARequest aRequest, AResponse aResponse) { // 發布結果 ALog.d(TAG, "onResponse " + (aResponse == null ? "" : aResponse.data)); } @Override public void onFailure(ARequest aRequest, AError aError) { // 發布失敗 ALog.d(TAG, "onFailure " + (aError == null ? "" : (aError.getCode() + aError.getMsg()))); } }); }檔案
參數
樣本
說明
./src/main/java/com/aliyun/alink/devicesdk/demo/MqttSample.java
topic
"/" + productKey + "/" + deviceName + "/user/update"
具有發布許可權的Topic,裝置通過該Topic向物聯網平台發送訊息。
您可以在物聯網平台的產品詳情頁的Topic類列表下的自訂Topic頁簽下,查看您的自訂Topic。更多資訊,請參見什麼是Topic。
樣本值中的
user/update為Topic的尾碼,將其修改為指定值後,可向對應的Topic發送訊息。本樣本要發送訊息的Topic為
/a18wP******/LightSwitch/user/update。a18wP******為裝置的ProductKey。LightSwitch為裝置的DeviceName。
payloadObj
{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}
上報至物聯網平台的訊息內容。
本樣本使用自訂Topic,您可自訂訊息的資料格式。
配置裝置訂閱Topic,例如
/a18wP******/LightSwitch/user/get,以接收來自物聯網平台的訊息。範例程式碼如下:public void subscribe() { MqttSubscribeRequest request = new MqttSubscribeRequest(); request.topic = "/" + productKey + "/" + deviceName + "/user/get"; request.isSubscribe = true; LinkKit.getInstance().subscribe(request, new IConnectSubscribeListener() { @Override public void onSuccess() { // 訂閱成功 ALog.d(TAG, "onSuccess "); } @Override public void onFailure(AError aError) { // 訂閱失敗 ALog.d(TAG, "onFailure " + getError(aError)); } }); }檔案
參數
樣本
說明
./src/main/java/com/aliyun/alink/devicesdk/demo/MqttSample.java
topic
"/" + productKey + "/" + deviceName + "/user/get"
具有訂閱許可權的Topic,裝置通過該Topic,可接收物聯網平台的訊息。
您可以在物聯網平台的產品詳情頁的Topic類列表下的自訂Topic頁簽下,查看您的自訂Topic。更多資訊,請參見什麼是Topic。
樣本值中的
user/get為Topic的尾碼,將其修改為指定值後,可訂閱對應的Topic。本樣本訂閱的Topic為
/a18wP******/LightSwitch/user/get。a18wP******為裝置的ProductKey。LightSwitch為裝置的DeviceName。
運行結果
專案檔配置完成後,單擊Run運行Demo可執行檔./demo/HelloWorld.java。您可以在裝置端查看運行結果。
以下日誌顯示裝置
LightSwitch與物聯網平台串連成功。2021-05-07 06:32:05.360 - 20/? D/ConnectManager:CommonNofity, onConnectStateChange(),state = CONNECTED以下日誌顯示裝置
LightSwitch訂閱了Topic/a18wP******/LightSwitch/user/get。2021-05-07 06:32:05.493 - null[MqttSendExecutor.java] - asyncSend(162):MqttSendExecutor:subscribe: topic: [ /a18wP******/LightSwitch/user/get ]Topic訂閱成功後,您可以返回物聯網平台,在裝置詳情頁面的Topic列表頁簽,單擊訂閱的Topic操作欄的發布訊息,然後在發布訊息對話方塊的訊息輸入欄中,輸入一條訊息,例如:This is a test message from Alibaba Iot Platform.,類比從物聯網平台向裝置發送訊息。

以下日誌顯示裝置
LightSwitch通過Topic/a18wP******/LightSwitch/user/update,向物聯網平台上報了一條訊息。2021-05-07 06:32:05.488 - null[MqttSendExecutor.java] - asyncSend(129):MqttSendExecutor:publish: topic: [ /a18wP******/LightSwitch/user/update ] 2021-05-07 06:32:05.489 - null[MqttSendExecutor.java] - asyncSend(130):MqttSendExecutor:publish: payload: [ {\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}} ]
您可以在物聯網平台控制台,查看裝置的狀態和作業記錄。
左側導覽列,選擇,找到裝置,查看裝置狀態。裝置狀態顯示為線上,則表示裝置與物聯網平台成功串連。
在左側導覽列,選擇,選擇夜燈開關產品後,查看裝置上線、訂閱Topic和上報訊息的日誌。
說明您可以忽略日誌中有關OTA升級、物模型、子裝置等日誌資訊。這些資訊關於SDK內建的進階功能,不會影響您的體驗。
如果在調試過程中出現錯誤,請參見裝置端接收的錯誤碼,根據提示解決問題。
後續步驟
裝置接入物聯網平台後,您可以管理裝置並對其進行監控營運。關於物聯網平台的更多功能,請參見物聯網平台產品功能。
使用Java Link SDK配置相關進階功能,請參見Java Link SDK概述。

