全部產品
Search
文件中心

IoT Platform:Java Link SDK

更新時間:Jun 30, 2024

本文介紹如何快速地使用Java Link SDK,通過MQTT協議,實現裝置與物聯網平台之間串連和通訊的整體操作。

前提條件

已開通物聯網平台服務。

背景資訊

本文以夜燈開關為例,通過配置Java Link SDK,類比裝置使用MQTT協議接入物聯網平台。裝置通過自訂Topic,將資料上報至物聯網平台。

建立產品和裝置

  1. 登入物聯網平台控制台

  2. 在左側導覽列,選擇裝置管理 > 產品,單擊建立產品

  3. 建立產品頁面,輸入產品名稱:夜燈開關,其他參數使用預設值,單擊確認

    建立產品

  4. 在完成建立產品的頁面,單擊添加裝置下的前往添加

  5. 裝置頁面,單擊添加裝置

  6. 添加裝置對話方塊中,輸入裝置名稱,例如:LightSwitch。然後,單擊確認

    添加裝置

  7. 添加完成對話方塊中,單擊一鍵複製裝置認證。將裝置認證資訊儲存至本地備用。關於裝置認證的更多資訊,請參見裝置認證

準備開發環境

本樣本的開發環境為Java 15,開發工具為IntelliJ IDEA社區版2020.1。關於環境的更多說明,請參見環境說明

  1. 安裝Java開發環境。

    更多資訊,請參見Java官方網站

  2. 安裝開發工具IntelliJ IDEA。

    更多資訊,請參見IntelliJ IDEA

配置裝置端SDK

  1. 下載Demo檔案至開發環境並解壓。

    說明

    下載本Demo將預設您同意本軟體許可協議

  2. 開啟IntelliJ IDEA,選擇File > Open...,找到相應的工程檔案後,單擊OK

  3. 設定項目中以下檔案代碼中的參數。

    • 配置裝置接入資訊,使裝置接入物聯網平台。

      檔案

      參數

      樣本

      說明

      ./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}} ]
  • 您可以在物聯網平台控制台,查看裝置的狀態和作業記錄。

    • 左側導覽列,選擇裝置管理 > 裝置,找到裝置,查看裝置狀態。裝置狀態顯示為線上,則表示裝置與物聯網平台成功串連。

    • 在左側導覽列,選擇監控營運 > Log Service,選擇夜燈開關產品後,查看裝置上線、訂閱Topic和上報訊息的日誌。

      說明

      您可以忽略日誌中有關OTA升級、物模型、子裝置等日誌資訊。這些資訊關於SDK內建的進階功能,不會影響您的體驗。

如果在調試過程中出現錯誤,請參見裝置端接收的錯誤碼,根據提示解決問題。

後續步驟

裝置接入物聯網平台後,您可以管理裝置並對其進行監控營運。關於物聯網平台的更多功能,請參見物聯網平台產品功能

使用Java Link SDK配置相關進階功能,請參見Java Link SDK概述