Use la biblioteca Paho MQTT para C# con el fin de conectarse a Alibaba Cloud IoT Platform e intercambiar datos mediante un modelo de Thing Specification Language (TSL).
Requisitos previos
Ya creó un producto y un dispositivo en IoT Platform. Además, definió una 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.
Contexto
El código fuente abierto de Paho MQTT para C# incluye un proyecto de solución de Visual Studio. Cada proyecto de la solución se dirige a una plataforma .NET distinta y genera su propia biblioteca de clases.
En este ejemplo, usted crea un proyecto de aplicación de consola dentro de la solución. Este proyecto llama a la biblioteca de clases de Paho MQTT para conectarse a Alibaba Cloud IoT Platform.
Preparar el entorno de desarrollo
Este ejemplo utiliza el siguiente sistema operativo y las siguientes herramientas de desarrollo:
Sistema operativo: Windows 10
Entorno de desarrollo integrado (IDE): Visual Studio 2019
Instale el entorno de desarrollo:
Descargue Visual Studio Community 2019 y descomprima el paquete.
Abra Visual Studio Installer, seleccione .NET desktop development y luego haga clic en Install.
Descargar el cliente Paho
Descargue el código fuente de Paho MQTT para C#. El código fuente incluye el archivo del proyecto de solución de Visual Studio M2Mqtt.sln. Utilice este archivo de proyecto para desarrollar el cliente de su dispositivo. Para obtener más información, consulte Connect to IoT Platform.
También puede visitar Eclipse Paho para consultar más detalles sobre el código fuente de Paho.
Esta demostración usa la rama master. El commit ID es b2e64bc4485721a0bd5ae805d9f4917e8d040e81.
Conectarse a IoT Platform
-
Descargue MqttSign.cs para obtener el código fuente que Alibaba Cloud proporciona y calcular los parámetros de conexión MQTT.
El archivo MqttSign.cs 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:
Definición de tipo
Descripción del método
public bool
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 Visual Studio, importe el archivo de solución M2Mqtt.sln del código fuente de Paho y cree un proyecto de aplicación.
Importe al proyecto de aplicación el archivo MqttSign.cs que descargó en el paso 1.
-
Agregue en el proyecto de aplicación el archivo de programa para conectar el dispositivo a IoT Platform.
Llame a la clase MqttSign definida en MqttSign.cs para calcular los parámetros de conexión MQTT necesarios para vincular el dispositivo con IoT Platform.
A continuación se presentan las instrucciones de desarrollo y los ejemplos de código correspondientes:
-
Calcule los parámetros de conexión MQTT.
Llame a MqttSign en MqttSign.cs 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); Console.WriteLine("username: " + sign.getUsername()); Console.WriteLine("password: " + sign.getPassword()); Console.WriteLine("clientid: " + sign.getClientid()); -
Utilice el cliente Paho MQTT para conectarse a 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");NotaEn el código
String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";, reemplace el endpoint por el que corresponda a la instancia de su dispositivo.Para conocer los formatos de endpoint de las instancias públicas y Enterprise, consulte View instance endpoints.
-
Reporte datos del dispositivo a IoT Platform.
El siguiente ejemplo de código muestra cómo reportar la propiedad LightSwitch del modelo 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));Para conocer el formato de datos de comunicación del modelo TSL, consulte Device properties, events, and services.
Si desea comunicarse mediante un tema personalizado, consulte What is a topic?.
-
Suscríbase a un tema para recibir datos de IoT Platform.
En el siguiente ejemplo, el dispositivo se suscribe al tema que IoT Platform utiliza para devolver un mensaje de confirmación después de que el dispositivo reporta el valor de una propiedad.
// 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()); }
Consulte los patrones de comunicación entre dispositivos y la nube en Overview of communications among devices, IoT platform, and servers.
-
Compile el proyecto.
Demostración
Utilice el código de demostración para conectarse a IoT Platform.
-
Descargue el paquete del código de demostración y descomprímalo en la carpeta aiot-csharp-demo.
La carpeta aiot-csharp-demo\paho.mqtt.m2mqtt-master\aiot-csharp-demo contiene el programa completo para conectar un dispositivo a IoT Platform y reportar propiedades del modelo TSL.
Archivo
Descripción
MqttSign.cs
Código fuente proporcionado por Alibaba Cloud para generar los parámetros de conexión MQTT. Durante la ejecución, Program.cs llama a la función MqttSign() definida en este archivo para calcular los parámetros username, password y clientId.
Program.cs
Contiene la lógica para conectar el dispositivo a IoT Platform y reportar los datos de las propiedades.
-
Inicie Visual Studio Community 2019, seleccione Open a project or solution y abra el archivo aiot-csharp-demo\paho.mqtt.m2mqtt-master\M2Mqtt.sln.
De esta manera, se importa el archivo del proyecto aiot-csharp-demo a Visual Studio.
-
En Program.cs, reemplace la información de dispositivo de ejemplo con los datos reales de su dispositivo.
-
En el siguiente código, sustituya 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 el código
String broker = productKey + ".iot-as-mqtt.cn-shanghai.aliyuncs.com";. Para obtener más información, consulte el paso 4 de la sección «Conectarse a IoT Platform».
-
-
Establezca aiot-csharp-demo como proyecto de inicio y ejecute el proyecto para conectar el dispositivo a 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"}Una vez conectado el dispositivo, los registros locales muestran que la conexión, el reporte de datos y la suscripción a mensajes se completaron correctamente.
... 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 ...Inicie 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.
Elija . Allí podrá consultar los IoT Platform logs y los on-premises device logs. Para obtener más información, consulte IoT Platform logs y On-premises device logs.
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.