Utilisez la bibliothèque Paho MQTT pour C# afin de vous connecter à Alibaba Cloud IoT Platform et d'échanger des données via un modèle Thing Specification Language (TSL).
Prérequis
Vous avez créé un produit et un appareil dans IoT Platform, et défini une propriété LightSwitch pour le produit sur l'onglet Function Definition.
Pour plus d'informations, consultez les rubriques Créer un produit, Créer un seul appareil et Ajouter un modèle TSL pour un seul produit.
Contexte
Le code source ouvert de Paho MQTT pour C# inclut une solution Visual Studio. Chaque projet de la solution cible une plateforme .NET différente et génère la bibliothèque de classes correspondante.
Dans cet exemple, vous créez un projet d'application console au sein de la solution. Ce projet appelle la bibliothèque de classes Paho MQTT pour se connecter à Alibaba Cloud IoT Platform.
Préparation de l'environnement de développement
Cet exemple utilise le système d'exploitation et les outils de développement suivants :
Système d'exploitation : Windows 10
Environnement de développement intégré (IDE) : Visual Studio 2019
Installez l'environnement de développement :
Téléchargez Visual Studio Community 2019 et décompressez le package.
Ouvrez Visual Studio Installer, sélectionnez .NET desktop development, puis cliquez sur Install.
Téléchargement du client Paho
Téléchargez le code source de Paho MQTT pour C#. Le code source inclut le fichier de solution Visual Studio M2Mqtt.sln. Utilisez ce fichier de projet pour développer votre client d'appareil. Pour plus d'informations, consultez la section Connexion à IoT Platform.
Consultez également Eclipse Paho pour obtenir plus d'informations sur le code source Paho.
Cette démonstration utilise la branche master. L'ID de commit est b2e64bc4485721a0bd5ae805d9f4917e8d040e81.
Connexion à IoT Platform
-
Téléchargez MqttSign.cs pour obtenir le code source fourni par Alibaba Cloud qui permet de calculer les paramètres de connexion MQTT.
Le fichier MqttSign.cs 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 :
Définition de type
Description de la méthode
public bool
calculate(String productKey, String deviceName, String deviceSecret)Calcule les paramètres de connexion MQTT username, password et clientid à partir des paramètres 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 Visual Studio, importez le fichier de solution Visual Studio M2Mqtt.sln depuis le code source Paho, puis créez un projet d'application.
Importez le fichier MqttSign.cs téléchargé à l'étape 1 dans le projet d'application.
-
Dans le projet d'application, ajoutez le fichier de programme permettant de connecter l'appareil à IoT Platform.
Appelez la classe MqttSign dans MqttSign.cs pour calculer les paramètres de connexion MQTT nécessaires à la connexion de l'appareil à IoT Platform.
Les instructions de développement et exemples de code suivants sont fournis :
-
Calcul des paramètres de connexion MQTT.
Appelez MqttSign dans MqttSign.cs pour 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); Console.WriteLine("username: " + sign.getUsername()); Console.WriteLine("password: " + sign.getPassword()); Console.WriteLine("clientid: " + sign.getClientid()); -
Utilisation du client Paho MQTT pour se connecter à IoT Platform.
// Use Paho to connect to Alibaba Cloud IoT Platform. int port = 443; String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com"; MqttClient mqttClient = new MqttClient(broker, port, true, MqttSslProtocols.TLSv1_2, null, null); mqttClient.Connect(sign.getClientid(), sign.getUsername(), sign.getPassword()); Console.WriteLine("Broker: " + broker + " Connected");RemarqueDans le code
String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";, remplacez l'endpoint par celui correspondant à l'instance de votre appareil.Pour plus d'informations sur les formats d'endpoint pour les instances publiques et Enterprise, consultez la rubrique Afficher les endpoints d'instance.
-
Signalement des données de l'appareil vers IoT Platform.
L'exemple de code suivant montre comment signaler la propriété LightSwitch du modèle TSL.
// Publish a message using the Paho MQTT client. String topic = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post"; String message = "{\"id\":\"1\",\"version\":\"1.0\",\"params\":{\"LightSwitch\":0}}"; mqttClient.Publish(topic, Encoding.UTF8.GetBytes(message));Pour connaître le format des données pour la communication du modèle TSL, consultez la rubrique Propriétés, événements et services des appareils.
Si vous souhaitez utiliser un sujet personnalisé pour la communication, consultez la rubrique Qu'est-ce qu'un sujet ?.
-
Abonnement à un sujet pour recevoir des données d'IoT Platform.
Dans l'exemple suivant, l'appareil s'abonne au sujet utilisé par IoT Platform pour renvoyer un accusé de réception après le signalement d'une valeur de propriété.
// Subscribe to a message using the Paho MQTT client. String topicReply = "/sys/" + productKey + "/" + deviceName + "/thing/event/property/post_reply"; mqttClient.MqttMsgPublishReceived += MqttPostProperty_MqttMsgPublishReceived; mqttClient.Subscribe(new string[] { topicReply }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_MOST_ONCE }); ... private static void MqttPostProperty_MqttMsgPublishReceived(object sender, uPLibrary.Networking.M2Mqtt.Messages.MqttMsgPublishEventArgs e) { Console.WriteLine("reply topic :" + e.Topic); Console.WriteLine("reply payload:" + e.Message.ToString()); }
Découvrez les modèles de communication appareil-cloud dans la rubrique Présentation des communications entre les appareils, IoT Platform et les serveurs.
-
Compilez le projet.
Démo
Utilisez le code de démonstration pour vous connecter à IoT Platform.
-
Téléchargez le package de code de démonstration et décompressez-le dans le dossier aiot-csharp-demo.
Le dossier aiot-csharp-demo\paho.mqtt.m2mqtt-master\aiot-csharp-demo contient le programme complet permettant de connecter un appareil à IoT Platform et de signaler les propriétés du modèle TSL.
Fichier
Description
MqttSign.cs
Code source fourni par Alibaba Cloud pour générer les paramètres de connexion MQTT. Au moment de l'exécution, Program.cs appelle la fonction MqttSign() définie dans ce fichier pour calculer les paramètres username, password et clientId.
Program.cs
Contient la logique de connexion de l'appareil à IoT Platform et de signalement des données de propriété.
-
Démarrez Visual Studio Community 2019, sélectionnez Open a project or solution, puis ouvrez le fichier aiot-csharp-demo\paho.mqtt.m2mqtt-master\M2Mqtt.sln.
Le fichier de projet aiot-csharp-demo est alors importé dans Visual Studio.
-
Dans Program.cs, remplacez les informations d'appareil d'exemple par vos informations d'appareil réelles.
-
Dans le code suivant, remplacez les valeurs de productKey, deviceName et deviceSecret par vos identifiants d'appareil.
String productKey = "${ProductKey}"; String deviceName = "${DeviceName}"; String deviceSecret = "${DeviceSecret}"; Modifiez l'endpoint dans le code
String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";. Pour plus d'informations, consultez l'étape 4 de la section « Connexion à IoT Platform ».
-
-
Définissez aiot-csharp-demo comme projet de démarrage et exécutez le projet pour connecter l'appareil à IoT Platform.
username: lxxx3 password: E251xxx clientid: g1xxx|timestamp=1606810137987, _v=paho-c#-1.0.0, securemode=2, signmethod=hmacsha256| broker: iotxxxn Connected subscribe: /sys/gxxx/thing/event/property/post_reply publish: {"id":"1","version":"1.0","params":{"LightSwitch":0}} reply topic :/sys/gxxxp/thing/event/property/post_reply reply payload:{"code":200,"data":{},"id":"1","message":"success","method":"thing.event.property.post","version":"1.0"}Une fois l'appareil connecté, les journaux locaux indiquent une connexion réussie, un signalement des données et un abonnement aux messages.
... broker: a1X2bEn****.iot-as-mqtt.cn-shanghai.aliyuncs.com Connected ... publish: {"id":"1","version":"1.0","params":{"LightSwitch":0}} ... subscribe: /sys/a1X2bEn****/example1/thing/event/property/post_reply ...Connectez-vous à la console IoT Platform pour afficher l'état de l'appareil et les journaux dans votre instance.
Dans le volet de navigation de gauche, choisissez . Vous pouvez constater que l'état de l'appareil est Online.
Choisissez . Vous pouvez consulter les IoT Platform logs et les on-premises device logs. Pour plus d'informations, consultez les rubriques Journaux IoT Platform et Journaux des appareils locaux.
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.