本文介紹配置設備端SDK實現網關設備連接物聯網平臺。

前提條件

您已完成以下操作:

配置網關設備端SDK

本示例Demo中,java/src/main/java/com/aliyun/iot/api/common/deviceApi目錄下的DeviceTopoManager文件中包含網關接入物聯網平臺的代碼示例。

  1. 設置網關設備的設備證書信息:GWproductKeyGWdeviceNameGWdeviceSecret

    您可在物聯網平臺控制臺的設備詳情頁面查看。

        private static String regionId = "cn-shanghai";
        private static final String TAG = "TOPO";
    
        //網關設備
        private static String GWproductKey = "a1Bxp*********";
        private static String GWdeviceName = "XMtrv3y*************";
        private static String GWdeviceSecret = "19xJNybifnmgc*************";
    
    
        public static void main(String[] args) {
            /**
             * mqtt連接信息
             */
            DeviceTopoManager manager = new DeviceTopoManager();
    
            /**
             * 服務器端的java http 客戶端使用TSLv1.2。
             */
            System.setProperty("https.protocols", "TLSv2");
    
            manager.init();
        }
  2. 配置MQTT接入信息channelHost,建立連接。

    MQTT設備接入信息的查看方法,請參見查看實例終端節點

        public void init() {
            LinkKitInitParams params = new LinkKitInitParams();
            /**
             * 設置 Mqtt 初始化參數
             */
            IoTMqttClientConfig config = new IoTMqttClientConfig();
            config.productKey = GWproductKey;
            config.deviceName = GWdeviceName;
            config.deviceSecret = GWdeviceSecret;
            config.channelHost = GWproductKey + ".iot-as-mqtt." + regionId + ".aliyuncs.com:1883";
            /**
             * 是否接受離線消息
             * 對應 mqtt 的 cleanSession 字段
             */
            config.receiveOfflineMsg = false;
            params.mqttClientConfig = config;
            ALog.setLevel(LEVEL_DEBUG);
            ALog.i(TAG, "mqtt connetcion info=" + params);
    
            /**
             * 設置初始化,傳入設備證書信息
             */
            DeviceInfo deviceInfo = new DeviceInfo();
            deviceInfo.productKey = GWproductKey;
            deviceInfo.deviceName = GWdeviceName;
            deviceInfo.deviceSecret = GWdeviceSecret;
            params.deviceInfo = deviceInfo;
    
            /**建立鏈接**/
            LinkKit.getInstance().init(params, new ILinkKitConnectListener() {
                public void onError(AError aError) {
                    ALog.e(TAG, "Init Error error=" + aError);
                }
    
                public void onInitDone(InitResult initResult) {
                    ALog.i(TAG, "onInitDone result=" + initResult);
    
                    //獲取網關下topo關系,查詢網關與自設備是否已經存在topo關系
                    //如果已經存在,則直接上線子設備
                    getGWDeviceTopo();
    
                    //子設備動態注冊獲取設備deviceSecret,如果設備已知設備證書則忽略此步,直接添加topo關系
                    //預注冊設備時,可以使用設備的MAC地址或SN序列號等作為DeviceName
                    gatewaySubDevicRegister();
    
                    //待添加拓撲關系,子設備信息
                    gatewayAddSubDevice();
    
    
                }
            });
        }

測試

在設備端SDK中,配置完網關設備信息后,測試SDK是否能連接物聯網平臺。

  1. 運行程序文件DeviceTopoManager.java
  2. 物聯網平臺控制臺對應實例下的左側導航欄中,選擇設備管理 > 設備
  3. 在設備列表中,找到網關設備,查看其狀態。如果狀態顯示為在線,說明網關設備已連接物聯網平臺。

后續步驟

子設備接入物聯網平臺