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


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<string> 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:

Previous M5Stack Timer Camera X, un ESP32 cámara con batería
Next Mejores software de diseño de PCBs gratuitos
0 Comments
Inline Feedbacks
View all comments