日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

搭建EMQX MQTT服務(wù)器并接入Home Assistant和.NET程序

搭建EMQX MQTT服務(wù)器并接入Home Assistant和.NET程序

文章圖片

搭建EMQX MQTT服務(wù)器并接入Home Assistant和.NET程序

文章圖片

搭建EMQX MQTT服務(wù)器并接入Home Assistant和.NET程序

文章圖片

搭建EMQX MQTT服務(wù)器并接入Home Assistant和.NET程序

本文主要介紹如何使用Docker搭建EMQX MQTT服務(wù)器 , 并將其接入到Home Assistant中 , 最后演示如何使用.NET接入MQTT 。
1. 背景在智能家居系統(tǒng)中 , MQTT(消息隊列遙測傳輸協(xié)議)是一種輕量級的消息傳輸協(xié)議 , 特別適用于物聯(lián)網(wǎng)(IoT)設(shè)備之間的通信 。 EMQX 是一個高性能的、開源的 MQTT 消息服務(wù)器 , 支持 MQTT 3.1、3.1.1 和 5.0 協(xié)議 , 并可以方便的創(chuàng)建集群 , 實現(xiàn)高可用性 。 Home Assistant 是一個開源的家庭自動化平臺 , 支持 MQTT 集成 , 可以通過 MQTT 與其他設(shè)備進(jìn)行通信 。
本文將介紹如何使用 Docker 搭建 EMQX MQTT 服務(wù)器 , 并將其接入到 Home Assistant 中 , 最后演示如何使用 .NET 接入 MQTT 。
2. 搭建 EMQX MQTT 服務(wù)器2.1 安裝 EMQX使用 Docker 安裝 EMQX 是最簡單的方法之一 。 首先確保你的系統(tǒng)上已經(jīng)安裝了 Docker 。 你可以通過下面的命令來安裝 EMQX:
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:latest當(dāng)然 , 你可以可以通過 docker-compose 來管理 EMQX 服務(wù):
services: emqx: image: emqx/emqx:5.8 container_name: emqx restart: always ports: - \"1883:1883\" - \"8083:8083\" - \"8084:8084\" - \"8883:8883\" - \"18083:18083\" environment: EMQX_NAME: iot_emqx EMQX_HOST: 127.0.0.1 EMQX_TELEMETRY__ENABLE: false volumes: - /volume1/docker/mqtt/data:/opt/emqx/data:rw - /volume1/docker/mqtt/log:/opt/emqx/log:rw user: \"${UID:${GID\" networks: - default
networks: default: driver: bridge這里我們將 EMQX 的數(shù)據(jù)和日志目錄映射到宿主機(jī)的 /volume1/docker/mqtt/data/volume1/docker/mqtt/log 目錄中 , 以便數(shù)據(jù)持久化 。 并且禁用了 EMQX 的遙測功能 , 對默認(rèn)的節(jié)點名稱進(jìn)行了修改 。
2.2 端口說明【搭建EMQX MQTT服務(wù)器并接入Home Assistant和.NET程序】?1883: MQTT 協(xié)議端口?8883: MQTT over SSL 端口?8083: MQTT over WebSocket 端口?8084: MQTT over WebSocket with SSL 端口?18083: 管理界面端口


默認(rèn)監(jiān)聽器


以上是 EMQX 默認(rèn)的監(jiān)聽器配置 , 上一節(jié)我們使用了默認(rèn)的端口映射 , 你也可以根據(jù)需要修改端口配置 。
2.3 配置 EMQXEMQX 安裝完成后 , 你可以通過訪問 http://localhost:18083 來打開 EMQX 的管理界面 , 默認(rèn)用戶名是 admin , 密碼是 public 。 你可以在這里查看和修改 EMQX 的配置信息 。 首次登錄時 , 會要求修改默認(rèn)密碼 。
當(dāng)然忘記密碼也不是問題 , 你可以在 bash 中通過以下命令重置管理后臺指定用戶的密碼:
emqx ctl admins passwd <Username> <Password>與管理后臺不同的是 , 客戶端是單獨的一套認(rèn)證體系 , 你可以通過管理后臺的 “訪問控制” -> “客戶端認(rèn)證” 來創(chuàng)建新的客戶端認(rèn)證信息 。 這里我們可以通過使用客戶端用戶名、Client ID 與密碼進(jìn)行認(rèn)證 。
選擇 “Password-Based” , 數(shù)據(jù)源使用內(nèi)置數(shù)據(jù)庫即可 , 其他不需要修改 , 直接創(chuàng)建即可完 。


