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

本文主要介绍如何使用Docker搭建EMQX MQTT服务器,并将其接入到Home Assistant中,最后演示如何使用.NET接入MQTT。

1. 背景

在智能家居系统中,MQTT(消息队列遥测传输协议)是一种轻量级的消息传输协议,特别适用于物联网(IoT)设备之间的通信。EMQX 是一个高性能的、开源的 MQTT 消息服务器,支持 MQTT 3.1、3.1.1 和 5.0 协议,并可以方便的创建集群,实现高可用性。Home Assistant 是一个开源的家庭自动化平台,支持 MQTT 集成,可以通过 MQTT 与其他设备进行通信。

本文将介绍如何使用 Docker 搭建 EMQX MQTT 服务器,并将其接入到 Home Assistant 中,最后演示如何使用 .NET 接入 MQTT。

2. 搭建 EMQX MQTT 服务器

2.1 安装 EMQX

使用 Docker 安装 EMQX 是最简单的方法之一。首先确保你的系统上已经安装了 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

当然,你可以可以通过 docker-compose 来管理 EMQX 服务:

services:emqx:image: emqx/emqx:5.8container_name: emqxrestart: alwaysports:- "1883:1883"- "8083:8083"- "8084:8084"- "8883:8883"- "18083:18083"environment:EMQX_NAME: iot_emqxEMQX_HOST: 127.0.0.1EMQX_TELEMETRY__ENABLE: falsevolumes:- /volume1/docker/mqtt/data:/opt/emqx/data:rw- /volume1/docker/mqtt/log:/opt/emqx/log:rwuser: "${UID}:${GID}"networks:- defaultnetworks:default:driver: bridge

这里我们将 EMQX 的数据和日志目录映射到宿主机的 /volume1/docker/mqtt/data/volume1/docker/mqtt/log 目录中,以便数据持久化。并且禁用了 EMQX 的遥测功能,对默认的节点名称进行了修改。

2.2 端口说明

  • 1883: MQTT 协议端口
  • 8883: MQTT over SSL 端口
  • 8083: MQTT over WebSocket 端口
  • 8084: MQTT over WebSocket with SSL 端口
  • 18083: 管理界面端口

请添加图片描述

以上是 EMQX 默认的监听器配置,上一节我们使用了默认的端口映射,你也可以根据需要修改端口配置。

2.3 配置 EMQX

EMQX 安装完成后,你可以通过访问 http://localhost:18083 来打开 EMQX 的管理界面,默认用户名是 admin,密码是 public。你可以在这里查看和修改 EMQX 的配置信息。首次登录时,会要求修改默认密码。

当然忘记密码也不是问题,你可以在 bash 中通过以下命令重置管理后台指定用户的密码:

emqx ctl admins passwd <Username> <Password>

与管理后台不同的是,客户端是单独的一套认证体系,你可以通过管理后台的 “访问控制” -> “客户端认证” 来创建新的客户端认证信息。这里我们可以通过使用客户端用户名、Client ID 与密码进行认证。

选择 “Password-Based”,数据源使用内置数据库即可,其他不需要修改,直接创建即可完。

请添加图片描述

完成认证信息的创建后,可以在该认证信息的条目中进行用户的管理,创建、删除、修改用户的密码等操作。这里我们需要创建一个用户,比如 ha,用于后面的 Home Assistant 连接。

3. 将 EMQX 接入 Home Assistant

3.1 启用高级模型

在 Home Assistant 中,需要启用高级模型才能使用 MQTT 集成中的高级功能,主要是为了更换 MQTT 协议为版本 5,默认是 3.1.1 接入。在个人资料中,点击 高级模式 开关,然后重启 Home Assistant 即可启用高级模式。

请添加图片描述

3.2 安装 MQTT 集成

在 Home Assistant 中,导航到 设置 -> 设备与服务,然后点击右下角的 + 添加集成 按钮,搜索并选择 MQTT

请添加图片描述

在添加 MQTT 集成时,需要输入 EMQX 服务器的信息,然后打开高级选项,点击提交。

请添加图片描述

此时配置页面会刷新,展示更多的配置信息,你需要填入前面设置的客户端认证信息,用户名和密码,然后将 MQTT 协议改为版本 5,点击下一步。

此时,Home Assistant 将会连接到 EMQX 服务器,你可以在 EMQX 管理后台的监控中看到 MQTT 设备的状态,验证是否成功连接。

请添加图片描述

我们可以看到,Home Assistant 已经成功连接到 EMQX 服务器,并已经订阅了一些主题。这里是因为默认开启了设备自动发现功能,Home Assistant 会自动订阅一些主题,以便发现设备。

