受欢迎的博客标签

搭建EMQX MQTT服务器并接入Home Assistant和.NET程序

Published

搭建 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