单元 3:将设备连接到 EnOS 云端


本单元使用 EnOS Java SDK 开发用于模拟设备以连接到 EnOS 的程序。

设置开发环境

EnOS Java SDK for MQTT 要求安装 Java SE 8 和 Maven 3。 按照以下步骤设置开发环境。

  1. 安装 JDK,下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
  2. 安装 Maven,下载地址:http://maven.apache.org/download.cgi
  3. 安装开发环境,如 IntelliJ IDEA,下载地址:https://www.jetbrains.com/idea/download/


本教程将以 IntelliJ IDEA 为例。

安装 EnOS Device SDK for MQTT for Java

EnOS 管理控制台中的 SDK中心 列出了所有 EnOS SDK,以及指向 GitHub 和 Maven 存储库的链接。按照以下步骤安装 EnOS Device SDK for MQTT for Java。
  1. 打开 SDK 的 Maven 存储库:https://mvnrepository.com/artifact/com.envisioniot/enos-mqtt

  2. 复制 SDK 的 Maven 依赖项信息。

  3. 打开 IntelliJ IDEA,在 pom.xml 中添加以下代码片段来包含 Maven 依赖项。

    <dependency>
        <groupId>com.envisioniot</groupId>
        <artifactId>enos-mqtt</artifactId>
        <version>2.2.16</version>
    </dependency>
    


或者,也可从 GitHub 下载 EnOS Device SDK 的源代码,并将其安装在开发环境中。

设备连接编程

安装之后,根据以下步骤将 温度传感器空调设备 连接到 EnOS 云端。


  1. 导入以下内容。

    import com.envisioniot.enos.iot_mqtt_sdk.core.MqttClient;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    


  2. 声明将在程序中使用的变量,参见以下示例。


    public static final String uri = "tcp://{address}:{port}";
    
    public static final String sensor_productKey = "product_key";
    public static final String sensor_deviceKey = "customized_key";
    public static final String sensor_deviceSecret = "device_secret";
    
    public static final String ac_productKey = "product_key";
    public static final String ac_deviceKey = "customized_key";
    public static final String ac_deviceSecret = "device_secret";
    
    private static MqttClient sensorClient;
    private static MqttClient acClient;
    


    • 服务器的 addressport 随云区域和实例的不同而不同。对于私有云实例,请登录 EnOS 管理控制台点击 帮助 > 环境信息 获取 MQTT Broker 的地址和端口信息。
    • productKeydeviceKeydeviceSecret 是在 单元 1 中注册设备时生成的。


  3. 声明主要函数 initWithCallback() 初始化设备连接。


    public static void main(String[] args) throws Exception {
        initWithCallback();
    }
    


  4. 使用 initWithCallback 函数将两个设备连接到 EnOS 云端。


    public static void initWithCallback() {
       System.out.println("start connect with callback ... ");
       ExecutorService executor = Executors.newFixedThreadPool(1);
       executor.submit(new Runnable() {
          @Override
          public void run() {
             // construct an MQTT client by static device credential
             // uri is the URL of EnOS MQTT Broker for Devices, which can be obtained in Environment Information page in EnOS Console
             // ProductKey, DeviceKey and DeviceSecrect can be obtained in Device Details page in EnOS Console
             acClient = new MqttClient(uri, ac_productKey, ac_deviceKey, ac_deviceSecret);
    
             acClient.getProfile().setConnectionTimeout(60).setAutoReconnect(true).setKeepAlive(600);
    
             // connect to EnOS 云端and register callbacks. onConnectSuccess method will be called
             try {
                acClient.connect();
             } catch (Throwable t) {
                t.printStackTrace();
             }
    
             while (true) {
                System.out.println("acClient connected: " + acClient.isConnected());
    
                try{
                   Thread.sleep(5_000L);
                   System.out.println("acClient is connected");
                } catch (Throwable t) {
    
                }
             }
          }
       });
    
       // construct an MQTT client by static device credential
       // uri is the URL of EnOS MQTT Broker for Devices, which can be obtained in Environment Information page in EnOS Console
       // ProductKey, DeviceKey and DeviceSecrect can be obtained in Device Details page in EnOS Console
       sensorClient = new MqttClient(uri, sensor_productKey, sensor_deviceKey, sensor_deviceSecret);
    
       // enable auto-reconnect feature
       sensorClient.getProfile().setConnectionTimeout(60).setAutoReconnect(true).setKeepAlive(600);
    
       // connect to EnOS 云端and register callbacks. onConnectSuccess method will be called
       try {
          sensorClient.connect();
        } catch (Throwable t) {
          t.printStackTrace();
        }
    
       System.out.println("sensorClient connected :" + sensorClient.isConnected());
    }
    


  5. 检查程序的运行结果。如果设备连接成功,程序将返回以下结果。

    start connect with callback ...
    acClient connected: true
    sensorClient connected :true
    


  6. 在 EnOS 管理控制台的 设备资产 中检查设备的状态更改。 设备的状态将从 未激活 更改为 在线


    ../../_images/s1_device_state.png