4. 使用 .NET 接入 MQTT

到此我们已经成功搭建了 EMQX MQTT 服务器,并将其接入到 Home Assistant 中。如果我们想设计一个软件来接入 MQTT 服务器,并实现在智能家居系统中发布和订阅消息,那么首先我们需要了解如何在 .NET 中实现 MQTT 客户端。下面我们将演示如何使用 .NET 来实现一个简单的 MQTT 客户端,连接到 EMQX 服务器,并发布一条消息。

4.1 安装 MQTT 客户端库

在 .NET 项目中,可以使用 MQTTnet 库来实现 MQTT 客户端。首先,通过 NuGet 安装该库:

dotnet add package MQTTnet

4.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服务地址", 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 服务器正在运行。运行后,客户端将连接到 EMQX,并发布一条消息到 home/temperature 主题。你可以在监控中看到该消息。

请添加图片描述

5. 最后

通过本文的介绍,我们已经成功搭建了 EMQX MQTT 服务器,并将其接入到 Home Assistant 中,同时也演示了如何使用 .NET 接入 MQTT。希望这篇文章能帮助你更好地理解和使用 MQTT 协议,在你的智能家居项目中发挥更大的作用。后续我们将继续介绍在 .nanoFramework 中的使用,以及通过 MQTT 在 Home Assistant 中创建自定义的智能家居设备,敬请期待。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148844.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode-10. 正则表达式匹配

题目描述 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s 的&#xff0c;而不是部分字符串。 示例 1&#xff1a; 输入&a…

稀土阻燃剂应用在PE(聚乙烯)上的优势

稀土阻燃协效剂基于稀土4f电子层结构带来的特有属性,在聚合物材料燃烧时可催化酯化成炭,迅速在高分子表面形成致密连续的碳层,隔绝聚合物材料内部的可燃性气体与氧气的接触,从而达到阻燃抑烟的效果,且燃烧时不产生有毒有害气体。其主要特点如下&#xff1a; 有效性&#xff1a;…

巡检系统新选择:零代码设备巡检系统的优势与功能

在现代工业生产中&#xff0c;设备的稳定运行是企业正常生产的关键。为了确保设备的可靠性和安全性&#xff0c;设备巡检系统成为了企业不可或缺的工具。而零代码设备巡检系统以其独特的优势&#xff0c;为企业的设备管理带来了全新的体验。 目前&#xff0c;市场上的巡检系统种…

OpenAI o1模型怎么使用,这篇文章告诉你

九月最大的热点无疑就是OpenAI推出o1模型 此次发布的o1 系列模型就是之前内部代码为“草莓”模型。 下面就给大家介绍一下此次o1模型的强大之处以及使用方法。 如果大家想要了解OpenAI o1方法&#xff0c;可直接拉到文章末尾。 1.、博士级学科能力 o1模型在推理能力上展现出…

[笔记]一组电缆、定位相关产品的技术参数

csdn不允许做广告&#xff0c;这里的那家定位供应商的技术看起来是可以的。很有希望。它的原理并不复杂&#xff0c;这家企业在处理业务领域以外的新型产品时&#xff0c;是查过资料的&#xff0c;这就超过了60%的同行。 1.电缆 仅给出现在市面供应的铠装电缆结构&#xff0c…

只用几行代码,不依赖任何框架?SMTFlow 轻松实现前端流程图

只用几行代码&#xff0c;不依赖任何框架&#xff1f;SMTFlow 轻松实现前端流程图&#xff01; 在前端开发中&#xff0c;如果你需要一个简单好用的流程图设计工具&#xff0c;SMTFlow 绝对是你的不二之选&#xff01;本文将介绍 SMTFlow 的核心功能、特点以及如何快速上手。 工…

RAG高级优化:检索策略探讨Fusion, HyDE安排上(含代码)

传统的检索方法通常依赖于对query进行语义理解(基于向量)或关键字匹配(BM25)&#xff0c;这两种方法都有其优点和缺点。融合检索、HyDE和RAG-Fusion可以创建一个更健壮和准确的检索系统。本文将介绍三种优化方法&#xff1a; Fusion retrieval&#xff1a; 基于向量和基于bm25的…

内核驱动开发之系统移植

系统移植 系统移植&#xff1a;定制linux操作系统 系统移植是驱动开发的前导&#xff0c;驱动开发是系统运行起来之后&#xff0c;在内核中新增一些子功能而已 系统移植就四个部分&#xff1a; 交叉编译环境搭建好bootloader的选择和移植&#xff1a;BootLoader有一些很成熟…

