Cómo usar el protocolo MQTT con C# y la librería MQTTNET Deja un comentario

MQTTNet es una librería .NET que nos permite implementa una comunicación bajo protocolo MQTT, actuando tanto como cliente como broker.

La librería es una de las más completas disponibles para .NET. Está diseñada para ser ligera y altamente eficiente, siendo capaz de gestionar decenas de miles de mensajes por segundos.

MQTTNet soporta las versiones de protocolo MQTT 3.1.0, 3.1.1 y 5.0.0, así como comunicación tanto por TCP como Websockets, en ambos casos con o sin TLS.

Es multiplataforma, y compatible con .NET Standard 1.3+, .NET Core 1.1+.NET, Framework 4.5.2+, Xamarin.Android 7.5+, Mono 5.2+, entre otros. Por tanto, es posible ejecutarlo en Windows, Linux y macOs.

Anuncio:

MQQTNet está disponible bajo licencia MIT y el código se encuentra en https://github.com/chkr1011/MQTTnet. También está disponible cómo paquete nuget para añadirlo cómodamente a vuestro proyecto.

Usando MQTTNet

La librería proporciona una extensa documentación en la página web del proyecto, incluidos numerosos ejemplos de uso en la wiki https://github.com/chkr1011/MQTTnet/wiki.

No obstante, un ejemplo sencillo de uso sería el siguiente.

public class MqttService
{
	IMqttClient mqttClient;

	public async Task Start(string brokerIp, string clientId, Action callback = null)
	{
		var factory = new MqttFactory();

		var options = new MqttClientOptionsBuilder()
		.WithTcpServer(brokerIp)
		.WithClientId(clientId)
		.Build();

		mqttClient = factory.CreateMqttClient();

		mqttClient.UseConnectedHandler(async e =>
		 {
			 Debug.WriteLine("MQTT Connected");
			 await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("MyTopic/test").Build());
		 });

		mqttClient.UseApplicationMessageReceivedHandler(e =>
		{
			Console.WriteLine("### RECEIVED APPLICATION MESSAGE ###");
			Console.WriteLine($"+ Topic = {e.ApplicationMessage.Topic}");
			Console.WriteLine($"+ Payload = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
			Console.WriteLine($"+ QoS = {e.ApplicationMessage.QualityOfServiceLevel}");
			Console.WriteLine($"+ Retain = {e.ApplicationMessage.Retain}");
			Console.WriteLine();

			var message = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);

			callback?.Invoke(message);
		});

		mqttClient.UseDisconnectedHandler(async e =>
		{
			Console.WriteLine("MQTT Reconnecting");
			await Task.Delay(TimeSpan.FromSeconds(5));
			await mqttClient.ConnectAsync(options, CancellationToken.None);
		});

		await mqttClient.ConnectAsync(options, CancellationToken.None);
	}


	public async Task SendCode(string message)
	{
		await mqttClient.PublishAsync("MyTopic/test", message);
	}
}
0 0 votes
Article Rating

Anuncio:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?