Utilice la biblioteca Paho MQTT para Java para conectar un dispositivo a IoT Platform y comunicarse mediante el modelo de cosas.
Requisitos previos
Ya creó un producto y un dispositivo en IoT Platform. Además, definió la propiedad LightSwitch para el producto en la pestaña Function Definition.
Para obtener más información, consulte Create a product, Create a single device y Add a TSL model for a single product.
Preparar el entorno de desarrollo
Entorno de desarrollo:
Sistema operativo: Windows 10
JDK: JDK 8
Descargar la biblioteca Paho MQTT para Java
Agregue la siguiente dependencia a su proyecto de Maven según su versión de MQTT:
Visite el sitio web oficial para comprobar la versión más reciente de la biblioteca y actualice el valor de version en consecuencia.
-
MQTT 3.1 y 3.1.1
<dependencies> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.1</version> </dependency> </dependencies> -
MQTT 5.0
<dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.mqttv5.client</artifactId> <version>1.2.5</version> </dependency>
Conectar a IoT Platform
-
Haga clic en MqttSign.java para obtener el código fuente que calcula los parámetros de conexión MQTT.
El archivo MqttSign.java define la clase MqttSign:
-
Prototipo:
class MqttSign -
Función:
Calcula los valores de username, password y clientID, obligatorios para conectar un dispositivo a IoT Platform mediante MQTT.
-
Miembros:
Tipo
Descripción del método
public void
calculate(String productKey, String deviceName, String deviceSecret)Calcula los parámetros de conexión MQTT username, password y clientid a partir de los valores productKey, deviceName y deviceSecret del dispositivo.
public String
getUsername()Obtiene el parámetro de conexión MQTT username.
public String
getPassword()Obtiene el parámetro de conexión MQTT password.
public String
getClientid()Obtiene el parámetro de conexión MQTT clientid.
-
Abra IntelliJ IDEA y cree un proyecto.
Importe el archivo MqttSign.java a su proyecto.
-
En su proyecto, agregue un archivo de programa para conectar el dispositivo a IoT Platform.
Escriba un programa que llame a la clase MqttSign del archivo MqttSign.java para calcular los parámetros de conexión MQTT y conectarse a IoT Platform.
Instrucciones de desarrollo y código de ejemplo:
-
Llame a MqttSign para calcular los parámetros de conexión MQTT.
String productKey = "a1X2bEn****"; String deviceName = "example1"; String deviceSecret = "ga7XA6KdlEeiPXQPpRbAjOZXwG8y****"; // Calculate the MQTT connection parameters. MqttSign sign = new MqttSign(); sign.calculate(productKey, deviceName, deviceSecret); System.out.println("username: " + sign.getUsername()); System.out.println("password: " + sign.getPassword()); System.out.println("clientid: " + sign.getClientid()); -
Use un cliente Paho MQTT para conectarse a IoT Platform.
// The endpoint for connecting to IoT Platform. String port = "443"; String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port; // The Paho MQTT client. MqttClient sampleClient = new MqttClient(broker, sign.getClientid(), persistence); // The Paho MQTT connection parameters. MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); connOpts.setKeepAliveInterval(180); connOpts.setUserName(sign.getUsername()); connOpts.setPassword(sign.getPassword().toCharArray()); sampleClient.connect(connOpts); System.out.println("Broker: " + broker + " Connected");ImportanteModifique el endpoint en la línea de código
String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;. El valor de broker debe tener el formato"ssl://" + "${MQTT endpoint for your instance}" + ":" + port.Para obtener más información sobre los formatos de endpoint de las instancias públicas y Enterprise, consulte View instance endpoints.
-
Publique un mensaje.
Reporte la propiedad LightSwitch definida en el modelo de cosas:
// Publish a message using Paho MQTT. String topic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post"; String content = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":1}}"; MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(0); sampleClient.publish(topic, message);Para MQTT 5.0, agregue propiedades personalizadas al publicar un mensaje:
// MQTT 5.0 feature: User-defined properties MqttProperties properties = new MqttProperties(); List<UserProperty> userPropertys = new ArrayList<>(); userPropertys.add(new UserProperty("key1","value1")); properties.setUserProperties(userPropertys); // MQTT 5.0 feature: request-response mode properties.setCorrelationData("requestId12345".getBytes()); properties.setResponseTopic("/" + productKey + "/" + deviceName + "/user/get"); message.setProperties(properties); // The Paho SDK for MQTT 5.0 uses topic aliases by default. sampleClient.publish(topic, message);El formato de datos del modelo de cosas se define en Device properties, events, and services.
La comunicación mediante temas personalizados se explica en What is a topic?.
-
Suscríbase a un tema para recibir mensajes de IoT Platform.
Suscríbase a un tema para recibir las respuestas de publicación de propiedades desde IoT Platform:
class MqttPostPropertyMessageListener implements IMqttMessageListener { @Override public void messageArrived(String var1, MqttMessage var2) throws Exception { System.out.println("reply topic : " + var1); System.out.println("reply payload: " + var2.toString()); } } ... // Subscribe to a topic using Paho MQTT. String topicReply = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply"; sampleClient.subscribe(topicReply, new MqttPostPropertyMessageListener());
Consulte los patrones de comunicación entre dispositivos y la nube en Overview of communications among devices, IoT platform, and servers.
-
Haga clic en el botón Build Project
para compilar el proyecto.
Ejecutar el proyecto de ejemplo
Conecte un dispositivo a IoT Platform mediante el proyecto de ejemplo precompilado.
Descargue un paquete de código (v3.1.1Demo o v5.0Demo) y descomprímalo.
Abra IntelliJ IDEA e importe el proyecto de ejemplo aiot-java-demo desde el paquete descomprimido.
-
En el archivo pom.xml, actualice las versiones de las dependencias de Maven como se indica en la sección Descargar la biblioteca Paho MQTT para Java.
ImportanteSi una versión de dependencia no está disponible, compruebe su repositorio oficial, como Maven Central, para encontrar una versión válida.
-
En el directorio src/main/java/com.aliyun.iot, abra el archivo App o Mqtt5App y reemplace las credenciales del dispositivo de ejemplo por las suyas.
NotaUse el archivo App para comunicarse mediante MQTT 3.1 o 3.1.1. Use el archivo Mqtt5App para comunicarse mediante MQTT 5.0.
-
En el siguiente código, reemplace los valores de productKey, deviceName y deviceSecret por las credenciales de su dispositivo.
String productKey = "${ProductKey}"; String deviceName = "${DeviceName}"; String deviceSecret = "${DeviceSecret}"; Modifique el endpoint en la línea de código
String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;, tal como se describe en el paso 4 de la sección Conectar a IoT Platform.
-
-
Ejecute el programa App o Mqtt5App.
Si la operación es exitosa, aparecen los siguientes registros:
username: example1&a1xxx password: 5c9d47198d9d09050043e1f3xxx clientid: a1Xxxx.example1|timestamp=1576140939022,_v=paho-java-1.0.0,securemode=2,signmethod=hmacsha256| broker: ssl://a1X2bxxx.iot-as-mqtt.cn-shanghai.aliyuncs.com:443 Connected subscribe: /sys/a1X2bxxx/example1/thing/event/property/post_reply publish: {"id":"1","version":"1.0","params":{"LightSwitch":1}} reply topic : /sys/a1Xxxx/example1/thing/event/property/post_reply reply payload: {"code":200,"data":{},"id":"1","message":"success","method":"thing.event.property.post","version":"1.0"} Disconnected Process finished with exit code 0Inicie sesión en la consola de IoT Platform para consultar el estado y los registros del dispositivo en su instancia.
En el panel de navegación izquierdo, elija . Verá que el estado del dispositivo es Online.
-
En el panel de navegación izquierdo, elija . Puede consultar el Cloud-side Log y el Device-side Log. Cloud-side Log. Device-side Log.
Si utiliza el archivo Mqtt5App, puede consultar las propiedades personalizadas reportadas en los detalles del registro.
En el campo Property de los detalles del registro, encontrará los valores de las propiedades personalizadas reportadas, como
[{"Value":"value1","Key":"key1"}].
Códigos de error
Si el dispositivo no logra conectarse a IoT Platform mediante MQTT, utilice los códigos de error para solucionar el problema. Para obtener más información sobre los códigos de error del servidor, consulte Troubleshooting.