搭建 EMQX MQTT 服务器
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest
将 EMQX 接入 Home Assistant
安装 MQTT 集成
安装 MQTT 客户端库
在 .NET 项目中,可以使用 MQTTnet 库来实现 MQTT 客户端。首先,通过 NuGet 安装该库:
dotnet add package MQTTnet
编写 MQTT 客户端代码
以下是一个简单的 .NET MQTT 客户端示例:
using System.Text;
using MQTTnet;
using MQTTnet.Client;
class Program
{
static async Task Main(string[] args)
{
var factory = new MqttFactory();
var mqttClient = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithClientId("Client1")
.WithTcpServer("MQTT服务地址", 1883)
.WithCredentials("你的客户端登录用户名", "你的密码")
.WithCleanSession()
.Build();
mqttClient.ConnectedAsync += MqttClient_ConnectedAsync;
mqttClient.DisconnectedAsync += MqttClient_DisconnectedAsync;
mqttClient.ApplicationMessageReceivedAsync += MqttClient_ApplicationMessageReceivedAsync;
await mqttClient.ConnectAsync(options);
await mqttClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("home/temperature").Build());
Console.WriteLine("Press any key to send a message...");
Console.ReadLine();
var message = new MqttApplicationMessageBuilder()
.WithTopic("home/temperature")
.WithPayload("23.5")
.WithRetainFlag()
.Build();
await mqttClient.PublishAsync(message);
Console.WriteLine("Message published. Press any key to exit.");
Console.ReadLine();
await mqttClient.DisconnectAsync();
}
private static Task MqttClient_ApplicationMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs arg)
{
Console.WriteLine($"Message received on topic: {arg.ApplicationMessage.Topic}.");
Console.WriteLine($"Payload: {Encoding.UTF8.GetString(arg.ApplicationMessage.Payload)}");
return Task.CompletedTask;
}
private static Task MqttClient_DisconnectedAsync(MqttClientDisconnectedEventArgs arg)
{
Console.WriteLine("Disconnected from EMQX.");
return Task.CompletedTask;
}
private static Task MqttClient_ConnectedAsync(MqttClientConnectedEventArgs arg)
{
Console.WriteLine("Connected to EMQX.");
return Task.CompletedTask;
}
}
https://blog.csdn.net/farway000/article/details/142548023