本文以夜燈開關為例,介紹如何快速地使用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******
region
cn-shanghai
裝置接入的地區ID。更多資訊,請參見地區和可用性區域。
instanceId
iot-w2******
執行個體ID。您可在物聯網平台控制台的執行個體概覽頁簽,查看執行個體ID。
如果沒有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.javatopic
"/" + 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概述。