Utilisez la bibliothèque Paho MQTT pour Java afin de connecter un appareil à IoT Platform et de communiquer via le modèle TSL.
Prérequis
Vous avez créé un produit et un appareil dans IoT Platform, et vous avez défini la propriété LightSwitch pour le produit dans l'onglet Function Definition.
Pour plus d'informations, consultez les rubriques Créer un produit, Créer un appareil unique et Ajouter un modèle TSL pour un produit unique.
Préparer l'environnement de développement
Environnement de développement :
Système d'exploitation : Windows 10
JDK : JDK 8
Télécharger la bibliothèque Paho MQTT pour Java
Ajoutez la dépendance suivante à votre projet Maven en fonction de votre version de MQTT :
Consultez le site officiel pour vérifier la dernière version de la bibliothèque et mettre à jour la valeur de version en conséquence.
-
MQTT 3.1 et 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>
Se connecter à IoT Platform
-
Cliquez sur MqttSign.java pour obtenir le code source permettant de calculer les paramètres de connexion MQTT.
Le fichier MqttSign.java définit la classe
MqttSign:-
Prototype :
class MqttSign -
Fonction :
Calcule les paramètres username, password et clientID requis pour connecter un appareil à IoT Platform via MQTT.
-
Membres :
Type
Description de la méthode
public void
calculate(String productKey, String deviceName, String deviceSecret)Calcule les paramètres de connexion MQTT username, password et clientid à partir des valeurs productKey, deviceName et deviceSecret de l'appareil.
public String
getUsername()Récupère le paramètre de connexion MQTT username.
public String
getPassword()Récupère le paramètre de connexion MQTT password.
public String
getClientid()Récupère le paramètre de connexion MQTT clientid.
-
Ouvrez IntelliJ IDEA et créez un projet.
Importez le fichier MqttSign.java dans votre projet.
-
Ajoutez un fichier de programme à votre projet pour connecter l'appareil à IoT Platform.
Rédigez un programme qui appelle la classe
MqttSigndu fichier MqttSign.java afin de calculer les paramètres de connexion MQTT et de se connecter à IoT Platform.Instructions de développement et exemple de code :
-
Appelez
MqttSignpour calculer les paramètres de connexion 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()); -
Utilisez un client Paho MQTT pour vous connecter à 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");ImportantModifiez l'endpoint dans la ligne de code
String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;. La valeur de broker doit respecter le format"ssl://" + "${MQTT endpoint for your instance}" + ":" + port.Pour plus d'informations sur les formats d'endpoint pour les instances publiques et Enterprise, consultez la rubrique Afficher les endpoints d'instance.
-
Publiez un message.
Signalez la propriété
LightSwitchdéfinie dans le modèle TSL :// 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);Pour MQTT 5.0, ajoutez des propriétés personnalisées lors de la publication d'un message :
// 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);Le format des données du modèle TSL est défini dans la rubrique Propriétés, événements et services des appareils.
La communication par sujet personnalisé est expliquée dans la rubrique Qu'est-ce qu'un sujet ?.
-
Abonnez-vous à un sujet pour recevoir les messages provenant d'IoT Platform.
Abonnez-vous à un sujet pour recevoir les réponses aux publications de propriétés depuis 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());
Découvrez les modèles de communication entre l'appareil et le cloud dans la rubrique Présentation des communications entre les appareils, IoT Platform et les serveurs.
-
Cliquez sur le bouton Build Project
pour compiler le projet.
Exécuter l'exemple de projet
Connectez un appareil à IoT Platform à l'aide de l'exemple de projet précompilé.
Téléchargez un package de code (v3.1.1Demo ou v5.0Demo) et décompressez-le.
Ouvrez IntelliJ IDEA et importez l'exemple de projet aiot-java-demo depuis le package décompressé.
-
Dans le fichier pom.xml, mettez à jour les versions des dépendances Maven comme indiqué dans la section Télécharger la bibliothèque Paho MQTT pour Java.
ImportantSi une version de dépendance n'est pas disponible, vérifiez son référentiel officiel, tel que Maven Central, pour trouver une version valide.
-
Dans le répertoire src/main/java/com.aliyun.iot, ouvrez le fichier App ou Mqtt5App et remplacez les identifiants de l'appareil d'exemple par les vôtres.
RemarqueUtilisez le fichier App pour la communication via MQTT 3.1 ou 3.1.1. Utilisez le fichier Mqtt5App pour la communication via MQTT 5.0.
-
Dans le code suivant, remplacez les valeurs de productKey, deviceName et deviceSecret par les identifiants de votre appareil.
String productKey = "${ProductKey}"; String deviceName = "${DeviceName}"; String deviceSecret = "${DeviceSecret}"; Modifiez l'endpoint dans la ligne de code
String broker = "ssl://" + productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com" + ":" + port;, comme décrit à l'étape 4 de la section Se connecter à IoT Platform.
-
-
Exécutez le programme App ou Mqtt5App.
En cas de succès, les journaux suivants s'affichent :
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 0Connectez-vous à la console IoT Platform pour afficher l'état de l'appareil et les journaux de votre instance.
Dans le volet de navigation de gauche, choisissez . Vous pouvez constater que l'état de l'appareil est Online.
-
Dans le volet de navigation de gauche, choisissez . Vous pouvez consulter le Cloud-side Log et le Device-side Log. Consultez les rubriques Journal côté cloud et Journal côté appareil.
Si vous utilisez le fichier Mqtt5App, vous pouvez afficher les propriétés personnalisées signalées dans les détails du journal.
Dans le champ Property des détails du journal, vous trouverez les valeurs des propriétés personnalisées signalées, telles que
[{"Value":"value1","Key":"key1"}].
Codes d'erreur
Si l'appareil ne parvient pas à se connecter à IoT Platform via MQTT, utilisez les codes d'erreur pour résoudre le problème. Pour plus d'informations sur les codes d'erreur côté serveur, consultez la rubrique Dépannage.