1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| using System.Text; using MQTTnet;
var mqttFactory = new MqttClientFactory();
using (var mqttClient = mqttFactory.CreateMqttClient()) { var mqttClientOptions = new MqttClientOptionsBuilder() .WithTcpServer("broker.emqx.io", 1883) .WithClientId("icm") .WithCredentials("", "") .Build();
var connectResult = await mqttClient.ConnectAsync(mqttClientOptions, CancellationToken.None); if (connectResult.ResultCode == MqttClientConnectResultCode.Success) { await mqttClient.SubscribeAsync("icm/test");
mqttClient.ApplicationMessageReceivedAsync += e => { Console.WriteLine( $"Received message: {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}" ); return Task.CompletedTask; }; }
Console.WriteLine("The MQTT client is connected.");
var timer = new System.Timers.Timer() { Interval = 10_000, Enabled = true, }; timer.Elapsed += (sender, e) => { Console.WriteLine("Timer");
var applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("icm/state") .WithPayload($"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}") .WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce) .Build(); mqttClient.PublishAsync(applicationMessage, CancellationToken.None);
applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("icm/observation") .WithPayload( "START,2025-04-27-15:00:00,2,1,0,1,1,2000,3000,2500,/202504/27/1200/Ir_202504271200_raw.jpg,/202504/27/1200/vis_202504271200_raw.jpg, /202504/27/1200/cloud_202504271200_pro.jpg,END" ) .WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce) .Build(); mqttClient.PublishAsync(applicationMessage, CancellationToken.None);
applicationMessage = new MqttApplicationMessageBuilder() .WithTopic("icm/power") .WithPayload([0xAA, 0xBB, 0x00, 0x01, 0xBB, 0xAA]) .WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce) .Build();
mqttClient.PublishAsync(applicationMessage, CancellationToken.None); };
Console.WriteLine("System.Timers.Timer.");
Console.ReadKey(); timer.Dispose();
await mqttClient.DisconnectAsync();
Console.WriteLine("MQTT application message is published."); }
|