有关shell练习

统计家目录下.c文件的个数 #!/bin/bash count0for file in ~/* doif [[ "$file" *.c ]]; then((count))fidone echo "家目录下.c文件个数为:$count"定义一个稀疏数组(下标不连续)&#xff0c;写一个函数&#xff0c;求该稀疏数组的和&#xff0c;要求稀…

苹果、OPPO、小米的选择:聚焦TI AMOLED显示屏电源管理双子星芯片

如果说眼睛是心灵的窗户,那么显示屏就是计算机的窗户,通过这一扇窗,我们可以更直观的进行人机对话,更默契的与计算机配合。如今在各种产品的屏幕应用中,更多使用的是OLED显示屏,今天,平台君就给大家说说TI的两枚三路输出AMOLED显示器电源芯片——TPS65632和TPS65631W。 …

中高级工程师都需知道的七种高级 JavaScript 技术用例

直接干货走起&#xff1a; 1. 掌握闭包&#xff0c;让代码更简洁 闭包是 JavaScript 中最强大且经常被误解的功能之一。它们允许你使用私有变量创建函数&#xff0c;从而使你的代码更加模块化和更安全。 什么是闭包&#xff1f;当函数记住其词法范围时&#xff0c;即使函数…

ESP32 本地大模型部署语音助手

ESP32S3 Box 提供了 chatgpt 的 demo。因为访问不了的原因&#xff0c;打算改来做一个本地化部署的专用语音助手。 文章目录 准备工作Windows 安装 ESP-IDFWSL 安装 ESP-IDF配置 IDF编译 chatgpt demo串口映射下载 语音助手调试步骤遇到的问题在WSL2中&#xff0c;server.py 脚…

Vue3项目开发——新闻发布管理系统(八)

文章目录 十、新闻管理模块设计开发1、新闻管理主页面设计1.1 基本架构搭建1.1.1 搜索表单1.1.2 新闻主表格样式(静态数据模拟渲染)1.2 新闻分类选择框1.2.1 新建组件1.2.2 页面中导入渲染1.2.3 调用接口,动态渲染下拉分类,设计成 v-model 的使用方式1.2.4 父组件定义参数绑定…

供应链采购管理系统:开启智能采购新时代

在当今全球化的商业环境中&#xff0c;供应链管理的高效性和智能化对于企业的生存与发展至关重要。而供应链采购管理系统&#xff0c;尤其是智能采购系统&#xff0c;正成为企业提升竞争力的关键工具。 一、传统采购管理的挑战 传统的供应链采购管理往往面临着诸多难题。首先&a…

数据中心里全速运行的处理器正在浪费能源

数据中心是耗电大户&#xff0c;运营商一直在努力解决的一个关键问题是如何减少能源和资源消耗。人们已经找到了一些巧妙的解决方案&#xff0c;例如使用非饮用水来冷却设备&#xff0c;但一个显而易见的解决方案似乎被忽略了&#xff1a;启用处理器的各种省电功能。 随着需求的…

示例说明:sql语法学习

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库的标准语言。学习SQL可以帮助你有效地查询、插入、更新和删除数据库中的数据。以下是SQL语法的一些基本概念和常用命令&#xff1a; 1. SQL基础语法 SQL关键字&am…

揭秘化工产品网络优化成本:性价比高的策略大公开

合作咨询联系竑图 hongtu201988 化工产品网络推广到底需要多少钱&#xff1f;为什么有些几千就行&#xff0c;有些需要几万甚至几十万不等&#xff1f;可以肯定地说&#xff1a;化工产品网络优化的费用并非一成不变&#xff0c;而是受到多种因素的影响。今天湖南竑图网络给大家…

ucosii+STM32 BLDC电机控制器设计 附源程序Proteus仿真

资料下载地址&#xff1a;ucosiiSTM32 BLDC电机控制器设计 附源程序Proteus仿真 嵌入式&#xff0c;现在把我的程序和设计思路分享给大家。 软件所用版本如下 Proteus版本 SP 8.7 STM32CubeMX 版本 5.4.0 HAL固件库版本 1.8.0 Keil 版本 uVison5 一、设计思路&#xff1a; …

如何构建出更好的大模型RAG系统?

ChatGPT爆火之后&#xff0c;以ChatPDF为首的产品组合掀起了知识库问答的热潮。 在过去一整年中&#xff0c;大多数人都在完成RAG系统到高级RAG系统的迭代升级。但是技术发展是迅速的&#xff0c;如何深入了解RAG的发展&#xff0c;做出更好的RAG系统&#xff0c;其实还是非常…