一、介绍

mqtt是物联网通信中,非常重要的工具。作用是负责消息的传递,相对于其他的传递方式,mqtt更加稳定。

1、优点

比如,使用nodered里homeassistant节点,一旦节点过多,就会出现消息掉线、没有反应的状况。这是因为homeassistant节点,使用的是websocket协议传输,数量一大就会出问题。而使用mqtt,则完全不需要担心这种问题。

2、网络

mqtt既可以是局域网中使用,也可以使用公网。(使用公网服务器部署,则mqtt就可以公网连接,不受局域网限制!)

3、mqtt插件

mqtt目前主流使用2种开源的免费插件:eclipse-mosquitto和EMQX

(1)eclipse-mosquitto

特点是轻量,只占用几十兆内存。

(2)EMQX

特点是功能可视化,可以看到客户端和连接数,但占用内存是三四百兆。

二、EMQX安装

推荐使用docker安装,方便和homeassistant等服务一同管理。

(1)docker安装

docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 --privileged --restart=always emqx/emqx

安装完成后,稍等1、2分钟,可以打开主机+端口18083,访问到emqx的控制界面。

例如:http://192.168.0.188:18083

默认账号admin,密码public

(2)设置为中文界面

三、eclipse-mosquitto安装

推荐使用docker安装,方便和homeassistant等服务一同管理。

(1)拉取镜像

docker pull eclipse-mosquitto:latest

(2)创建文件夹

我一般喜欢创建在/opt目录下,具体可以根据自己需要选择,后面能对应上就行。

也可以使用windterm软件进行ssh登录,可以手动创建文件夹。

mkdir /opt/mosqiutto/config

mkdir /opt/mosquitto/log

mkdir /opt/mosquitto/data

touch /opt/mosqiutto/config/pwfile.conf

config是存放mqtt的配置文件

log是目录文件

data是数据文件

pwfile.conf是mqtt的用户账号密码配置文件

文件夹授权

chmod -R 755 /opt/mosqiutto
chmod -R 777 /opt/mosqiutto/log

(3)编辑配置文件

vim /opt/mosquitto/config/mosquitto.conf

这个命令是编译config目录下的mosquitto.conf文件

如果没有vim,使用nano

nano /opt/mosquitto/config/mosquitto.conf

配置文件内容:

persistence true
persistence_location /mosquitto/data
log_dest file /mosquitto/log/mosquitto.log

log_dest stdout

listener 1883

allow_anonymous false

# 指定密码文件
password_file /mosquitto/config/pwfile.conf

vim编辑时,按i键后才可以输入。保存是先按Esc,按输入:wq。

nano编辑时,Ctrl+O保存。Ctrl+X退出。

(4)启动容器

docker run -it --name=mqtt --privileged \
--restart always \
-p 1883:1883 -p 9001:9001 \
-v /opt/mosquitto/config/mosquitto.conf:/mosquitto/config/mosquitto.conf \
-v /opt/mosquitto/config/pwfile.conf:/mosquitto/config/pwfile.conf \
-v /opt/mosquitto/data:/mosquitto/data \
-v /opt/mosquitto/log:/mosquitto/log \
eclipse-mosquitto

这里我创建了一个名字叫做“mqtt”的容器

(5)配置MQTT账号密码

进入mqtt的容器

docker exec -it mqtt sh

进入容器后,会变成这样

mosquitto_passwd -b /mosquitto/config/pwfile.conf username(此处为用户名) password(此处为密码)

这个命令是用来设置MQTT账号密码的,比如我设置一个用户名为admin,密码为public

mosquitto_passwd -b /mosquitto/config/pwfile.conf admin public


报错修复:

一般输入后,很大概率会提示报错,需要修复这些报错

比如这里报错,提示需要给文件授权,为什么按照提示输入,即可解决

chmod 0700 /mosquitto/config/pwfile.conf



这里报错,需要root组,我们需要输入下面的命令

chown root:root /mosquitto/config/pwfile.conf

设置成功:

mosquitto_passwd -b /mosquitto/config/pwfile.conf admin public

直到我们输出这个代码,没有任何返回时,代表设置成功!

这时候我们打开之前创建在config目录下的,pwfile.conf文件,会显示如下:

admin:$7$101$cgpQxjOHRdnfnWvp$XRETOw47AfobPBJI2I2Uox73ylpl77nUnyE9KYBYJSDuRrlsHhGvZG+8A9Wu8WJMETQDp6hSUiz0qI1jmaAMcg==

admin后的密码是被加密处理了。

(6)重启docker容器

docker restart mqtt

重启之后,使用账号admin,密码public,就能够正常使用了。

四、homeassistant添加MQTT

安装mqtt主要是为了homeassistant使用,同时也方便测试,是否安装成功。

1、配置--设备与服务--添加集成

MQTT是homeassistant自带的,点击配置即可。

2、填写MQTT服务器