創(chuàng)建認(rèn)證


完成認(rèn)證信息的創(chuàng)建后 , 可以在該認(rèn)證信息的條目中進(jìn)行用戶的管理 , 創(chuàng)建、刪除、修改用戶的密碼等操作 。 這里我們需要創(chuàng)建一個用戶 , 比如 ha , 用于后面的 Home Assistant 連接 。
3. 將 EMQX 接入 Home Assistant3.1 啟用高級模型在 Home Assistant 中 , 需要啟用高級模型才能使用 MQTT 集成中的高級功能 , 主要是為了更換 MQTT 協(xié)議為版本 5 , 默認(rèn)是 3.1.1 接入 。 在個人資料中 , 點擊 高級模式 開關(guān) , 然后重啟 Home Assistant 即可啟用高級模式 。


高級模式


3.2 安裝 MQTT 集成在 Home Assistant 中 , 導(dǎo)航到 設(shè)置 -> 設(shè)備與服務(wù) , 然后點擊右下角的 + 添加集成 按鈕 , 搜索并選擇 MQTT 。


MQTT


在添加 MQTT 集成時 , 需要輸入 EMQX 服務(wù)器的信息 , 然后打開高級選項 , 點擊提交 。


高級選項


此時配置頁面會刷新 , 展示更多的配置信息 , 你需要填入前面設(shè)置的客戶端認(rèn)證信息 , 用戶名和密碼 , 然后將 MQTT 協(xié)議改為版本 5 , 點擊下一步 。
此時 , Home Assistant 將會連接到 EMQX 服務(wù)器 , 你可以在 EMQX 管理后臺的監(jiān)控中看到 MQTT 設(shè)備的狀態(tài) , 驗證是否成功連接 。


連接的客戶端


我們可以看到 , Home Assistant 已經(jīng)成功連接到 EMQX 服務(wù)器 , 并已經(jīng)訂閱了一些主題 。 這里是因為默認(rèn)開啟了設(shè)備自動發(fā)現(xiàn)功能 , Home Assistant 會自動訂閱一些主題 , 以便發(fā)現(xiàn)設(shè)備 。
4. 使用 .NET 接入 MQTT到此我們已經(jīng)成功搭建了 EMQX MQTT 服務(wù)器 , 并將其接入到 Home Assistant 中 。 如果我們想設(shè)計一個軟件來接入 MQTT 服務(wù)器 , 并實現(xiàn)在智能家居系統(tǒng)中發(fā)布和訂閱消息 , 那么首先我們需要了解如何在 .NET 中實現(xiàn) MQTT 客戶端 。 下面我們將演示如何使用 .NET 來實現(xiàn)一個簡單的 MQTT 客戶端 , 連接到 EMQX 服務(wù)器 , 并發(fā)布一條消息 。
4.1 安裝 MQTT 客戶端庫在 .NET 項目中 , 可以使用 MQTTnet 庫來實現(xiàn) MQTT 客戶端 。 首先 , 通過 NuGet 安裝該庫:
dotnet add package MQTTnet4.2 編寫 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服務(wù)地址\" 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; 4.3 運行客戶端編譯并運行你的 .NET 項目 , 確保你的 EMQX 服務(wù)器正在運行 。 運行后 , 客戶端將連接到 EMQX , 并發(fā)布一條消息到 home/temperature 主題 。 你可以在監(jiān)控中看到該消息 。


發(fā)布消息


5. 最后通過本文的介紹 , 我們已經(jīng)成功搭建了 EMQX MQTT 服務(wù)器 , 并將其接入到 Home Assistant 中 , 同時也演示了如何使用 .NET 接入 MQTT 。 希望這篇文章能幫助你更好地理解和使用 MQTT 協(xié)議 , 在你的智能家居項目中發(fā)揮更大的作用 。 后續(xù)我們將繼續(xù)介紹在 .nanoFramework 中的使用 , 以及通過 MQTT 在 Home Assistant 中創(chuàng)建自定義的智能家居設(shè)備 , 敬請期待 。


    推薦閱讀